劉曉鳳
摘 要:采用動(dòng)態(tài)掃描方式驅(qū)動(dòng)數(shù)碼管一般外圍硬件較少,但是對(duì)單片機(jī)資源耗用巨大。介紹了單片機(jī)直接驅(qū)動(dòng)8位數(shù)碼管時(shí)利用定時(shí)器中斷解決動(dòng)態(tài)掃描工作方式下對(duì)單片機(jī)時(shí)間資源占用的問(wèn)題。
關(guān)鍵詞:?jiǎn)纹瑱C(jī);定時(shí)器中斷;數(shù)碼管驅(qū)動(dòng)
數(shù)碼管的顯示方式可以分為動(dòng)態(tài)和靜態(tài)兩種。動(dòng)態(tài)掃描方式,是利用發(fā)光二極管的余輝效應(yīng)和人眼的視覺(jué)暫留效應(yīng)來(lái)實(shí)現(xiàn)的,只要在一定時(shí)間內(nèi)數(shù)碼管的筆段亮的頻率夠快,人眼就看不出閃爍,一般外圍硬件較少,但是對(duì)單片機(jī)資源耗用巨大。靜態(tài)的也較鎖存方式,單片機(jī)送出數(shù)據(jù)后控制外圍鎖存器件鎖存數(shù)據(jù),這樣數(shù)碼管筆段里的電流不變,數(shù)碼管穩(wěn)定顯示,這樣單片機(jī)可以干別的活不用管數(shù)碼管了。這種方案的優(yōu)點(diǎn)是對(duì)單片機(jī)的P口資源和時(shí)間耗用很少,但是數(shù)碼管的外圍輔助電路復(fù)雜。
多位數(shù)碼管的常用驅(qū)動(dòng)方法有:
1.不需要芯片的驅(qū)動(dòng)方式,掃描顯示
這種方式a~g和DP一共8根線分別占用單片機(jī)8個(gè)端口線,一般是一整個(gè)P口,然后有幾位數(shù)碼管就另外需要幾個(gè)控制線作為片選。對(duì)于MCU的時(shí)間占用幾乎是全時(shí)的,如果沒(méi)有其他的任務(wù)或者其他的任務(wù)耗用時(shí)間很少可以考慮這種顯示方式,比如時(shí)鐘、溫度計(jì)等等。
2.74LS164、74HC595等通用移位寄存器驅(qū)動(dòng)
這是一種帶鎖存的串入并出芯片,需要占用單片機(jī)的2或3根線,如果需要多位驅(qū)動(dòng),一般使用譯碼器進(jìn)行快速線選,或者使用權(quán)移位寄存器級(jí)聯(lián)的方式實(shí)現(xiàn),這種驅(qū)動(dòng)方式采用掃描顯示,對(duì)單片機(jī)端口的耗用比較少,但是因?yàn)槭菕呙璺绞剿詫?duì)單片機(jī)時(shí)間耗用還是全時(shí)的。
3.MAX7219、HD7279、BC7281、ZLG7289、ZLG7290、WH8280、CH451、CH452等專用LED數(shù)碼管驅(qū)動(dòng)芯片驅(qū)動(dòng)
這是驅(qū)動(dòng)LED數(shù)碼管最理想的芯片,從典型應(yīng)用電路上看外圍元件極少,直接驅(qū)動(dòng),最吸引人的是使用了串行接口,只要三根線就可以驅(qū)動(dòng)多達(dá)8位的數(shù)碼管,而且在送完數(shù)據(jù)后就不用管了,自己消零消隱,有些芯片還帶有8*8的鍵盤(pán)接口(鍵盤(pán)輸入的時(shí)候,從串口輸出鍵盤(pán)編碼供單片機(jī)讀?。?,但這種驅(qū)動(dòng)方法往往價(jià)格比較昂貴。
本文重點(diǎn)介紹單片機(jī)直接驅(qū)動(dòng)8位數(shù)碼管時(shí)利用定時(shí)器中斷解決動(dòng)態(tài)掃描工作方式下對(duì)單片機(jī)時(shí)間資源占用的問(wèn)題。單片機(jī)直接驅(qū)動(dòng)8位數(shù)碼管的電路如右圖所示,電路中數(shù)碼管的a~h共8根線分別占用單片機(jī)8個(gè)端口線,連接到P0口,8位數(shù)碼管的公共端(公共陽(yáng)極)連接到單片機(jī)的P2口,作為數(shù)碼管動(dòng)態(tài)掃描時(shí)的片選,該端口通過(guò)上拉電阻與電源相連,以提高驅(qū)動(dòng)能力,電路實(shí)際制作時(shí),若驅(qū)動(dòng)能力不夠,應(yīng)考慮使用三極管驅(qū)動(dòng)電路或驅(qū)動(dòng)芯片。
在程序設(shè)計(jì)中,本人將數(shù)碼管的驅(qū)動(dòng)程序放在定時(shí)器T0的中斷服務(wù)子程序中,定時(shí)器每申請(qǐng)一次中斷,點(diǎn)亮一位數(shù)碼管,在下一次中斷時(shí),再點(diǎn)亮下一位數(shù)碼管,中斷八次后,八位數(shù)碼管依次點(diǎn)亮了一遍,重新回到第一位數(shù)碼管,再依次點(diǎn)亮。
程序如下:
#include“reg51.h”
#define DB P0
#define AB P2
unsigned char w=5,buffer[8]={10,10,10,10,10,10,10,10};
unsigned char h=8,m=30,s=0;
unsigned int time;
unsigned char code dsW[ ]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};
unsigned char code dsB[ ]=
{0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xff,
0xbf};
void T0_int( ) interrupt 1
{TH0=(65536-1843)/256;TL0=(65536-1843)%256;//定時(shí)器T0重置初值DB=0xff;//清屏
AB=~dsW[w];//送數(shù)碼管片選代碼
DB=dsB[buffer[w];//送相應(yīng)數(shù)碼管的段代碼
w++;if(w>7)w=0;//準(zhǔn)備點(diǎn)亮下一位數(shù)碼管
/*********以下為數(shù)字鐘程序********/
time++;
if(time>=250){buffer[2]=buffer[5]=10;}
if(time>=500) {buffer[2]=buffer[5]=11;s++;time=0;}
if(s>59) {s=0;m++;}
if(m>59) {m=0;h++;}
if(h>23) h=0;
buffer[0]=h/10;buffer[1]=h%10;
buffer[3]=m/10;buffer[4]=m%10;
buffer[6]=s/10;buffer[7]=s%10;
/*********以上為數(shù)字鐘程序********/
}
main()
{TH0=(65536-1843)/256;TL0=(65536-1843)%256;
TMOD=0x01;EA=1;ET0=1;TR0=1;
while(1);
}
程序中,由于數(shù)碼管的驅(qū)動(dòng)放在定時(shí)器T0的中斷服務(wù)子程序中,只在響應(yīng)T0中斷服務(wù)子程序時(shí)執(zhí)行并占用MCU時(shí)間,其余MCU時(shí)間空閑,很好地解決了動(dòng)態(tài)掃描時(shí)單片機(jī)被全時(shí)占用的問(wèn)題。為避免數(shù)碼管抖動(dòng),定時(shí)器中斷間隔不宜過(guò)長(zhǎng),本文中定時(shí)器中斷間隔時(shí)間為2ms。
(作者單位 江蘇省溧水中等專業(yè)學(xué)校)
?誗編輯 薛直艷
摘 要:采用動(dòng)態(tài)掃描方式驅(qū)動(dòng)數(shù)碼管一般外圍硬件較少,但是對(duì)單片機(jī)資源耗用巨大。介紹了單片機(jī)直接驅(qū)動(dòng)8位數(shù)碼管時(shí)利用定時(shí)器中斷解決動(dòng)態(tài)掃描工作方式下對(duì)單片機(jī)時(shí)間資源占用的問(wèn)題。
關(guān)鍵詞:?jiǎn)纹瑱C(jī);定時(shí)器中斷;數(shù)碼管驅(qū)動(dòng)
數(shù)碼管的顯示方式可以分為動(dòng)態(tài)和靜態(tài)兩種。動(dòng)態(tài)掃描方式,是利用發(fā)光二極管的余輝效應(yīng)和人眼的視覺(jué)暫留效應(yīng)來(lái)實(shí)現(xiàn)的,只要在一定時(shí)間內(nèi)數(shù)碼管的筆段亮的頻率夠快,人眼就看不出閃爍,一般外圍硬件較少,但是對(duì)單片機(jī)資源耗用巨大。靜態(tài)的也較鎖存方式,單片機(jī)送出數(shù)據(jù)后控制外圍鎖存器件鎖存數(shù)據(jù),這樣數(shù)碼管筆段里的電流不變,數(shù)碼管穩(wěn)定顯示,這樣單片機(jī)可以干別的活不用管數(shù)碼管了。這種方案的優(yōu)點(diǎn)是對(duì)單片機(jī)的P口資源和時(shí)間耗用很少,但是數(shù)碼管的外圍輔助電路復(fù)雜。
多位數(shù)碼管的常用驅(qū)動(dòng)方法有:
1.不需要芯片的驅(qū)動(dòng)方式,掃描顯示
這種方式a~g和DP一共8根線分別占用單片機(jī)8個(gè)端口線,一般是一整個(gè)P口,然后有幾位數(shù)碼管就另外需要幾個(gè)控制線作為片選。對(duì)于MCU的時(shí)間占用幾乎是全時(shí)的,如果沒(méi)有其他的任務(wù)或者其他的任務(wù)耗用時(shí)間很少可以考慮這種顯示方式,比如時(shí)鐘、溫度計(jì)等等。
2.74LS164、74HC595等通用移位寄存器驅(qū)動(dòng)
這是一種帶鎖存的串入并出芯片,需要占用單片機(jī)的2或3根線,如果需要多位驅(qū)動(dòng),一般使用譯碼器進(jìn)行快速線選,或者使用權(quán)移位寄存器級(jí)聯(lián)的方式實(shí)現(xiàn),這種驅(qū)動(dòng)方式采用掃描顯示,對(duì)單片機(jī)端口的耗用比較少,但是因?yàn)槭菕呙璺绞剿詫?duì)單片機(jī)時(shí)間耗用還是全時(shí)的。
3.MAX7219、HD7279、BC7281、ZLG7289、ZLG7290、WH8280、CH451、CH452等專用LED數(shù)碼管驅(qū)動(dòng)芯片驅(qū)動(dòng)
這是驅(qū)動(dòng)LED數(shù)碼管最理想的芯片,從典型應(yīng)用電路上看外圍元件極少,直接驅(qū)動(dòng),最吸引人的是使用了串行接口,只要三根線就可以驅(qū)動(dòng)多達(dá)8位的數(shù)碼管,而且在送完數(shù)據(jù)后就不用管了,自己消零消隱,有些芯片還帶有8*8的鍵盤(pán)接口(鍵盤(pán)輸入的時(shí)候,從串口輸出鍵盤(pán)編碼供單片機(jī)讀?。@種驅(qū)動(dòng)方法往往價(jià)格比較昂貴。
本文重點(diǎn)介紹單片機(jī)直接驅(qū)動(dòng)8位數(shù)碼管時(shí)利用定時(shí)器中斷解決動(dòng)態(tài)掃描工作方式下對(duì)單片機(jī)時(shí)間資源占用的問(wèn)題。單片機(jī)直接驅(qū)動(dòng)8位數(shù)碼管的電路如右圖所示,電路中數(shù)碼管的a~h共8根線分別占用單片機(jī)8個(gè)端口線,連接到P0口,8位數(shù)碼管的公共端(公共陽(yáng)極)連接到單片機(jī)的P2口,作為數(shù)碼管動(dòng)態(tài)掃描時(shí)的片選,該端口通過(guò)上拉電阻與電源相連,以提高驅(qū)動(dòng)能力,電路實(shí)際制作時(shí),若驅(qū)動(dòng)能力不夠,應(yīng)考慮使用三極管驅(qū)動(dòng)電路或驅(qū)動(dòng)芯片。
在程序設(shè)計(jì)中,本人將數(shù)碼管的驅(qū)動(dòng)程序放在定時(shí)器T0的中斷服務(wù)子程序中,定時(shí)器每申請(qǐng)一次中斷,點(diǎn)亮一位數(shù)碼管,在下一次中斷時(shí),再點(diǎn)亮下一位數(shù)碼管,中斷八次后,八位數(shù)碼管依次點(diǎn)亮了一遍,重新回到第一位數(shù)碼管,再依次點(diǎn)亮。
程序如下:
#include“reg51.h”
#define DB P0
#define AB P2
unsigned char w=5,buffer[8]={10,10,10,10,10,10,10,10};
unsigned char h=8,m=30,s=0;
unsigned int time;
unsigned char code dsW[ ]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};
unsigned char code dsB[ ]=
{0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xff,
0xbf};
void T0_int( ) interrupt 1
{TH0=(65536-1843)/256;TL0=(65536-1843)%256;//定時(shí)器T0重置初值DB=0xff;//清屏
AB=~dsW[w];//送數(shù)碼管片選代碼
DB=dsB[buffer[w];//送相應(yīng)數(shù)碼管的段代碼
w++;if(w>7)w=0;//準(zhǔn)備點(diǎn)亮下一位數(shù)碼管
/*********以下為數(shù)字鐘程序********/
time++;
if(time>=250){buffer[2]=buffer[5]=10;}
if(time>=500) {buffer[2]=buffer[5]=11;s++;time=0;}
if(s>59) {s=0;m++;}
if(m>59) {m=0;h++;}
if(h>23) h=0;
buffer[0]=h/10;buffer[1]=h%10;
buffer[3]=m/10;buffer[4]=m%10;
buffer[6]=s/10;buffer[7]=s%10;
/*********以上為數(shù)字鐘程序********/
}
main()
{TH0=(65536-1843)/256;TL0=(65536-1843)%256;
TMOD=0x01;EA=1;ET0=1;TR0=1;
while(1);
}
程序中,由于數(shù)碼管的驅(qū)動(dòng)放在定時(shí)器T0的中斷服務(wù)子程序中,只在響應(yīng)T0中斷服務(wù)子程序時(shí)執(zhí)行并占用MCU時(shí)間,其余MCU時(shí)間空閑,很好地解決了動(dòng)態(tài)掃描時(shí)單片機(jī)被全時(shí)占用的問(wèn)題。為避免數(shù)碼管抖動(dòng),定時(shí)器中斷間隔不宜過(guò)長(zhǎng),本文中定時(shí)器中斷間隔時(shí)間為2ms。
(作者單位 江蘇省溧水中等專業(yè)學(xué)校)
?誗編輯 薛直艷
摘 要:采用動(dòng)態(tài)掃描方式驅(qū)動(dòng)數(shù)碼管一般外圍硬件較少,但是對(duì)單片機(jī)資源耗用巨大。介紹了單片機(jī)直接驅(qū)動(dòng)8位數(shù)碼管時(shí)利用定時(shí)器中斷解決動(dòng)態(tài)掃描工作方式下對(duì)單片機(jī)時(shí)間資源占用的問(wèn)題。
關(guān)鍵詞:?jiǎn)纹瑱C(jī);定時(shí)器中斷;數(shù)碼管驅(qū)動(dòng)
數(shù)碼管的顯示方式可以分為動(dòng)態(tài)和靜態(tài)兩種。動(dòng)態(tài)掃描方式,是利用發(fā)光二極管的余輝效應(yīng)和人眼的視覺(jué)暫留效應(yīng)來(lái)實(shí)現(xiàn)的,只要在一定時(shí)間內(nèi)數(shù)碼管的筆段亮的頻率夠快,人眼就看不出閃爍,一般外圍硬件較少,但是對(duì)單片機(jī)資源耗用巨大。靜態(tài)的也較鎖存方式,單片機(jī)送出數(shù)據(jù)后控制外圍鎖存器件鎖存數(shù)據(jù),這樣數(shù)碼管筆段里的電流不變,數(shù)碼管穩(wěn)定顯示,這樣單片機(jī)可以干別的活不用管數(shù)碼管了。這種方案的優(yōu)點(diǎn)是對(duì)單片機(jī)的P口資源和時(shí)間耗用很少,但是數(shù)碼管的外圍輔助電路復(fù)雜。
多位數(shù)碼管的常用驅(qū)動(dòng)方法有:
1.不需要芯片的驅(qū)動(dòng)方式,掃描顯示
這種方式a~g和DP一共8根線分別占用單片機(jī)8個(gè)端口線,一般是一整個(gè)P口,然后有幾位數(shù)碼管就另外需要幾個(gè)控制線作為片選。對(duì)于MCU的時(shí)間占用幾乎是全時(shí)的,如果沒(méi)有其他的任務(wù)或者其他的任務(wù)耗用時(shí)間很少可以考慮這種顯示方式,比如時(shí)鐘、溫度計(jì)等等。
2.74LS164、74HC595等通用移位寄存器驅(qū)動(dòng)
這是一種帶鎖存的串入并出芯片,需要占用單片機(jī)的2或3根線,如果需要多位驅(qū)動(dòng),一般使用譯碼器進(jìn)行快速線選,或者使用權(quán)移位寄存器級(jí)聯(lián)的方式實(shí)現(xiàn),這種驅(qū)動(dòng)方式采用掃描顯示,對(duì)單片機(jī)端口的耗用比較少,但是因?yàn)槭菕呙璺绞剿詫?duì)單片機(jī)時(shí)間耗用還是全時(shí)的。
3.MAX7219、HD7279、BC7281、ZLG7289、ZLG7290、WH8280、CH451、CH452等專用LED數(shù)碼管驅(qū)動(dòng)芯片驅(qū)動(dòng)
這是驅(qū)動(dòng)LED數(shù)碼管最理想的芯片,從典型應(yīng)用電路上看外圍元件極少,直接驅(qū)動(dòng),最吸引人的是使用了串行接口,只要三根線就可以驅(qū)動(dòng)多達(dá)8位的數(shù)碼管,而且在送完數(shù)據(jù)后就不用管了,自己消零消隱,有些芯片還帶有8*8的鍵盤(pán)接口(鍵盤(pán)輸入的時(shí)候,從串口輸出鍵盤(pán)編碼供單片機(jī)讀?。?,但這種驅(qū)動(dòng)方法往往價(jià)格比較昂貴。
本文重點(diǎn)介紹單片機(jī)直接驅(qū)動(dòng)8位數(shù)碼管時(shí)利用定時(shí)器中斷解決動(dòng)態(tài)掃描工作方式下對(duì)單片機(jī)時(shí)間資源占用的問(wèn)題。單片機(jī)直接驅(qū)動(dòng)8位數(shù)碼管的電路如右圖所示,電路中數(shù)碼管的a~h共8根線分別占用單片機(jī)8個(gè)端口線,連接到P0口,8位數(shù)碼管的公共端(公共陽(yáng)極)連接到單片機(jī)的P2口,作為數(shù)碼管動(dòng)態(tài)掃描時(shí)的片選,該端口通過(guò)上拉電阻與電源相連,以提高驅(qū)動(dòng)能力,電路實(shí)際制作時(shí),若驅(qū)動(dòng)能力不夠,應(yīng)考慮使用三極管驅(qū)動(dòng)電路或驅(qū)動(dòng)芯片。
在程序設(shè)計(jì)中,本人將數(shù)碼管的驅(qū)動(dòng)程序放在定時(shí)器T0的中斷服務(wù)子程序中,定時(shí)器每申請(qǐng)一次中斷,點(diǎn)亮一位數(shù)碼管,在下一次中斷時(shí),再點(diǎn)亮下一位數(shù)碼管,中斷八次后,八位數(shù)碼管依次點(diǎn)亮了一遍,重新回到第一位數(shù)碼管,再依次點(diǎn)亮。
程序如下:
#include“reg51.h”
#define DB P0
#define AB P2
unsigned char w=5,buffer[8]={10,10,10,10,10,10,10,10};
unsigned char h=8,m=30,s=0;
unsigned int time;
unsigned char code dsW[ ]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};
unsigned char code dsB[ ]=
{0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xff,
0xbf};
void T0_int( ) interrupt 1
{TH0=(65536-1843)/256;TL0=(65536-1843)%256;//定時(shí)器T0重置初值DB=0xff;//清屏
AB=~dsW[w];//送數(shù)碼管片選代碼
DB=dsB[buffer[w];//送相應(yīng)數(shù)碼管的段代碼
w++;if(w>7)w=0;//準(zhǔn)備點(diǎn)亮下一位數(shù)碼管
/*********以下為數(shù)字鐘程序********/
time++;
if(time>=250){buffer[2]=buffer[5]=10;}
if(time>=500) {buffer[2]=buffer[5]=11;s++;time=0;}
if(s>59) {s=0;m++;}
if(m>59) {m=0;h++;}
if(h>23) h=0;
buffer[0]=h/10;buffer[1]=h%10;
buffer[3]=m/10;buffer[4]=m%10;
buffer[6]=s/10;buffer[7]=s%10;
/*********以上為數(shù)字鐘程序********/
}
main()
{TH0=(65536-1843)/256;TL0=(65536-1843)%256;
TMOD=0x01;EA=1;ET0=1;TR0=1;
while(1);
}
程序中,由于數(shù)碼管的驅(qū)動(dòng)放在定時(shí)器T0的中斷服務(wù)子程序中,只在響應(yīng)T0中斷服務(wù)子程序時(shí)執(zhí)行并占用MCU時(shí)間,其余MCU時(shí)間空閑,很好地解決了動(dòng)態(tài)掃描時(shí)單片機(jī)被全時(shí)占用的問(wèn)題。為避免數(shù)碼管抖動(dòng),定時(shí)器中斷間隔不宜過(guò)長(zhǎng),本文中定時(shí)器中斷間隔時(shí)間為2ms。
(作者單位 江蘇省溧水中等專業(yè)學(xué)校)
?誗編輯 薛直艷