数码管实验
原理:数个LED灯形成的数码管
主板上LED接口:
LED数码管上的接口:
主板和LED数码管插口的对应接线图:
74HC573锁存器:
74HC573锁存器的特点:
1. OE非等于0,LE等于1的时候,输入和输出是相同的;
2. 当LE等于低电平(0),不管D0-D7怎么改变,(Q0-Q7)输出都会保持上一次的输入状态(D0-D7),这种状态就叫做锁村。
接线:
LED数码管一般都是共阳极的,单片机的P0口一般都不带有上拉电阻,而其他口都有,这里要加一个10k的上拉电阻。
效果:显示0
放大图:
MCU:
74HC573:
数码管:
Keil代码:
#include <reg52.h> #define u16 unsigned int #define u8 unsigned char #define DATA P0 // P0端口,用于输出控制每个LED数码管的七段码显示情况 sbit seg_sel = P1^4; // 控制74HC573的LE口的高低电平输出情况(锁存器一) sbit bit_sel = P1^5; // 控制74HC573的LE口的高低电平输出情况(锁存器二) // 延迟函数 void delay(u16 time) { u16 x, y; for(x=time; x>0; x--) { for(y=110; y>0; y--) { // 延迟1ms左右 } } } // 主函数 void main(void) { // 端口初始化 P0 = 0xFF; P1 = 0xFF; // LE禁止锁存,即为低电平的时候 seg_sel = 0; bit_sel = 0; while(1) { // bit_sel bit_sel = 1; // 保证Q[7..0]=D[7..0] DATA = 0x80; // 要点亮的LED灯为高电平 bit_sel = 0; // LE引脚从1-->0,把Q端状态锁存起来,即DATA=0x80这个状态锁存起来,BIT[7..0]=0x80 delay(5); // seg_sel seg_sel = 1; // 保证Q[7..0]=D[7..0] DATA = 0xC0; // 输出0的段码,即数字0 seg_sel = 0; // 保持状态 delay(5); } }