日韩黑丝制服一区视频播放|日韩欧美人妻丝袜视频在线观看|九九影院一级蜜桃|亚洲中文在线导航|青草草视频在线观看|婷婷五月色伊人网站|日本一区二区在线|国产AV一二三四区毛片|正在播放久草视频|亚洲色图精品一区

分享

用51單片機STC89C52編程實現(xiàn)智能電飯煲中的數(shù)碼管時間顯示功能

 岐岐feng 2018-06-10

這一篇我們來學(xué)習(xí)帶時鐘顯示功能的四位數(shù)碼管開發(fā)應(yīng)用,也就是通過四位數(shù)碼管分別顯示秒鐘,分鐘,或者小時,那么這個功能在單片機項目開發(fā)當(dāng)中應(yīng)用非常廣泛的,比如,跑步機,桑拿設(shè)備,電飯煲,電磁爐,電子鐘,微波爐,工廠產(chǎn)量看板,電力控制設(shè)備,還有汽車的車載時鐘等等很多電子設(shè)備,其實這些設(shè)備有很多都是使用單片機內(nèi)部的定時器來實現(xiàn)的,另外有一些使用是時鐘芯片來實現(xiàn),那么這些程序是如何編寫的?

用51單片機STC89C52編程實現(xiàn)智能電飯煲中的數(shù)碼管時間顯示功能

比如這一款電飯煲就是用四位數(shù)碼管來設(shè)計的

用51單片機STC89C52編程實現(xiàn)智能電飯煲中的數(shù)碼管時間顯示功能

而這一款就是用液晶顯示屏來做顯示的

不管用是用液晶顯示屏還是數(shù)碼管來設(shè)計的他們都是用來做時鐘顯示時間。

用51單片機STC89C52編程實現(xiàn)智能電飯煲中的數(shù)碼管時間顯示功能

那么我們現(xiàn)在開始來進(jìn)入講解程序代碼之前,我們先來了解一個非常重要的引腳,也就是數(shù)碼管的LP段選引腳,指的就是數(shù)碼管中間的這兩個小點,也就是冒號。如果我們想讓數(shù)碼管的這兩個小點點亮顯示的話,也就是數(shù)碼管的LP段選點亮顯示,那么就必須在DIG2位引腳鏈接電源VCC,也就是高電平,然后在LP段選引腳連接電源GND,這樣電路導(dǎo)通以后有電流流過LP段選內(nèi)部的發(fā)光二級管,所以LP段也就是這個冒號才能夠點亮顯示。了解了數(shù)碼管的LP段選引腳的功能以后,我們接著再來看它是如何跟單片機連接的。

用51單片機STC89C52編程實現(xiàn)智能電飯煲中的數(shù)碼管時間顯示功能

圖中LP這個段選引腳連接的網(wǎng)絡(luò)編號是ELP,他是跟單片機的P2.6 IO口連接在一起的,那么我們想讓數(shù)碼管的LP段點亮顯示的話,只要編寫程序給ELP,也就是P2.6 IO口一個低電平0就可以,若給高電平1的話,LP段就會熄滅,再就是想讓這個LP段不斷的顯示亮滅亮滅的一個循環(huán)過程的話,就要使用到定時器和中斷函數(shù)去控制才能實現(xiàn)。

接著我們來看本篇的工程代碼

用51單片機STC89C52編程實現(xiàn)智能電飯煲中的數(shù)碼管時間顯示功能


#include

#define uint unsigned int

#define uchar unsigned char

uchar num,num2,shi,ge,bai,qian,miao,fen;

sbit wei=P2^4; //聲明位鎖存器LE鎖存端引腳

sbit duan=P2^3; //聲明段鎖存器LE鎖存端引腳

sbit ELP=P2^6; //數(shù)碼管的ELP段發(fā)光二極管

void delayms(uint ms) //延時函數(shù)

{

uint i,j;

for(i=ms;i>0;i--);

for(j=110;j>0;j--);

}

uchar code digtal[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90}; //數(shù)碼管0-9數(shù)字

void Timer() //定時器0和定時器1初始化操作

{

TMOD=0x11; //0001 0001

TH0=(65536-50000)/256; //裝初值

TL0=(65536-50000)%256;

TH1=(65536-50000)/256;

TL1=(65536-50000)%256;

EA=1; //打開總中斷

ET0=1;

ET1=1;

TR0=1;

TR1=1;

}

void display(uchar qian,uchar bai,uchar shi,uchar ge)

{

wei=1; //將位鎖存器的LE鎖存端開關(guān)打開

P0=0x80; //把位選電平信號0000 0100傳送到位鎖存器輸出端

wei=0; //把位選電平信號輸送完成以后,將LE鎖存端開關(guān)斷開

duan=1; //將段鎖存器的LE鎖存端開關(guān)打開

P0=digtal[qian]; //轉(zhuǎn)送段選電平信號,shi變量數(shù)值的變化會跟中斷函數(shù)的中斷次數(shù)有關(guān)

duan=0; //把段選電平信號輸送完成以后,將段鎖存器的LE鎖存端開關(guān)斷開

delayms(400); //延時

wei=1;

P0=0x40;

wei=0;

duan=1;

P0=digtal[bai];

duan=0;

delayms(400);

wei=1;

P0=0x20;

wei=0;

duan=1;

P0=digtal[shi];

duan=0;

delayms(400);

wei=1;

P0=0x10;

wei=0;

duan=1;

P0=digtal[ge];

duan=0;

delayms(400);

}

void main()

{

Timer(); //初始化定時器0和定時器1操作

while(1) //不斷的對數(shù)碼管動態(tài)掃描檢測數(shù)字是否有變化

{

display(qian,bai,shi,ge); //數(shù)碼管顯示

}

}

void T0_Timer() interrupt 1

{

TH0=(65536-50000)/256; //重新初值

TL0=(65536-50000)%256;

num++;

if(num==20) //中斷20次,說明到了1秒鐘時間

{

miao++;

num=0; //把num變量重新清0,重新再計20次

if(miao==60)

{

fen++; //如果秒鐘到了60,fen變量加1

miao=0;

if(fen==60)

fen=0; //如果fen變量到了60,fen變量清0

}

qian=fen/10; //將分鐘的第十位數(shù)數(shù)值分離出來

bai=fen%10; //將分鐘的個位數(shù)數(shù)值分離出來

shi=miao/10; //將秒鐘的第十位數(shù)數(shù)值分離出來

ge=miao%10; //將秒鐘的個位數(shù)數(shù)值分離出來

}

}

void T1_Timer() interrupt 3

{

TH1=(65536-50000)/256; //重新初值

TL1=(65536-50000)%256;

num2++;

if(num2==10) //如果這個num2值加到10次,說明500ms到了

{

num2=0; //num2數(shù)值清0

ELP=~ELP; //讓發(fā)光二極管取反,現(xiàn)實亮再到滅,再亮,再滅不斷循環(huán)這個過程

}

}


用51單片機STC89C52編程實現(xiàn)智能電飯煲中的數(shù)碼管時間顯示功能

另外還有一點要特別說明的是,實驗使用到的數(shù)碼管LP段選引腳,剛才已經(jīng)講過了,LP段選引腳就是跟網(wǎng)絡(luò)編號ELP連接在一起的,而ELP對應(yīng)的就是單片機的P2.6 IO口,所以在使用這個引腳之前,需要對著這個引腳進(jìn)行聲明。

用51單片機STC89C52編程實現(xiàn)智能電飯煲中的數(shù)碼管時間顯示功能

這次的實驗中用到了兩個定時器,也就是定時器0和定時器1,所以我們寫了兩個中斷函數(shù),先來看這一段代碼,就是定時器0中斷函數(shù),作用就是讓四位數(shù)碼管顯示時間的,顯示分鐘和秒鐘。

用51單片機STC89C52編程實現(xiàn)智能電飯煲中的數(shù)碼管時間顯示功能

這一段代碼就是定時器1中斷函數(shù),作用就是讓秒鐘和分鐘中間的冒號點亮或者熄滅一個循環(huán)過程。

首先我們是給定時器0定時50ms產(chǎn)生一次中斷,當(dāng)每中斷一次NUM2變量就會加1,若中斷函數(shù)中斷了10次,說明500ms時間已經(jīng)到了,這是IF語句判斷num2變量的數(shù)值已經(jīng)等于10,因為條件判斷成立,接著就會進(jìn)入括號里面執(zhí)行語句,首先執(zhí)行這條語句,給NUM2變量的數(shù)值重新清0,然后給ELP這個IO口引腳的電平不斷的進(jìn)行取反操作。


好,現(xiàn)在我們就把上面編寫好的程序下載到單片機里面,觀察四位數(shù)碼管是否能正常顯示時間。

用51單片機STC89C52編程實現(xiàn)智能電飯煲中的數(shù)碼管時間顯示功能

用51單片機STC89C52編程實現(xiàn)智能電飯煲中的數(shù)碼管時間顯示功能

當(dāng)下載完成以后,四位數(shù)碼管顯示沒有問題,并且能正常的加1計數(shù)顯示,那么這就是通過定時器功能來實現(xiàn)數(shù)碼管時間顯示的開發(fā)應(yīng)用,好了,今天就交流到這里吧,我們下次再見!

    本站是提供個人知識管理的網(wǎng)絡(luò)存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊一鍵舉報。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多