數碼管的動態顯示,數碼管動態顯示
實驗板:TX-1C --- 八段數碼管采用共陰極連接
內容:顯示123456


原理:動態顯示的特點是將所有位數碼管的段選線並聯在一起,由位選線控制是哪一位數碼管有效。選亮數碼管采用動態掃描顯示。所謂動態掃描顯示即輪流向各位數碼管送出字形碼和相應的位選,利用發光管的余輝和人眼視覺暫留作用,使人的感覺好像各位數碼管同時都在顯示。動態顯示的亮度比靜態顯示要差一些,所以在選擇限流電阻時應略小於靜態顯示電路中的。

![]()
#include <reg52.h>
#include <intrins.h>
#define uint unsigned int
#define uchar unsigned char
sbit dula = P2^6;
sbit wela = P2^7;
uchar aa,num_du,num_we;
/*段選的碼表*/
uchar code table_du[]={
0x3f,0x06,0x5b,0x4f,
0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x77,0x7c,
0x39,0x5e,0x79,0x71};
/*位選的碼表*/
uchar code table_we[]={
0xfe,0xfd,0xfb,0xf7,
0xef,0xdf};
void main()
{
num_du = 1;
num_we = 0;
TMOD = 0x01; //設置定時器/計數器的工作模式(定時)和工作方式(T0) TMOD:gate T m1 m0
TH0 = (65536-1800)/256;
TL0 = (65536-1800)%256;
EA = 1; //開總中斷
ET0 = 1; //開T0中斷
TR0 = 1; //啟動定時器
while(1)
{
if(aa == 1) //間隔時間要足夠小
{
aa = 0;
dula = 1; //打開段選寄存器
P0 = table_du[num_du]; //往寄存器寫值
dula = 0; //關閉段選寄存器
wela = 1; //打開位選寄存器
P0 = table_we[num_we]; //往寄存器寫值
wela = 0; //關閉位選寄存器
num_du++;
if(num_du == 7)
num_du = 1;
num_we++;
if(num_we == 6)
num_we = 0;
}
}
}
void T0_time() interrupt 1 //中斷函數,方式1,即T0中斷
{
TH0 = (65536-1800)/256;
TL0 = (65536-1800)%256;
aa++;
}
View Code