設計內容:
設計一個簡易時鐘,設計內容包括:
(1) 使用8051單片機片內定時器設計一個簡易時鐘。
(2) 使用8位LED對測量結果進行顯示
1)確定系統設計方案;
2)進行系統的硬體設計;
3)完成必要的參數計算與元器件選擇;
4)完成應用程式設計;
5)進行軟硬體調試;
(3) 能通過鍵盤對對時鐘
設計內容與設計要求進行實時調整。
(4) 具有鬧鐘功能●
註:帶●者為選做
設計要求:主 要 設 計 條 件
1、教材
2、單片機開發板、PROTEUS軟體
3、參考書:
1)單片機原理及運用 電子工業出版社
2)單片機應用技術新教程 電子工業出版社
目 錄
設計內容:1
設計要求:1
一、系統總體方案選擇與說明1
1.系統總體方案選擇1
2. 說明1
二、系統結構框圖與工作原理3
1. 系統結構框圖3
2.工作原理4
三、各單元硬體設計說明及計算方法5
1.定時器\計數器5
2 .中斷系統:6
3 .鍵盤6
4 .LED數碼管顯示器:7
5 .LED數碼顯示器有兩種連接方法7
圖(1)LED引腳排列8
四、軟體設計與說明(包括流程圖)8
1.主程序8
2.數碼管顯示模塊9
3.定時器/計數器T0中斷服務程序10
4.按鍵處理模塊11
五 、程序清單13
1.中斷子程序13
2.延時程序13
3.主程序和定時器中斷子程序13
4.LED顯示子程序14
5.按鍵控制子程序15
6.數字電子時鐘系統PROTUES仿真19
六、參考文獻20
致 謝21
該課程設計是利用MCS-51單片機內部的定時/計數器、中斷系統、以及行列鍵盤和LED顯示器等部件,設計的一個單片機電子時鐘。設計的電子時鐘通過數碼管顯示,並能通過按鍵實現設置時間和暫停、啟動控制等,用定時/計數器T0,工作於定時,採用方式1,對12MHZ的系統時鐘進行定時計數,初值設為50000。形成定時時間為50ms。計時周期為24小時,顯示滿刻度為23時59分59秒,另外還有校時功能。因此,一個基本的數字鐘電路主要由顯示器「時」,「分」,「秒」和單片機,還有校時電路組成。8個數碼管的段選接到單片機的P0口,位選接到單片機的P2口。數碼管按照數碼管動態顯示的工作原理工作,將標準秒信號送入「秒單元」,「秒單元」採用60進位計數器,每累計60秒發出一個「分脈衝」信號,該信號將作為「分單元」的時鐘脈衝。「分單元」也採用60進位計數器,每累計60分鐘,發出一個「時脈衝」信號,該信號將被送到「時單元」。「時單元」採用24進位計時器,可實現對一天24小時的累計。顯示電路將「時」、「分」、「秒」通過七段顯示器顯示出來。校時電路時用來對「時」、「分」、「秒」顯示數字進行校對調整,校時電路時用來對「時」、「分」、「秒」顯示數字進行校對調整,按一下second,秒單元就加1 ,按一下minute,分就加1,按一下hour,時就加1。
2. 說明2.1、系統由AT89C51、LED 數碼管、按鍵、電容、電阻等部分構成,能實現時間的調整、輸出、調時間等功能。系統中按鈕BUTTON能對時間進行調整功能的按鈕,採用單鍵控制調時功能,運用軟體去抖判斷按鍵的時間從而選擇完成相對應的功能
2.2 、時鐘顯示:在此部分的設計中,在顯示時,首先將時間十進位數據轉化為顯示段碼,然後送往數碼管顯示。顯示段碼採用動態掃描的方式。
2.3 、時間調整:該設計需要校對時間,所以用三個按鍵來實現。按hour來調節小時的時間,按 minute來調節分針的時間,按 sceond來調節秒的時間。按鍵處理是先檢測秒按鍵是否按下,秒按鍵如果按下,秒就加1;如果沒有按下,就檢測分按鍵是否按下,分按鍵如果按下,分就加1;如果沒有按下,就檢測時按鍵是否按下,時按鍵如果按下,時就加1;如果沒有按下,就把時間顯示出來。
2.4、中斷:中斷技術在單片系統中有著十分重要的作用,它不僅可以提高單片機CPU的效率,也可以對突發事件處理。所謂中斷就是當CPU正在執行程序A時,發生了另一個急需處理的事件B,這是CPU暫停當前執行的程序A,立即轉去執行處理事件B的程序,處理完事件B後,再返回到程序A繼續執行,這個過程被叫做中斷。關於中斷的概念有下列幾個名詞:(1)程序A稱為主程序,(2)處理事件B的程序稱為中斷服務程序,(3)主程序中轉向中斷服務程序的地方稱為斷點,(4)引起中斷的原因即事件B稱為中斷源,(5)轉去執行中斷服務程序稱為中斷響應。關於中斷的概念可以打個如下的比喻。領導(CPU)在自己的房間辦公(執行主程序),下屬(外設)有問題打電話來請示(中斷源),領導停下正在進行的工作,通過電話給下屬做指示(執行中斷服務程序),指示完後,領導掛斷電話,繼續做自己的工作(返回主程序繼續執行)。
二、系統結構框圖與工作原理 1. 系統結構框圖
數字電子時鐘的原理圖
2.工作原理
軟時鐘是利用單片機內部的定時器\計數器來實現的,它的處理過程如下:首先設定單片機內部的一個定時器\計數器工作於定時方式,對機器周期計數形成基準時間,然後用另一個定時器\計數器或軟體計數的方法對基準時間計數形成秒,秒計60次形成分,分計60次形成小時,小時計24次則計滿一天。然後通過數碼管把它們的內容在相應位置顯示出來即可。
數碼管顯示可以採用靜態顯示方法或動態顯示方法。靜態顯示方法需要數據鎖存器等硬體,接口複雜,時鐘顯示用8個數碼管。由於系統沒有其他的複雜的任務處理,而且顯示的時鐘信息隨時都可能變化,一般採用動態顯示方式。動態顯示方法線路相對簡單,但需動態掃描,掃描頻率要大於人眼視覺暫留頻率,信息看起來才穩定。解碼方式可分為軟體解碼和硬體解碼,軟體解碼通過解碼程序查得顯示信息的欄位碼;硬體解碼通過硬體解碼器得到顯示信息的欄位碼,實際中通常採用軟體解碼。
在具體處理時,定時器計數器採用中斷方式工作,對時鐘的形成在中斷服務程序中實現。在主程序中只需對定時器計數器初始化、調用顯示子程序和控制子程序。另外,為了使用方便,設計了簡單的按鍵,可以通過按鍵實現時、分的調整,這樣在主程序中就加入了鍵盤設置子程序。
單片機應用系統由硬體系統和軟體系統兩部分組成。硬體系統是指單片機以及擴展的存儲器、I\O接口、外圍擴展的功能晶片以及接口電路。軟體系統包括監控程序和各種應用程式。
在單片機應用系統中,單片機是整個系統的核心,對整個系統的信息輸入、處理、信息輸出進行控制。與單片機配套的有相應的復位電路、時鐘電路以及擴展的存儲器和I\O接口,使單片機應用系統能夠運行。
在一個單片機應用系統中,往往都會輸入信息和顯示信息,這就涉及鍵盤和顯示器。在單片機應用系統中,一般都根據系統的要求配置相應的鍵盤和顯示器。配置鍵盤和顯示器一般都沒有統一的規定,有的系統功能複雜,需輸入的信息和顯示的信息量大,配置的鍵盤和顯示器功能相對強大,而有些系統輸入/輸出的信息少,這時可能用幾個按鍵和幾個LED指示燈就可以進行處理了。在單片機應用系統在中配置的鍵盤可以是獨立鍵盤,也可能是矩陣鍵盤。顯示器可以是LED指示燈,也可以是LED數碼管,也可以是LCD顯示器,還可以使用CRT顯示器。單片機應用系統中鍵盤一般用的比較多的是矩陣鍵盤,顯示器用的比較多的是LED數碼管還LCD顯示器。
三、各單元硬體設計說明及計算方法1.定時器\計數器
1、MCS-51系列中51子系列有兩個16位的可編程定時\計數器可:定時\計數器T0和定時\計數器T1。它由加法計數器、方式寄存器TMOD、控制寄存器TCON等組成。方式寄存器用於設定定時計數器T0和T1的工作方式,控制寄存器用於對定時計數器啟動、停止進行控制。
2、每個定時計數器既可以對系統時鐘計數實現定時,也可以外部信號計數實現計數功能通過編程設定來實現。
3、每個定時計數器都有多種工作方式,其中T0有四種工作方式,T1有三種工作方式,T2有三種工作方式。通過編程可設定工作於某種方式。四種工作方式為:13位定時\計數器、16位定時\計數器、8位自動重置定時\計數器、兩個8位定時\計數器(只有T0有)
4、每一個定時計數器定時計數時間到時產生溢出,使相應的溢出位置位,溢出可通過查詢或中斷方式處理。
2 .中斷系統:
1、MCS-51單片機提供5個硬體中斷源,2個外部中斷源,2個定時計數器T0和T1的溢出中斷TF0和TF1,1個串行口發送TI和接收RI中斷。
2、MCS-51單片機中沒有專門的開中斷和關中斷指令,對各個中斷源的允許和屏蔽是由內部的中斷允許寄存器IE的各位來控制的。中斷允許寄存器IE的字節地址為A8H,可以進行位尋址。系統復位時,中斷允許寄存器IE的內容為00H,如果要開放某個中斷源,則必須使IE中的總控置位和對應的中斷允許位置「1」。
3、MCS-51單片機有5個中斷源,為了處理方便,每個中斷源有兩級控制,高優先級和低優先級。通過由內部的中斷優先級寄存器IP來設置,中斷優先級寄存器IP的字節地址為B8H,可以進行位尋址。如果某位被置「1」,則對應的中斷源被設為高優先級;如果某位被清零,則對應的中斷源被設為低優先級。對於同級中斷源,系統有默認的優先權順序,從高到低優先權順序為外部中斷0、定時計數器T0中斷、外部中斷1、定時計數器T1中斷、串行口中斷。通過設置中斷優先級寄存器IP能夠改變系統默認的優先級順序。
4、MCS-51單片機響應中斷的條件為:中斷源有請求且中斷允許。
3 .鍵盤鍵盤是單片機應用系統中最常用的輸入設備,在單片機應用系統中,操作人員一般都是通過鍵盤向單片機系統輸入指令、地址和數據,實現簡單的人機通信。鍵盤實際上是一組按鍵開關的集合,平時按鍵開關總是處於斷開狀態,當按下鍵時它才閉合。鍵盤的結構形式一般有兩種:獨立式鍵盤和矩陣式鍵盤。矩陣式鍵盤的工作方式有3種:查詢工作方式、定時掃描工作方式和中斷工作方式。
4 .LED數碼管顯示器:
LED數碼管顯示器在單片機應用系統中,經常用到LED數碼管作為顯示輸出設備,LED數碼管顯示器雖然顯示信息簡單,但它具有顯示清晰、亮度高、使用電壓低、壽命長、與單片機接口方便等特點,基本上能夠滿足單片機應用系統的需要,所以在單片機應用系統中經常用到。LED數碼管顯示器是由發光二極體按一定的結構組合起來的顯示器件。在單片機應用系統中通常使用的是8段式LED數碼管顯示器,它有共陰極和共陽極兩種。所謂解碼方式是指由顯示字符轉換得到對應的欄位碼的方式。對於LED數碼管顯示器,通常的解碼方式有兩種:硬體解碼方式和軟體解碼方式。LED數碼管在顯示時,通常有兩種顯示方式:靜態顯示方式和動態顯示方式。在使用時可以把它們組合起來。在實際應用時,如果數碼管個數較少,通常用硬體解碼靜態顯示,在數碼管個數較多時,則通常用軟體解碼動態顯示。
5 .LED數碼顯示器有兩種連接方法
(1)共陽極接法把發光二極體的陽極連在一起構成公共陽極,使用時公共陽極接+5V,每個發光二極體的陰極通過電阻與輸入端相連。當陰極端輸入低電平時,段發光二極體就導通點亮,而輸入高電平時則不點亮。
(2)共陰極接法。把發光二極體的陰極連在一起構成公共陰極,使用時公共陰極接地。每個發光二極體的陽極通過電阻與輸入端相連。當陽極端輸入高電平時,段發光二極體就導通點亮,而輸入低電平時則不點亮。
在本設計中所採用的是共陰極LED數碼顯示器,其引腳排列如下圖(1)所示:
圖(1)LED引腳排列 四、軟體設計與說明(包括流程圖)
電子時鐘的軟體系統由主程序和子程序組成,主程序程序包含初始化參數設置、按鍵處理、數碼管顯示模塊等,
1.主程序主程序執行流程如下圖(2),主程序先對顯示單元和定時器/計數器初始化,然後重複調用數碼管顯示模塊和按鍵處理模塊,當有鍵按下,則轉入相應的功能程序。
圖(2)主程序執行流程
2.數碼管顯示模塊本系統共用8個數碼管,從右到左依次顯示秒個位、秒十位、橫線、分個位、分十位、橫線、時個位和時十位。採用軟體解碼動態顯示。
流程圖如下圖(3)所示:
圖(3) 數碼管顯示程序流程圖
3.定時器/計數器T0中斷服務程序定時器/計數器T0用於時間計時。選擇方式1,重複定時,定時時間設為50ms,定時時間到則中斷,在中斷服務程序中用一個計數器對50ms計數,計20次則對秒單元加1,秒單元加到60則對分單元加1,同時秒單元清0;分單元加到60則對時單元加1,同時分單元清0;時單元加到24則對時單元清0,標誌一天時間計滿。在對各單元計數的同時,把它們的值放到存儲單元的指定位置。定時器/計數器T0中斷服務程序流程圖如下圖(4):
圖(4)定時器/計數器T0中斷服務程序流程圖
4.按鍵處理模塊按鍵處理設置為:如沒有按鍵,則時鐘正常走時。當按下K0按鍵時,進入調分狀態,時鐘停止走動;按K1可K2按鍵可進行加1或減1操作;繼續按K0鍵可分別進行分和小時的調整;最後按K0鍵將退出調整狀態,時鐘開始計時運行
圖(5)按鍵控制程序流程圖
五 、程序清單
採用8位LED軟體解碼動態顯示程序
使用AT89C51單片機,12MHZ晶振,P0輸出欄位碼,P2口輸出位選碼,用共陽
LED數碼管,P1.0為調時位選擇按鍵,P1.1為加1鍵,P1.2為減1鍵。
1.中斷子程序
timer0 (void) interrupt 1 using 1
{
u++;
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
}
2.延時程序void delay()
{
unsigned int time,p;
for(time=30;time>0;time--)
for(p=0;p<10;p++);
}
3.主程序和定時器中斷子程序#include<reg51.h>
char mod[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
char sceond,minute,hour,i,k,l,j,x,y;
int u;
sbit P1_0=P1^0;
sbit P1_1=P1^1;
sbit P1_2=P1^2;
void main()
{
TMOD=0x01;
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
EA=1;
ET0=1;
TR0=1;
do
{
kongzhi();
xianshi();
}
while(1);
}
4.LED顯示子程序void xianshi()
{
if(u==20)
{
u=0;
sceond++;
while(sceond==60)
{
sceond=0;
minute++;
if(minute==60)
{
minute=0;
hour++ ;
if(hour==24)
{
hour=0;
}
}
}
}
x=hour%10;
y=hour/10;
l=minute%10;
j=minute/10;
i=sceond%10;
k=sceond/10;
P2=0x7f;
P0=mod[i];
delay();
P2=0xbf;
P0=mod[k];
delay();
P2=0xdf;
P0=0x40;
delay();
P2=0xef;
P0=mod[l];
delay();
P2=0xf7;
P0=mod[j];
delay();
P2=0xfb;
P0=0x40;
delay();
P2=0xfd;
P0=mod[x];
delay();
P2=0xfe;
P0=mod[y];
delay();
}
5.按鍵控制子程序void kongzhi()
{
if(P1_0==0)
{
TR0=0;
while(P1_0==0);
while(1)
{
if(P1_1==0)
{
sceond++;
if(sceond==60)
{
sceond=0;
}
}
while(P1_1==0);
if(P1_2==0)
{
sceond--;
if(sceond<0)
{
sceond=0;
}
}
while(P1_2==0);
i=sceond%10;
k=sceond/10;
P2=0x7f;
P0=mod[i];
delay();
P2=0xbf;
P0=mod[k];
delay();
if(P1_0==0)
{
while(P1_0==0);
while(1)
{
if(P1_1==0)
{
minute++;
while(minute==60)
{
minute=0;
}
}
while(P1_1==0);
if(P1_2==0)
{
minute--;
if(minute<0)
{
minute=0;
}
}
while(P1_2==0);
l=minute%10;
j=minute/10;
P2=0xef;
P0=mod[l];
delay();
P2=0xf7;
P0=mod[j];
delay();
if( P1_0==0)
{
hile(P1_0==0);
while(1)
{
if(P1_1==0)
{
hour++;
while(hour==24)
{
hour=0;
}
}
while(P1_1==0);
if(P1_2==0)
{
hour--;
if(hour<0)
{
hour=0;
}
}
while(P1_2==0);
x=hour%10;
y=hour/10;
P2=0xfd;
P0=mod[x];
delay();
P2=0xfe;
P0=mod[y];
delay();
if(P1_0==0)
{
while(P1_0==0);
TR0=1;
return;
}
}
}
}
}
}
}
}
6.數字電子時鍾系統PROTUES仿真
用PROTUES軟體,根據數字電子鐘的原理圖,仿真程序得如圖(6)所示:
圖(6)數字電子時鐘的PROTES仿真
六、參考文獻
1、《單片機C語言輕鬆入門》周堅編 北京航空航天大學出版社。
2、單片機人機接口實例 公茂法編著, 北京航空航天大學出版社。
3、李廣,弟朱月,秀王秀山.《單片機基礎》[M].北京航空航天出版社。
4、謝維成楊加國《單片機原理與應用及C51程序設計》[M].清華大學出版社。
5 、《單片微型計算機原理及接口技術》陳光東 等編 華中科技大學出版社
6、《單片機實用系統設計技術》房小翠 編 國防工業出版社
致 謝
首先感謝我們的指導老師王紅梅老師和黃進財老師。在我學習單片機課程期間,王老師給了我無微不至的關心。她認真工作的態度一直感染著我,這必將激勵我在今後的工作和生活中不斷前進。以及黃老師嚴謹細緻、一絲不苟的作風一直是我工作、學習中的榜樣,他循循善誘的教導和不拘一格的思路給予我無盡的啟迪。
其次我要感謝一直陪同我完成單片機課程考試論文的同學,謝謝他們平時對我幫助和關心。我很高興能生活在一個互助友愛和充滿活力的集體中,從他們的身上我學到了很多,同時他們給我的大學生活留下了許多美好的回憶。
再次,我要特別感謝我的父母。在我求學的過程中他們付出的不僅僅是辛勤的勞動和汗水,而是世界上最崇高、最偉大的愛。他們所做的一切是我這一生都無法回報的。
最後,真誠感謝給予我熱情幫助和關注的所有人。