基于AT89S52單片機的LED點陣顯示時鐘 時鐘的顯示由LED點陣構成。 能正確顯示時間,上電顯示為12點。 完成該系統的硬件和軟件的設計,在Proteus軟件上仿真通過
《單片機原理及應用》課程設計任務書
課題名稱
LED點陣顯示電子鐘設計
設計內容及要求
1、課題內容:設計一種基于AT89S52單片機的LED點陣顯示時鐘,要求如下:
(1)、時鐘的顯示由LED點陣構成。
(2)、時間能夠由按鍵調整,誤差小于1S。
(3)、能正確顯示時間,上電顯示為12點。
2、要求:
完成該系統的硬件和軟件的設計,在Proteus軟件上仿真通過,最后就課程設計本身提交一篇課程設計說明書。
設計工作量
1、匯編或C51語言程序設計;
2、程序調試;
3、在Proteus上進行仿真成功,進行實驗板下載調試;
4、提交一份完整的課程設計說明書,包括設計原理、程序設計、程序分析、仿真分析、調試過程,參考文獻、設計總結等。
進度安排
目錄
1. 系統總體方案選擇與說明
2. 各單元硬件設計說明及計算方法
3. 軟件設計與說明(包括流程圖)
5. 調試結果與必要的調試說明
6. 使用說明
7. 課程設計體會
8. 參考文獻
本方案基于AT89S52單片機設計的,還用到13塊74HC573和1塊74HC138芯片,8快8*8LED點陣,原理比較簡單,但所有硬件成本較高,不適應商業用途。一個是硬件結構的設計,一個是控制的總體思想。在本小節中將對這兩部分內容進行簡單的敘述 1.1硬件結構 根據項目的功能和要求,可采用AT89S52單片機作為核心控制器。LED點陣電子鐘系統組成包括:顯示電路模塊、顯示驅動電路模塊、按鍵電路模塊以及電源模塊。框圖如圖1.1所示。
0.png (9.04 KB, 下載次數: 19)
下載附件
2018-11-5 18:12 上傳
1.2 控制思想 LED點陣電子鐘程序主要功能是屏幕顯示時間穩定,精確。所以按照分塊設計的方法可以把程序分為主程序、顯示程序、調整程序。主程序主要是用來初始化系統和控制各個子程序之間執行的順序。顯示程序用來完成數字在LED點陣上的顯示,時鐘的顯示是使用8塊8×8點陣顯示屏。 2. 各單元硬件設計說明及計算方法 74HC138 74HC138 作用原理于高性能的存貯譯碼或要求傳輸延遲時間短的數據傳輸系統在 高性能存貯器系統中,用這種譯碼器可以提高譯碼系統的效率。將快速賦能電路用于高速存貯器時,譯碼器的延遲時間和存貯器的賦能時間通常小于存貯器的典型存取時間,這就是說由肖特基鉗位的系統譯碼器所引起的有效系統延遲可以忽略不計。HC138 按照三位二進制輸入碼和賦能輸入條件,從8 個輸出端中譯出一個 低電平輸出。兩個低電平有效的賦能輸入端和一個高電平有效的賦能輸入端減少了擴展所需要的外接門或倒相器,擴展成24 線譯碼器不需外接門;擴展成32 線譯碼器,只需要接一個外接倒相器。在解調器應用中,賦能輸入端可用作數據輸入端。 74HC573 八進制 3 態非反轉透明鎖存器 138芯片主要用于控制573芯片的輸入,以達到控制LED點陣顯示的目的。 8*8點陣顯示屏 圖2.2為8×8點陣LED外觀及引腳圖,其等效電路如圖2.3所示,只要其對應的DC、DR軸順向偏壓,即可使LED發亮。例如如果想使圖2.3左上角LED點亮,則DC8=1,DR1=0即可。應用時限流電阻可以放在DC軸或DR軸。8×8點陣LED外觀及引腳如圖2.2。
圖2.2 8×8LED點陣引腳圖 圖2.3為8×8點陣LED等效電路,由此可以看出點陣是用64個LED組成的。 點陣LED掃描法介紹:從圖2.3中可以看出,8×8點陣共需要64個發光二極管組成,且每個發光二極管是放置在行線和列線的交叉點上,當對應的某一列置1電平,某一行置0電平,則相應的二極管就亮。 頻率必須大于128赫茲,周期小于7.8毫秒即可符合視覺暫留要求。此外一次驅動一列或一行(8盞LED)時需外加驅動電路提高電流,否則LED亮度會不足。
圖2.3 8×8點陣LED等效電路
- 軟件設計與說明(包括流程圖)
0.png (7.58 KB, 下載次數: 21)
下載附件
2018-11-5 18:13 上傳
0.png (11.14 KB, 下載次數: 19)
下載附件
2018-11-5 18:12 上傳
5. 調試結果與必要的調試說明 file:///Z:\TEMP\msohtmlclip1\01\clip_image002.jpg 如圖,上電顯示為12::00,時鐘自動跳動。因為LED點陣顯示不夠明顯,所以可以調整延時來控制。 6.使用說明 本電路設3個按鍵,如圖 file:///Z:\TEMP\msohtmlclip1\01\clip_image003.jpg 按下K1鍵,電路進入調整狀態,秒鐘歸零,時鐘位可調,K2為+1,K3為-1. 再按下K1鍵,分鐘位可調,K2為+1,K3為-1. 再按下K1鍵,電路返回顯示狀態。 時鐘位、分鐘位、秒鐘位分別如圖所示 file:///Z:\TEMP\msohtmlclip1\01\clip_image004.jpg 7.課程設計體會 本次實習歷時一個星期,在這個星期里,我們一起努力,一起奮斗,一起討論,一起歡笑。 本次實習我要感謝同學,可以說沒有他的幫助,我的實習任務是完不成的。我的實習題目是做一個LED點陣電子時鐘。這需要我去查閱大量的知識。作為一個學習成績不是很好的我,這個任務對我來說還是有一定的難度。 我首先從網上想查閱一些資料,但是網上沒有跟我想同的課題。所以一切還得自己搞。然后我就去圖書館借了一些書,以及自己的單片機課本,數電都拿到實驗室去了,在實驗室呆了一個星期,終于有了一些方向。程序方面還是弱項,又看了一些編程方面的書,自學了51C語言,當然,只是一些最基礎的,很多東西都要以后繼續努力學。 在這學期的實驗中,不僅培養了獨立思考、動手操作的能力,在各種其它能力上也都有了提高。更重要的是,在實驗課上,我們學會了很多學習的方法。而這是日后最實用的,真的是受益匪淺。要面對社會的挑戰,只有不斷的學習、實踐,再學習、再實踐。這對于我們的將來也有很大的幫助。以后,不管有多苦,我想我們都能變苦為樂,找尋有趣的事情,發現其中珍貴的事情。就像中國提倡的艱苦奮斗一樣,我們都可以在實驗結束之后變的更加成熟,會面對需要面對的事情。 還要感謝,兩位老師的品格和氣質都深深的讓我們敬佩。兩位老師重不遲到,對學生更是富有耐心,劉老師更是在硬件方面給了學生很大的方便,很多設備都是直接找老師借的,這讓我們調試的時候很是方便。 本次實習很成功,我們都有了很大的收獲,感謝老師和同學。
1.png (679.6 KB, 下載次數: 25)
下載附件
2018-11-5 17:21 上傳
2.png (543.71 KB, 下載次數: 23)
下載附件
2018-11-5 17:21 上傳
3.png (55.95 KB, 下載次數: 20)
下載附件
2018-11-5 17:21 上傳
單片機源程序如下: - #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; //六個點陣選擇位 ,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;
- ……………………
- …………限于本文篇幅 余下代碼請從51黑下載附件…………
復制代碼
所有資料51hei提供下載:
|