/************************************************
跳線設置:雙排針除PSEN外全部插上
顯示效果: 在開發(fā)板的四位八段共陰數(shù)碼管上顯示0-7
相關知識點:1.數(shù)碼管的驅動顯示方式
2.利用2個74HC573芯片將P0口分時復用輸出
注意:在做本實驗之前先要弄懂74hc573的原理
************************************************/
#include"AT89x52.h"
#include"intrins.h"
#include"51hei.h"
#define uint unsigned int
#define uchar unsigned char
sbit DUAN=P2^6; //74HC573的LE端 U1 LED數(shù)碼管的段選端
sbit WEI=P2^7; //74HC573的LE端 U2 LED數(shù)碼管的位選端
uchar Temp[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f}; //共陰顯示字庫
void delay(uint z) //1ms延時
{
uint x,y;
for(x=z;x>0;x--)
for(y=110;y>0;y--);
}
main()
{
uchar i,y;
uchar temp=0xfe; //化為2進制為11111110,供動態(tài)掃描移位用
guandz(); //關掉8*8點陣的顯示
WEI=0;
DUAN=0;
while(1)
{
for(i=0;i<8;i++)
{
//----動態(tài)掃描分3個步驟,以后板子上用動態(tài)顯示的地方都可以套用此程序-----------------
//-----步驟一:送位碼---------------------------------------------------
P0=temp; //位選送p0,其實在任一個時刻八個數(shù)碼管中只有一個是亮的,因為temp始終只有一個位為0.
//但是我們看到的是連續(xù)的,我們的眼睛欺騙了自己,原因是由于交替的速度非常快,視覺暫留
WEI=1; //讓第2個74hc573處于直通狀態(tài),這樣就把P0口上的位碼到數(shù)碼管了.
WEI=0; //鎖存,保持第2個74hc573輸出的位碼不變,即不受P0輸入的影響.
//-----步驟二:送段碼-------------------------------------------------
P0=Temp[ i]; //段碼送入P0口
DUAN=1; //讓第一個74hc573處于直通狀態(tài),這時剛送P0口的段碼將被送到數(shù)碼管上了,因為之前輸入了位碼,所以現(xiàn)在某一個數(shù)碼管將會被點亮
DUAN=0; //鎖存,讓段碼維持在第一個74hc573的輸出上不變,不受P0輸入的影響.
delay(1); //把數(shù)碼管點亮1毫秒, 如果改為delay(60); 你將看到動態(tài)掃描的慢鏡頭,讓你徹底的理解動態(tài)掃描
temp=_crol_(temp,1); //移位,讓下一個數(shù)碼管亮
//-----步驟三:消隱---------------------------------------------------
P0=0x00; //00送p0口
DUAN=1; //把p0口上的00H送到負責段選的74hc573上,其實就是滅掉所有數(shù)碼管的顯示
DUAN=0; //鎖存,維持第一個74hc573的輸出不變
delay(2); //熄滅的時間長短,可調(diào)整亮度
}
}
}
|