/*動(dòng)態(tài)數(shù)顯的設(shè)計(jì)思路,首先是我們要先知道怎樣才能使哪個(gè)位亮,顯示的段是什么數(shù)值,接下來(lái)就是中斷時(shí)間 的問(wèn)題了,設(shè)計(jì)步驟如下,如果要讓八個(gè)數(shù)碼管靜態(tài)顯示1到8,我們可以修改中斷時(shí)間,如把50000改成100或更低*/
#include<reg52.h> #include<intrins.h> #define uint unsigned int #define uchar unsigned char sbit duan=P2^6; sbit wei=P2^7;
uchar a,numw,numd; uchar code tabled[]={ 0x3f,0x06,0x5b,0x4f,0x66, 0x6d,0x7d,0x07,0x7f,0x6f}; /*第二步驟,創(chuàng)建段顯數(shù)值的對(duì)碼表0~9數(shù)值.如果要顯示1~8數(shù)值,最好多加前后兩位數(shù)0跟9, 因?yàn)楹竺?+移位時(shí)就能按我們常規(guī)順序亮下去,至于如何顯示對(duì)應(yīng)數(shù)值請(qǐng)先看數(shù)碼顯示電路圖*/ uchar code tablew[]={ 0xfe,0xfd,0xfb,0xf7, 0xef,0xdf,0xbf,0x7f}; //第二步驟,創(chuàng)建位顯,就是顯示的位置,這個(gè)碼表相對(duì)簡(jiǎn)單,用二進(jìn)制表示11111110~01111111,是0的為八位數(shù)顯管的位置 void main() { a=0; //定義個(gè)時(shí)間函數(shù) numw=0; //附位顯初值為0位 numd=0; //附段顯初值為0位 TMOD=0X01; //第四步驟,附中斷暫存器初值 TH0=(65536-50000)/256; //附中斷請(qǐng)求時(shí)間初值,高8位 TL0=(65536-50000)%256; //附中斷請(qǐng)求時(shí)間初值,低8位 EA=1; //開(kāi)啟總中斷 ET0=1; //開(kāi)啟定時(shí)中斷 TR0=1; //啟動(dòng)定時(shí)中斷 while(1) { if(a==10) //第三步驟,執(zhí)行速度,如果等20差不多是1秒,則往下執(zhí)行,相當(dāng)于單位數(shù)值亮的時(shí)間 { a=0; //重新附值初值0 numd++; //段顯值++ if(numd==9) //如果段值在對(duì)碼表第9位則轉(zhuǎn)下執(zhí)行 numd=1; /*重新附值段顯值對(duì)應(yīng)對(duì)碼表第1位,因?yàn)?+所以0位并不在數(shù)碼管中顯示. 如果要顯示,也會(huì)因?yàn)?+而在第二輪中顯示出*/ duan=1; //開(kāi)啟段顯端 P0=tabled[numd];//附段顯P0值對(duì)應(yīng)段顯值對(duì)碼表 duan=0; //鎖存 wei=1; //開(kāi)啟位顯端 P0=tablew[numw];//附位顯P0值對(duì)應(yīng)位顯值對(duì)碼表 wei=0; //鎖存 numw++; //相當(dāng)于位顯移位 if(numw==8) //如果位顯值到對(duì)應(yīng)位顯對(duì)碼表第八位則轉(zhuǎn)下執(zhí)行 numw=0; //重新附值位顯值對(duì)應(yīng)對(duì)碼表第0位起 /*
下面是簡(jiǎn)單的單個(gè)數(shù)碼管顯示例證 第一驟, 修改后在第三步驟內(nèi) #include"reg52.h" #include"intrins.h"
sbit duan=P2^6; //段顯端口 sbit wei=P2^7; //位顯端口
void main() { //P0=0xff; 數(shù)碼管不顯示任何信號(hào),默認(rèn)情況下通電本身就不顯示,可以不寫(xiě) duan=1; //開(kāi)啟段顯端口 P0=0x06; //附值段顯數(shù)值為1,可以查閱數(shù)碼管電路圖相對(duì)應(yīng)顯示的對(duì)碼表 duan=0; //鎖存,保持上一步段顯狀態(tài),硬件說(shuō)明請(qǐng)查閱74HC573功能 wei=1; //開(kāi)啟位顯端口 P0=0xfe; //附值位顯位置,01111111,左邊第一位,為0的顯示 wei=0; //鎖存,保持上一步位顯狀態(tài),硬件說(shuō)明請(qǐng)查閱74HC573功能 } */ } } }
void timer0() interrupt 1 /*第四步驟,中斷時(shí)間函數(shù)這個(gè)相當(dāng)于移位數(shù)顯的速度,速度夠快,人眼就會(huì)有余輝效應(yīng), 感覺(jué)8位數(shù)顯一直在亮著,相當(dāng)于正在播放的電影膠卷*/
{ TH0=(65536-50000)/256; TL0=(65536-50000)%256; a++; }
/*
以上有什么地方還需要改進(jìn)的還請(qǐng)老師明示
*/
[此貼子已經(jīng)被作者于2010-4-28 8:52:39編輯過(guò)]
|