51單片機(jī)入門之五:數(shù)碼管顯示(動(dòng)態(tài))
掃描二維碼
隨時(shí)隨地手機(jī)看文章
單片機(jī)輕松入門之五數(shù)碼管的動(dòng)態(tài)顯示
上次說了數(shù)碼管的靜態(tài)顯示,這次介紹動(dòng)態(tài)顯示。動(dòng)態(tài)顯示是每隔一段很小的時(shí)間依次點(diǎn)亮一個(gè)數(shù)碼管,再利用人視覺的暫留效應(yīng),從而看起來數(shù)碼管顯示是連續(xù)的。相對(duì)而言,動(dòng)態(tài)顯示的電路、程序稍微復(fù)雜,但是可以節(jié)約單片機(jī)的接口資源。動(dòng)態(tài)顯示涉及位選和段選。位選就是選通顯示的數(shù)碼管,段選就是控制該片數(shù)碼管所要顯示的內(nèi)容。
本次實(shí)驗(yàn)讓4片數(shù)碼管顯示“1234”,實(shí)驗(yàn)中用到了74LS373鎖存器。
實(shí)驗(yàn)原理圖如下:
實(shí)驗(yàn)程序如下:
#include
#define uchar unsigned char;
#define uint unsigned int;
sbit du=P2^0; //位定義段選端
sbit we=P2^1; //位定義位選端
uchar code tabledu[]={0x3f,0x06,0x5b,0x4f,
0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x77,0x7c,
0x39,0x5e,0x79,0x71}; //段選數(shù)據(jù)表
uchar code tablewe[]={0xfe,0xfd,0xfb,0xf7}; //位選數(shù)據(jù)表
uchar i,j,z;
uint numd,numw;
void delay(z) //延時(shí)子函數(shù)
{
for(j=z;j>0;j--)
for(i=110;i>0;i--);
}
void display() //顯示子程序
{
P0=tabledu[numd]; //控制段顯示
delay(10);
du=1; //打開段選信號(hào)
du=0; //鎖存信號(hào)
P0=tablewe[numw]; //控制位選
delay(10);
we=1; //打開位選信號(hào)
we=0; //鎖存信號(hào)
numd++; //段選自加
if(numd==5)
numd=1;
numw++; //位選自加
if(numw==4)
numw=0;
}
void main()
{
numd=1;
numw=0;
while(1)
{
display(); //調(diào)用顯示子程序
delay(30);
}
}
試驗(yàn)結(jié)果圖:
仿真軟件在截圖時(shí),老顯示不全,所以圖片上無法看出連續(xù)顯示。但是在實(shí)驗(yàn)板上效果很好。