动态数码管的工作原理和代码实现
数码管动态显示原理:动态显示的特点是将所有数码管的段选并联在一起,有位选控制是哪一位数码管有效。选亮数码管采用动态扫描显示。所谓动态扫描显示即轮流向各位数码管送出字形码和相应的位选,利用发光管的余晖和人眼视觉暂留作用,使人的感觉好像各位数码管同时都在显示。动态显示的亮度比静态显示要差一些,所有在选择限流电阻时应略小于静态显示电路中的。
H74HC138D是一种三通道输入、八通道输出译码器,主要应用于消费类电子产品。
动态点亮数码管的代码实现:
#include "reg52.h" typedef unsigned char u8; typedef unsigned int u16; sbit LSA=P2^2; sbit LSB=P2^3; sbit LSC=P2^4; u8 code smgduan[]={0x3f, 0x06, 0x5b, 0x4f, 0x66, 0x6d, 0x7d, 0x07,
0x7f, 0x6f, 0x77, 0x7c, 0x39, 0x5e, 0x79, 0x71}; void delay(u16 i) { while(i--); } void DigDisplay() { u8 i; for(i=0; i<8; i++) { switch(i) { case(0): LSA=0; LSB=0; LSC=0; break; case(1): LSA=1; LSB=0; LSC=0; break; case(2): LSA=0; LSB=1; LSC=0; break; case(3): LSA=1; LSB=1; LSC=0; break; case(4): LSA=0; LSB=0; LSC=1; break; case(5): LSA=1; LSB=0; LSC=1; break; case(6): LSA=0; LSB=1; LSC=1; break; case(7): LSA=1; LSB=1; LSC=1; break; } P0=smgduan[i]; delay(100); P0=0x00; } } void main() { while(1) { DigDisplay(); } }