登录  | 立即注册

游客您好!登录后享受更多精彩

扫一扫,访问微社区

QQ登录

只需一步,快速开始

开启左侧

[学习笔记] 单片机控制LED小灯

[复制链接]
发表于 2019-1-22 14:18:31 | 显示全部楼层 |阅读模式
学习笔记
学习科目: 单片机
学习安排: 先学习相关知识 后在开发板上实践
开始时间: 2019-01-22
结束时间: 2019-01-22
   单片机 是一种集成电路芯片单片机的工作原理很简单,就是听取电脑给它设置的指令并在外部辅助电路和设备的帮助下完成相应的动作,以达到某种目的。这个指令一般来说是汇编或者是C语言。LED小灯 作为单片机的一种外设 ,我们可通过编写程序来调节单片机引脚的电平高低 进而控制LED小灯的亮暗,流水以及流水方向。   QQ图片20190122133103.png


但在设置DB1、DB2、DB3等这些线路对应的单片机引脚前,我们需要打开LED 的供电开关 也就是对LEDS6设置低电平使三极管导通,这便要了解管理LEDS6这条线路的译码器74HC138

  74HC138是一款高速CMOS器件,74HC138引脚兼容低功耗肖特基TTL(LSTTL)系列。74HC138译码器可接受3位二进制加权地址输入(A0, A1和A2),并当使能时,提供8个互斥的低有效输出(Y0至Y7),我们可通过依次设置P20、P21、P22三个引脚电平为0 1 1 来达到让38译码器LEDS6引脚输出低电平的效果。金沙滩视频中我们还需要设置E1 E2 E3口的电平才可让LEDS6输出低电平,但由于我们所用的板子已经对E1 E2 E3做出相应的硬件设置,所以我们不必再软件设置了。
  这样没有完,连接LED小灯的线路不可以直接接在单片机引脚上,因为这样的电流易超出限制而烧坏单片机所以便在单片机与led 小灯之间加了驱动器74HC245 QQ图片20190122133131.png
74hc245是一种在单片机系统中常用的驱动器,三态输出八路收发器,在电路中的作用是:增加io口的驱动能力,比如说51单片机的io口本身的驱动电流较小但所带的负载很大,这种时候就可以使用74hc245来增强io口的驱动能力,电流缓冲器等作用。我们用的开发板上的74HC245起的就是电流缓冲作用。我们需要对DIR口设置高电平,令A口为输入方向,B口为输出方向。对ENLED口设低电平来启动74HC245。但我们所用的板子直接将DIR口接入5V电源,所以我们只需要设置ENLED口的电平即可。
程序:
#include <stc12c5a60s2.h>

sbit A0 = P2^0;
sbit A1 = P2^1;
sbit A2 = P2^2;
sbit ENLED = P1^1;
sbit DB6 = P0^4;

unsigned int cunt = 0;
unsigned char fash1s = 0;

void Timer0Init(void);
void main()
{               
        Timer0Init();
       
        A0 = 0;
        A1 = 1;
        A2 = 1;
        ENLED = 0;

        EA = 1;
        ET0 = 1;

        while(1)
        {
                if(fash1s == 1)
                {
                        fash1s = 0;
                        DB6 = ~(DB6);
                }

        }
}
void Timer0Init(void)                //1??@33.000MHz
{
        AUXR |= 0x80;                //?????1T??
        TMOD &= 0xF0;                //???????
        TL0 = 0x18;                //??????
        TH0 = 0x7F;                //??????
        TF0 = 0;                //??TF0??
        TR0 = 1;                //???0????
}

void InterruptTime0() interrupt 1   
{
        TL0 = 0x18;               
        TH0 = 0x7F;                               
        cunt ++;
       
        if (cunt >= 1000)
        {
                cunt = 0;
                fash1s =1;
        }
        else
        {
                cunt++;
        }
}       

QQ图片20190122133113.png
好懒~~不想说~~~
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表