摘 要: 本文介紹了一種由單片機串行口與74LS164組成的數碼管動態掃描技術,首先介紹電路的組成,工作原理和所用主要的工作器件,然后介紹硬件設計圖及完整的C51源程序。
關鍵詞: 單片機教學 74LS164 動態掃描技術
1.引言
“串行輸入轉并行輸出”簡稱“串轉并”,是單片機教學中一個重要課題,涉及串行口、74LS164轉換芯片及外圍電路知識的應用。在通常教學中,一般用74LS164串行擴展顯示接口,并實現靜態顯示。如何實現動態顯示,大部分學生對此問題理解不透,本文就此問題進行探討。
2.系統工作原理及電路設計
為了加深學生的理解,我考慮用串行口控制多個數碼管,模擬一個簡單的電子鐘,每過一秒動態加一。為了方便教學,便于學生理解,我用KEIL C編寫程序,在PROTEUS中畫電路并調試電路。電路原理圖如圖1所示,關鍵點有四部分。
(1)74LS164為串入并出移位寄存器,如下圖所示。
A、B:串行輸入端。
Q0—Q7(QA-QH):串行輸出端。
CP:串行時鐘輸入端。
/MR:串行輸出清零端。
VCC:+5V。
GND:接地端。
(2)數據由單片機RXD輸出,74LS164的第1、2引腳負責接收數據。
(3)移位脈沖由單片機TXD輸出,和74LS164的第8引腳進行連接。脈沖的頻率是主時鐘的十二分頻。
(4)芯片功能。
將74LS164的A、B端與RXD相接,CLK與TXD相接,/MR接高電平,在滿足條件時數據就傳送到74LS164并寄存。將前一個74LS164的QH端連接到下一個74LS164的QA端,再將CLK端連接到一起并接到TXD,則送數據時,前后數據就會依次從上一個片子傳到下一個片子。
電路如下圖所示:
(圖一)
3.程序如下:
#include
#include
sbit p11=P1^1;
sbit p12=P1^2;
unsigned char data discode[11]=
{0XFC,0X60,0XDA,0XF2,0X66,0XB6,0XBE,0XE0,0XFE,0XF6,0x00};//共陰串行。
unsigned char leddis[2]={0,0};//顯存,有幾個數碼管可以定義幾個。
unsigned char num,time;
void display(void)//數碼管顯示函數。
{unsigned char count;//數碼管個數。
for (count=2;count>0;count--)
{
SBUF=discode[leddis[count-1]];
while(TI==0);
TI=0;}}
void t0serv(void) interrupt 1
{
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
if(time++>20)
{time=0;
if(num++>99) num=0;
leddis=num/10;
leddis=num%10;
display();
}
}
void main()
{
SCON=0x00; //設定UART的工作方式為MODEO。
display(); //顯示函數。
TMOD=0X01;
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
ET0=1;EA=1;
while(1)
{if(p11==0) //鍵P11被按下,開始定時。
TR0=1;
if(p12==0) //鍵P12被按下,停止定時。
TR0=0;}}
4.結語
利用Q7(QH)端連接到下一個74LS164的QA端,可以擴展多個數碼管,由于脈沖的頻率是主時鐘的十二分頻,假設擴展2個數碼管,則數碼管的最大刷新頻率約為主時鐘2×8×12=198分頻,對于主時鐘為12MHz的單片機,數碼管最大刷新周期為15.13μs。可以推算,如果擴展8個數碼管,顯示應該很穩定,沒有閃爍現象。
利用“串轉并”技術,只要用單片機的兩個引腳,就可以控制多個輸出設備,極大地節省了單片機引腳資源,但由于用到74LS164,則成本也會增加些,可以根據實際情況靈活選擇方案。
a
參考文獻:
[1]周國運.單片機原理與應用(C語言版)[M].北京:中國水利水電出版社,2009.
[2]謝維成,楊加國.單片機原理與應用及C51程序設計[M].北京:清華大學出版社,2006.
[3]張道德.單片機接口技術(C51版)[M].北京:中國水利水電出版社,2007.
[4]李建忠.單片機原理及應用[M].西安:西安電子科技大學出版社,2002.
[5]陳莉蓉編譯.單片微型計算機MCS-48 MCS-51應用手冊.電子工業出版社.