11 动态数码管
2018-03-25 本文已影响0人
aaa小菜鸡
单片机STC89C52学习——11 动态数码管
汇总:00 单片机STC89C52学习
参考教程:普中科技
1 工作原理
1.1 数码管动态显示原理
动态显示的特点是将所有数码管的段选线并联在一起,由位选线控制哪一位数码管有效。选亮数码管采用动态扫描显示。所谓动态扫描显示即轮流向各位数码管送出字形码和相应的位选,利用发光管的余辉和人眼视觉暂留作用,使人的感觉好像各位数码管同时都在显示。动态显示的亮度比静态显示要差一些,所以在选择限流电阻时应略小于静态显示电路中的。
1.2 74HC138芯片
三通道输入、八通道输出译码器
原理图
管脚说明
2 程序:动态数码管——依次显示76543210
#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 LEDSeg[] = {0x3f , 0x06 , 0x5b , 0x4f ,
0x66 , 0x6d , 0x7d , 0x07 ,
0x7f , 0x6f , 0x77 , 0x7c ,
0x39 , 0x5e , 0x79 , 0x71};
void delay(u16 j)
{
while(j --);
}
void DigiDisplay()
{
u8 i;
for (i = 0; i < 8; i ++)
{
switch(i)
{
case 0:
LSA = 0; LSB = 0; LSC = 0;
break;
case 1:
LSA = 0; LSB = 0; LSC = 1;
break;
case 2:
LSA = 0; LSB = 1; LSC = 0;
break;
case 3:
LSA = 0; LSB = 1; LSC = 1;
break;
case 4:
LSA = 1; LSB = 0; LSC = 0;
break;
case 5:
LSA = 1; LSB = 0; LSC = 1;
break;
case 6:
LSA = 1; LSB = 1; LSC = 0;
break;
case 7:
LSA = 1; LSB = 1; LSC = 1;
break;
}
P0 = LEDSeg[i];
delay(100);// 约1ms
P0 = 0x00;// 消隐,防止重影
}
}
void main()
{
while (1)
{
DigiDisplay();
}
}
效果:同上一次,经测试位选没问题,段选总是显示"8."即0xff,暂未找到原因。这次表现出全是“8.”。结果第二天同样的程序成功了,但是不稳定...