查看:
5260
|
回复:
0
|
蓝桥杯练习(一)数码管和LED的使用
|
Argon
9
主题
5
回复 |
发表于2019-01-30 21:08:16
|
只看该作者
1#
电梯直达
蓝桥杯练习(一)数码管和LED的使用 做基础练习的时候数码管和LED灯经常使用,想要查看一个采集的数据是否正确,可以通过数码管显示,LCD1602显示,串口显示等等,学习1--2种显示方法是有必要的,LED灯点亮则是基础。 蓝桥杯开发板的LED灯电路图,如下图所示。
开发板上的LED灯低电平点亮,LED灯的顺序从左往右依次是1-8。 数码管编译码,蓝桥杯开发板的数码管是共阳极的。编译码如下图所示 如果想要驱动数码管就要同时使用两个74HC573锁存器分别控制段选和位选,如下图所示 数码管使用两个74HC573,U7段选(想要显示数据的存储锁存器),U6位选(选择哪一个数码管亮的锁存器),锁存器上面OE引脚接地,此时只用Y6C控锁存器即可,Y6C置1锁存器打开,可以存储数据和选位,Y6C置0锁存器关闭,此时不能对数码管进行显示操作。Y7C和Y6C是同样的道理,在普通的开发板上面段选,位选是在同一个锁存器上面进行的,在蓝桥杯开发板上面有众多使用P0端口的器件,LED ,数码管,电机,蜂鸣器和继电器等等,此时就通过译码器74HC138进行逐个控制74HC573锁存器,进而在控制数码管和LED灯。想要控制数码管还得学习译码器74HC138。 蓝桥杯开发板附带的译码器电路,如下图所示 译码器真值表 H--1,L--0 。P25--A,P26--B,P27--C。 在开发板中我们可以看到G1已经连接到了VCC,G2A和G2B也已经接地,所以我们只需要通过单片机将P2.5、P2.6、P2.7三个I/o口送入数据就可以控制38译码器后端的Y0——7八个端口,为了简单的记忆,可以将38译码器上的ABC三个端口ABC理解为:A代表1,B代表2,C代表4。如果想让Y5端口为低电平的话就只需将A和C置1(1+4=5)。如果想使Y3口为低电平的话就仅仅需要将A和B两个端口置1即可,这种方法十分的使用而且便于记忆。 74HC02或非门 如下图所示74HC02芯片内部电路 74HC02输入(A,B)和输出(Y) 或非门74HC02来控制的只有当WR和Y4同时为0的时候Y4C才为1,这样是或非门的原理0+0=1,1+0=0。WR连接的是IAP单片机的P4.2端口。在程序中需要将P4.2端口手动拉低。WR = 0即可。 控制单个LED void LED1() { P2 = (P2&0x1f)|0x80; //P2&0x1f 是为了清空P25,P26,P27三个端口的数据,保留其他的端口的数据,|0x80 控制LED灯那个573锁存器,此时控制74HC138的ABC三个端口的高低电平 P0 =~ 0x01; //LED灯是低电平点亮灯 也可以写0xfe delayms(1); //延时 P2 = P2&0x1f; //关闭LED灯使用的573锁存器 } 有了LED灯的演示(单个和多个LED的控制原理是一样的,多个LED灯可以采取移位的方式进行亮),数码管也不难写。 静态显示数码管
sbit WR = P4^2; //共阳极数码管 uchar code smg[]={0xC0, 0xF9, 0xA4, 0xB0, 0x99, 0x92, 0x82, 0xF8,0x80, 0x90}; //缓存数码管数据 uchar buff[] = {0,0,0,0,0,0,0,0}; void display() { P2 = ((P2&0x1f) | 0xe0);//段选消隐 P0 = 0xff; P2 &= 0x1f; P2 = ((P2&0x1f) | 0xe0); //段选显示数据 P0 = smg[buff[dspcom]]; P2 &= 0x1f; P2 = ((P2&0x1f) | 0xc0); //位选移位开始 P0 = (0x01<<dspcom); P2 &= 0x1f; if(++dspcom == 8)dspcom = 0; //限制数码管显示长度 } 1.程序:程序静态显示.zip 2.数据手册:74HC138.pdf 74HCT573.pdf |
|