基于AT89S52單片機(jī)的LED點(diǎn)陣顯示時(shí)鐘 時(shí)鐘的顯示由LED點(diǎn)陣構(gòu)成。 能正確顯示時(shí)間,上電顯示為12點(diǎn)。 完成該系統(tǒng)的硬件和軟件的設(shè)計(jì),在Proteus軟件上仿真通過
《單片機(jī)原理及應(yīng)用》課程設(shè)計(jì)任務(wù)書
課題名稱
LED點(diǎn)陣顯示電子鐘設(shè)計(jì)
設(shè)計(jì)內(nèi)容及要求
1、課題內(nèi)容:設(shè)計(jì)一種基于AT89S52單片機(jī)的LED點(diǎn)陣顯示時(shí)鐘,要求如下:
(1)、時(shí)鐘的顯示由LED點(diǎn)陣構(gòu)成。
(2)、時(shí)間能夠由按鍵調(diào)整,誤差小于1S。
(3)、能正確顯示時(shí)間,上電顯示為12點(diǎn)。
2、要求:
完成該系統(tǒng)的硬件和軟件的設(shè)計(jì),在Proteus軟件上仿真通過,最后就課程設(shè)計(jì)本身提交一篇課程設(shè)計(jì)說明書。
設(shè)計(jì)工作量
1、匯編或C51語言程序設(shè)計(jì);
2、程序調(diào)試;
3、在Proteus上進(jìn)行仿真成功,進(jìn)行實(shí)驗(yàn)板下載調(diào)試;
4、提交一份完整的課程設(shè)計(jì)說明書,包括設(shè)計(jì)原理、程序設(shè)計(jì)、程序分析、仿真分析、調(diào)試過程,參考文獻(xiàn)、設(shè)計(jì)總結(jié)等。
進(jìn)度安排
目錄
1. 系統(tǒng)總體方案選擇與說明
2. 各單元硬件設(shè)計(jì)說明及計(jì)算方法
3. 軟件設(shè)計(jì)與說明(包括流程圖)
5. 調(diào)試結(jié)果與必要的調(diào)試說明
6. 使用說明
7. 課程設(shè)計(jì)體會(huì)
8. 參考文獻(xiàn)
本方案基于AT89S52單片機(jī)設(shè)計(jì)的,還用到13塊74HC573和1塊74HC138芯片,8快8*8LED點(diǎn)陣,原理比較簡(jiǎn)單,但所有硬件成本較高,不適應(yīng)商業(yè)用途。一個(gè)是硬件結(jié)構(gòu)的設(shè)計(jì),一個(gè)是控制的總體思想。在本小節(jié)中將對(duì)這兩部分內(nèi)容進(jìn)行簡(jiǎn)單的敘述 1.1硬件結(jié)構(gòu) 根據(jù)項(xiàng)目的功能和要求,可采用AT89S52單片機(jī)作為核心控制器。LED點(diǎn)陣電子鐘系統(tǒng)組成包括:顯示電路模塊、顯示驅(qū)動(dòng)電路模塊、按鍵電路模塊以及電源模塊。框圖如圖1.1所示。
0.png (9.04 KB, 下載次數(shù): 19)
下載附件
2018-11-5 18:12 上傳
1.2 控制思想 LED點(diǎn)陣電子鐘程序主要功能是屏幕顯示時(shí)間穩(wěn)定,精確。所以按照分塊設(shè)計(jì)的方法可以把程序分為主程序、顯示程序、調(diào)整程序。主程序主要是用來初始化系統(tǒng)和控制各個(gè)子程序之間執(zhí)行的順序。顯示程序用來完成數(shù)字在LED點(diǎn)陣上的顯示,時(shí)鐘的顯示是使用8塊8×8點(diǎn)陣顯示屏。 2. 各單元硬件設(shè)計(jì)說明及計(jì)算方法 74HC138 74HC138 作用原理于高性能的存貯譯碼或要求傳輸延遲時(shí)間短的數(shù)據(jù)傳輸系統(tǒng)在 高性能存貯器系統(tǒng)中,用這種譯碼器可以提高譯碼系統(tǒng)的效率。將快速賦能電路用于高速存貯器時(shí),譯碼器的延遲時(shí)間和存貯器的賦能時(shí)間通常小于存貯器的典型存取時(shí)間,這就是說由肖特基鉗位的系統(tǒng)譯碼器所引起的有效系統(tǒng)延遲可以忽略不計(jì)。HC138 按照三位二進(jìn)制輸入碼和賦能輸入條件,從8 個(gè)輸出端中譯出一個(gè) 低電平輸出。兩個(gè)低電平有效的賦能輸入端和一個(gè)高電平有效的賦能輸入端減少了擴(kuò)展所需要的外接門或倒相器,擴(kuò)展成24 線譯碼器不需外接門;擴(kuò)展成32 線譯碼器,只需要接一個(gè)外接倒相器。在解調(diào)器應(yīng)用中,賦能輸入端可用作數(shù)據(jù)輸入端。 74HC573 八進(jìn)制 3 態(tài)非反轉(zhuǎn)透明鎖存器 138芯片主要用于控制573芯片的輸入,以達(dá)到控制LED點(diǎn)陣顯示的目的。 8*8點(diǎn)陣顯示屏 圖2.2為8×8點(diǎn)陣LED外觀及引腳圖,其等效電路如圖2.3所示,只要其對(duì)應(yīng)的DC、DR軸順向偏壓,即可使LED發(fā)亮。例如如果想使圖2.3左上角LED點(diǎn)亮,則DC8=1,DR1=0即可。應(yīng)用時(shí)限流電阻可以放在DC軸或DR軸。8×8點(diǎn)陣LED外觀及引腳如圖2.2。
圖2.2 8×8LED點(diǎn)陣引腳圖 圖2.3為8×8點(diǎn)陣LED等效電路,由此可以看出點(diǎn)陣是用64個(gè)LED組成的。 點(diǎn)陣LED掃描法介紹:從圖2.3中可以看出,8×8點(diǎn)陣共需要64個(gè)發(fā)光二極管組成,且每個(gè)發(fā)光二極管是放置在行線和列線的交叉點(diǎn)上,當(dāng)對(duì)應(yīng)的某一列置1電平,某一行置0電平,則相應(yīng)的二極管就亮。 頻率必須大于128赫茲,周期小于7.8毫秒即可符合視覺暫留要求。此外一次驅(qū)動(dòng)一列或一行(8盞LED)時(shí)需外加驅(qū)動(dòng)電路提高電流,否則LED亮度會(huì)不足。
圖2.3 8×8點(diǎn)陣LED等效電路
- 軟件設(shè)計(jì)與說明(包括流程圖)
0.png (7.58 KB, 下載次數(shù): 21)
下載附件
2018-11-5 18:13 上傳
0.png (11.14 KB, 下載次數(shù): 19)
下載附件
2018-11-5 18:12 上傳
5. 調(diào)試結(jié)果與必要的調(diào)試說明 file:///Z:\TEMP\msohtmlclip1\01\clip_image002.jpg 如圖,上電顯示為12::00,時(shí)鐘自動(dòng)跳動(dòng)。因?yàn)長ED點(diǎn)陣顯示不夠明顯,所以可以調(diào)整延時(shí)來控制。 6.使用說明 本電路設(shè)3個(gè)按鍵,如圖 file:///Z:\TEMP\msohtmlclip1\01\clip_image003.jpg 按下K1鍵,電路進(jìn)入調(diào)整狀態(tài),秒鐘歸零,時(shí)鐘位可調(diào),K2為+1,K3為-1. 再按下K1鍵,分鐘位可調(diào),K2為+1,K3為-1. 再按下K1鍵,電路返回顯示狀態(tài)。 時(shí)鐘位、分鐘位、秒鐘位分別如圖所示 file:///Z:\TEMP\msohtmlclip1\01\clip_image004.jpg 7.課程設(shè)計(jì)體會(huì) 本次實(shí)習(xí)歷時(shí)一個(gè)星期,在這個(gè)星期里,我們一起努力,一起奮斗,一起討論,一起歡笑。 本次實(shí)習(xí)我要感謝同學(xué),可以說沒有他的幫助,我的實(shí)習(xí)任務(wù)是完不成的。我的實(shí)習(xí)題目是做一個(gè)LED點(diǎn)陣電子時(shí)鐘。這需要我去查閱大量的知識(shí)。作為一個(gè)學(xué)習(xí)成績(jī)不是很好的我,這個(gè)任務(wù)對(duì)我來說還是有一定的難度。 我首先從網(wǎng)上想查閱一些資料,但是網(wǎng)上沒有跟我想同的課題。所以一切還得自己搞。然后我就去圖書館借了一些書,以及自己的單片機(jī)課本,數(shù)電都拿到實(shí)驗(yàn)室去了,在實(shí)驗(yàn)室呆了一個(gè)星期,終于有了一些方向。程序方面還是弱項(xiàng),又看了一些編程方面的書,自學(xué)了51C語言,當(dāng)然,只是一些最基礎(chǔ)的,很多東西都要以后繼續(xù)努力學(xué)。 在這學(xué)期的實(shí)驗(yàn)中,不僅培養(yǎng)了獨(dú)立思考、動(dòng)手操作的能力,在各種其它能力上也都有了提高。更重要的是,在實(shí)驗(yàn)課上,我們學(xué)會(huì)了很多學(xué)習(xí)的方法。而這是日后最實(shí)用的,真的是受益匪淺。要面對(duì)社會(huì)的挑戰(zhàn),只有不斷的學(xué)習(xí)、實(shí)踐,再學(xué)習(xí)、再實(shí)踐。這對(duì)于我們的將來也有很大的幫助。以后,不管有多苦,我想我們都能變苦為樂,找尋有趣的事情,發(fā)現(xiàn)其中珍貴的事情。就像中國提倡的艱苦奮斗一樣,我們都可以在實(shí)驗(yàn)結(jié)束之后變的更加成熟,會(huì)面對(duì)需要面對(duì)的事情。 還要感謝,兩位老師的品格和氣質(zhì)都深深的讓我們敬佩。兩位老師重不遲到,對(duì)學(xué)生更是富有耐心,劉老師更是在硬件方面給了學(xué)生很大的方便,很多設(shè)備都是直接找老師借的,這讓我們調(diào)試的時(shí)候很是方便。 本次實(shí)習(xí)很成功,我們都有了很大的收獲,感謝老師和同學(xué)。
1.png (679.6 KB, 下載次數(shù): 25)
下載附件
2018-11-5 17:21 上傳
2.png (543.71 KB, 下載次數(shù): 23)
下載附件
2018-11-5 17:21 上傳
3.png (55.95 KB, 下載次數(shù): 20)
下載附件
2018-11-5 17:21 上傳
單片機(jī)源程序如下: - #include<reg52.h>
- void display(unsigned char,unsigned char,unsigned char);
- sbit a_138=P1^0; //138
- sbit b_138=P1^1;
- sbit c_138=P1^2;
- sbit key1=P1^3; //key1選擇,key2加,key3減
- sbit key2=P1^4;
- sbit key3=P1^5;
- sbit wei1=P2^0; //六個(gè)點(diǎn)陣選擇位 ,weix=0位選通
- sbit wei2=P2^1;
- sbit wei3=P2^2;
- sbit wei4=P2^3;
- sbit wei5=P2^4;
- sbit wei6=P2^5;
- unsigned char num_138,shi,fen,miao,num_miao,key_flag;
- unsigned char code digittab[10][8]={
- {0x00,0x00,0x3e,0x41,0x41,0x41,0x3e,0x00}, //0
- {0x00,0x00,0x00,0x00,0x21,0x7f,0x01,0x00}, //1
- {0x00,0x00,0x27,0x45,0x45,0x45,0x39,0x00}, //2
- {0x00,0x00,0x22,0x49,0x49,0x49,0x36,0x00}, //3
- {0x00,0x00,0x0c,0x14,0x24,0x7f,0x04,0x00}, //4
- {0x00,0x00,0x72,0x51,0x51,0x51,0x4e,0x00}, //5
- {0x00,0x00,0x3e,0x49,0x49,0x49,0x26,0x00}, //6
- {0x00,0x00,0x40,0x40,0x40,0x4f,0x70,0x00}, //7
- {0x00,0x00,0x36,0x49,0x49,0x49,0x36,0x00}, //8
- {0x00,0x00,0x32,0x49,0x49,0x49,0x3e,0x00} //9
- };
- void delay(unsigned char xms)
- {
- unsigned char i,j;
- for(i=xms;i>0;i--)
- for(j=110;j>0;j--);
- }
- void key_scan()
- {
- if(key1==0)
- {
- delay(3);
- if(key1==0)
- {
- TR0=0;
- key_flag++;
- if(key_flag>=3)
- {
- key_flag=0;
- TR0=1;
- }
- miao=0;
- }
- }
- if(key_flag==1)
- {
- if(key2==0)
- {
- delay(3);
- if(key2==0)
- {
- shi++;
- if(shi>12)
- shi=1;
- }
- }
- else if(key3==0)
- {
- delay(3);
- if(key3==0)
- {
- shi--;
- if(shi<1)
- shi=12;
- }
- }
- }
- if(key_flag==2)
- {
- if(key2==0)
- {
- delay(3);
- if(key2==0)
- {
- fen++;
- if(fen>=60)
- {
- fen=0;
- shi++;
- if(shi>12)
- shi=1;
- }
- }
- }
- else if(key3==0)
- {
- delay(3);
- if(key3==0)
- {
- fen--;
- if(fen==0xff)
- {
- fen=59;
- shi--;
- if(shi==0)
- shi=12;
- }
- }
- }
- }
-
- }
- void main()
- {
-
- P0=0x00;
- TMOD=0x01;
- TH0=(65536-50000)/256; //50ms
- TL0=(65536-50000)%256;
- IT0=1;
- IE=0x83;
- TR0=1;
- shi=12;
- fen=0;
- miao=0;
- while(1)
- {
- display(shi,fen,miao);
- }
- }
- void display(unsigned char adate,unsigned char bdate,unsigned char cdate)
- {
- unsigned char ashi,bshi,cshi,age,bge,cge;
- ashi=adate/10;
- age=adate%10;
- bshi=bdate/10;
- bge=bdate%10;
- cshi=cdate/10;
- cge=cdate%10;
- wei1=0;
- for(num_138=0;num_138<8;num_138++)
- {
- switch(num_138)
- {
- case 0:a_138=0;b_138=0;c_138=0;break;
- case 1:a_138=1;b_138=0;c_138=0;break;
- case 2:a_138=0;b_138=1;c_138=0;break;
- case 3:a_138=1;b_138=1;c_138=0;break;
- case 4:a_138=0;b_138=0;c_138=1;break;
- case 5:a_138=1;b_138=0;c_138=1;break;
- case 6:a_138=0;b_138=1;c_138=1;break;
- case 7:a_138=1;b_138=1;c_138=1;break;
- }
- P0=~digittab[ashi][num_138];
- delay(5);
- }
- wei1=1;
- wei2=0;
- for(num_138=0;num_138<8;num_138++)
- {
- switch(num_138)
- {
- case 0:a_138=0;b_138=0;c_138=0;break;
- case 1:a_138=1;b_138=0;c_138=0;break;
- case 2:a_138=0;b_138=1;c_138=0;break;
- case 3:a_138=1;b_138=1;c_138=0;break;
- case 4:a_138=0;b_138=0;c_138=1;break;
- case 5:a_138=1;b_138=0;c_138=1;break;
- case 6:a_138=0;b_138=1;c_138=1;break;
- case 7:a_138=1;b_138=1;c_138=1;break;
- }
- P0=~digittab[age][num_138];
- delay(5);
- }
- wei2=1;
- wei3=0;
- for(num_138=0;num_138<8;num_138++)
- {
- switch(num_138)
- {
- case 0:a_138=0;b_138=0;c_138=0;break;
- case 1:a_138=1;b_138=0;c_138=0;break;
- case 2:a_138=0;b_138=1;c_138=0;break;
- case 3:a_138=1;b_138=1;c_138=0;break;
- case 4:a_138=0;b_138=0;c_138=1;break;
- case 5:a_138=1;b_138=0;c_138=1;break;
- case 6:a_138=0;b_138=1;c_138=1;break;
- case 7:a_138=1;b_138=1;c_138=1;break;
- }
- P0=~digittab[bshi][num_138];
- delay(5);
- }
- wei3=1;
- wei4=0;
- for(num_138=0;num_138<8;num_138++)
- {
- switch(num_138)
- {
- case 0:a_138=0;b_138=0;c_138=0;break;
- case 1:a_138=1;b_138=0;c_138=0;break;
- case 2:a_138=0;b_138=1;c_138=0;break;
- case 3:a_138=1;b_138=1;c_138=0;break;
- case 4:a_138=0;b_138=0;c_138=1;break;
- case 5:a_138=1;b_138=0;c_138=1;break;
- case 6:a_138=0;b_138=1;c_138=1;break;
- case 7:a_138=1;b_138=1;c_138=1;break;
- }
- P0=~digittab[bge][num_138];
- delay(5);
- }
- wei4=1;
- wei5=0;
- for(num_138=0;num_138<8;num_138++)
- {
- switch(num_138)
- {
- case 0:a_138=0;b_138=0;c_138=0;break;
- case 1:a_138=1;b_138=0;c_138=0;break;
- case 2:a_138=0;b_138=1;c_138=0;break;
- case 3:a_138=1;b_138=1;c_138=0;break;
- case 4:a_138=0;b_138=0;c_138=1;break;
- case 5:a_138=1;b_138=0;c_138=1;break;
- case 6:a_138=0;b_138=1;c_138=1;break;
- case 7:a_138=1;b_138=1;c_138=1;break;
- }
- P0=~digittab[cshi][num_138];
- delay(5);
- }
- wei5=1;
- wei6=0;
- for(num_138=0;num_138<8;num_138++)
- {
- switch(num_138)
- {
- case 0:a_138=0;b_138=0;c_138=0;break;
- case 1:a_138=1;b_138=0;c_138=0;break;
- case 2:a_138=0;b_138=1;c_138=0;break;
- case 3:a_138=1;b_138=1;c_138=0;break;
- case 4:a_138=0;b_138=0;c_138=1;break;
- case 5:a_138=1;b_138=0;c_138=1;break;
- case 6:a_138=0;b_138=1;c_138=1;break;
- case 7:a_138=1;b_138=1;c_138=1;break;
- }
- P0=~digittab[cge][num_138];
- delay(5);
- }
- wei6=1;
- ……………………
- …………限于本文篇幅 余下代碼請(qǐng)從51黑下載附件…………
復(fù)制代碼
所有資料51hei提供下載:
|