標(biāo)題: 基于51單片機(jī)的電子時鐘設(shè)計 [打印本頁]
作者: 比利王 時間: 2017-4-10 21:52
標(biāo)題: 基于51單片機(jī)的電子時鐘設(shè)計
《單片機(jī)原理及應(yīng)用》
課程設(shè)計報告
專 業(yè):
班 級:
姓 名:
指導(dǎo)教師:
二0一* 年 ** 月 ** 日
課程設(shè)計任務(wù)書
一、設(shè)計題目
LED數(shù)字顯示電子時鐘
二、設(shè)計要求
1、方案論證,確定總體電路原理圖。
2、元器件選擇,設(shè)計PCB圖(或用萬能電路實驗板搭線)。
3、繪制程序流程圖,編寫C語言源程序。
4、安裝調(diào)試,實現(xiàn)數(shù)字時鐘的基本功能,即能正確顯示時、分、秒;可調(diào)整時間;秒閃功能。
三、設(shè)計報告內(nèi)容
1、寫出設(shè)計方案(包括方案對比,方案確定),給出完整的電路原理圖和設(shè)計程序流程圖。
2、對所設(shè)計方案的實現(xiàn)進(jìn)行全面分析。
3、編程調(diào)試方法和程序清單。
4、安裝調(diào)試過程,出現(xiàn)的各種現(xiàn)象,總結(jié)經(jīng)驗和體會。
*5、進(jìn)一步完善的設(shè)想。
目 錄
一.課程設(shè)計目的- 1 -
二.課程設(shè)計題目描述和要求- 1 -
三.課程設(shè)計報告內(nèi)容- 1 -
3.1、設(shè)計思路 - 1 -
3.2、方案設(shè)計與論證 - 2 -
3.2.1數(shù)碼管顯示選擇方案 - 2 -
3.2.2數(shù)碼管驅(qū)動選擇方案 - 3 -
3.3、 設(shè)計原理、程序及流程圖 - 3 -
3.3.1流程圖 - 3 -
3.3.2電路原理圖 - 4 -
3.3.3 C語言程序及說明 - 4 -
3.4、protues仿真圖,及作品成型圖 - 12 -
3.4.1 protues 仿真圖 - 12 -
3.4.2實踐電路板照片 - 13 -
3.5安裝與調(diào)試結(jié)果 - 14 -
3.5.1電路安裝 - 14 -
3.5.2電路調(diào)試 - 15 -
3.5.3 軟件調(diào)試 - 15 -
3.5.4 性能測試 - 15 -
四.總結(jié)- 15 -
參考書目- 16 -
LED數(shù)字顯示電子時鐘
一.課程設(shè)計目的:
1、鞏固和加深對單片機(jī)原理知識的理解和運用;
2、進(jìn)一步提高學(xué)生綜合運用所學(xué)知識的能力;
3、培養(yǎng)學(xué)生綜合分析問題、發(fā)現(xiàn)問題和解決問題的能力。
二.課程設(shè)計題目描述和要求:
1、方案論證,確定總體電路原理圖。
2、元器件選擇,設(shè)計PCB圖(或用萬能電路實驗板搭線)。
3、繪制程序流程圖,編寫C語言源程序。
4、安裝調(diào)試,實現(xiàn)數(shù)字時鐘的基本功能,即能正確顯示時、分、秒;可調(diào)整時間;秒閃功能。
三.課程設(shè)計報告內(nèi)容:
3.1、設(shè)計思路:
3.1.1根據(jù)所需實現(xiàn)的功能畫出程序流程圖,如3.5所示。
3.1.2將電路按照3.6原理圖焊接起來,定義開關(guān)K1,K2,K3分別接單片機(jī)的P3.2,P3.2,P3.5引腳。
3.1.3用軟件延時對K1,K2,K3進(jìn)行兩級防抖。啟動系統(tǒng),中斷初始化,定時器0只用來做計時,定時器1根據(jù)需要可選擇進(jìn)入定時模式或者計數(shù)模式。外部中斷1,2用來等待外部按鍵的按下。
3.1.4當(dāng)先按下K1時,進(jìn)入外部中斷0,主函數(shù)調(diào)用時間顯示函數(shù),定時器1處于計數(shù)工作模式,num=num+1,num為1時按K2,K3對小時進(jìn)行加減來調(diào)整小時位,num=2按K2,K3對分進(jìn)行調(diào)整,當(dāng)num=3按K2,K3對秒進(jìn)行調(diào)整,當(dāng)num=4時就對num進(jìn)行清零,跳出時間調(diào)節(jié)。
3.1.5當(dāng)先按下K2時,進(jìn)入外部中斷1,cmd=cmd+1,主函數(shù)調(diào)用秒表顯示函數(shù),進(jìn)入秒表狀態(tài),此時將定時器1的工作模式改為計時,使其每10ms進(jìn)行一次中斷,并設(shè)定當(dāng)cmd位偶數(shù)時進(jìn)行秒表計時,當(dāng)cmd為奇數(shù)時停止秒表計時。K1用來對秒表進(jìn)行清零,在秒表處于00-00-00狀態(tài)時,按K1退出秒表,進(jìn)入時間顯示狀態(tài)。
3.2、方案設(shè)計與論證:
file:///C:\Users\ADMINI~1\AppData\Local\Temp\ksohtml\wps9D48.tmp.png
圖1 系統(tǒng)整體框圖
整個系統(tǒng)用單片機(jī)作為中央控制器,由單片機(jī)執(zhí)行采集芯片內(nèi)部時鐘信號,時鐘信號通過單片機(jī)I/O口傳給單片機(jī),單片機(jī)模塊控制驅(qū)動模塊驅(qū)動顯示模塊,通過顯示模塊來實現(xiàn)信號的輸出、LED的顯示及相關(guān)的控制功能。系統(tǒng)設(shè)有按鍵模塊用于對時間進(jìn)行調(diào)整及擴(kuò)展多個小鍵盤。
3.2.1數(shù)碼管顯示選擇方案
方案一:靜態(tài)顯示。靜態(tài)顯示,即當(dāng)顯示器顯示某一字符時,相應(yīng)的發(fā)光二極管恒定導(dǎo)通或截止。該方式每一位都需要一個8 位輸出口控制。靜態(tài)顯示時較小電流能獲得較高的亮度,且字符不閃爍。但因當(dāng)所需顯示的位數(shù)較多時,靜態(tài)顯示所需的I/O口數(shù)較大,造成資源的浪費。
方案二:動態(tài)顯示。動態(tài)顯示,即各位數(shù)碼管輪流點亮,對于顯示器各位數(shù)碼管,每隔一段延時時間循環(huán)點亮一次。利用人的視覺暫留功能可以看到整個顯示,但須保證掃描速度足夠快,人的視覺暫留功能才可察覺不到字符閃爍。顯示器的亮度與導(dǎo)通電流、點亮?xí)r間及間隔時間的比例有關(guān)。調(diào)整參數(shù)可以實現(xiàn)較高穩(wěn)定度的顯示。動態(tài)顯示節(jié)省了I/O口,降低了能耗。
從節(jié)省單片機(jī)芯片I/O口和降低能耗角度出發(fā),本數(shù)字電子鐘數(shù)碼管顯示選擇設(shè)計采用方案二。
3.2.2數(shù)碼管驅(qū)動選擇方案
方案一:上拉電阻驅(qū)動方式。數(shù)碼管段碼與接有上拉電阻的單片機(jī)芯片I/O口相連,通過編程,單片機(jī)芯片即控制段碼電平的高低。該方式經(jīng)費低,但實物制作較復(fù)雜。
方案二:7407芯片驅(qū)動方式。數(shù)碼管段碼與7407芯片B口相連,7407芯片A口與單片機(jī)芯片I/O口,通過編程,單片機(jī)芯片即可控制段碼電平的高低。該方式實物制作簡單,增強(qiáng)驅(qū)動數(shù)碼管段碼能力。
從實物制作簡易程度與驅(qū)動數(shù)碼管段碼能力角度出發(fā),本數(shù)字電子鐘數(shù)碼管驅(qū)動選擇設(shè)計采用方案二。
3.3、 設(shè)計原理、程序及流程圖:
3.3.1流程圖
file:///C:\Users\ADMINI~1\AppData\Local\Temp\ksohtml\wps9D68.tmp.png
3.3.2電路原理圖
file:///C:\Users\ADMINI~1\AppData\Local\Temp\ksohtml\wps9D69.tmp.png
3.3.3 C語言程序及說明
#include<reg51.h>
#define uchar unsigned char
#define uint unsigned int
uchar count=0,num=0,temp=0,cmd=0;
sbit LED=P1^0;
sbit H=P3^2;
sbit M=P3^3;
uchar tab[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
uchar sec=11,min=11,hour=11,a=0,b=0,c=0; //定義時鐘的時 分 秒 以及秒表的 分 秒 10ms;
void delay(uint i) //延時 2i ms;
{
uint j;
for(;i>0;i--)
for(j=124;j>0;j--);
}
void init() //中斷初始化
{
ET0=1;
TMOD=0x51;
TH0=(65536-25000)/256;
TL0=(65536-25000)%256;
ET1=1;
TH1=0xff;
TL1=0xff;
IT0=1;
IT1=1;
TR0=1;
TR1=1;
EA=1;
}
void Bss() //兩級防抖
{
H=1;M=1; //調(diào)時按鈕防抖
if(H==0)
{
delay(20);
H=1;
if(H==0)
{
delay(20);
H=1;
if(H==0)
{
EX0=1;
}
}
}
if(M==0) //調(diào)分按鈕防抖
{
delay(20);
M=1;
if(M==0)
{
delay(20);
M=1;
if(M==0)
{
EX1=1;
}
}
}
}
void display() //時鐘顯示
{
P0=tab[hour/10%10];
if(num==1 && temp==1) P2=0xff;
else P2=0xfe;
delay(1);
P0=tab[hour%10];
if(num==1 && temp==1) P2=0xff;
else P2=0xfd;
delay(1);
P0=tab[min/10%10];
if(num==2 && temp==1) P2=0xff;
else P2=0xfb;
delay(1);
P0=tab[min%10];
if(num==2 && temp==1) P2=0xff;
else P2=0xf7;
delay(1);
P0=tab[sec/10%10];
if(num==3 && temp==1) P2=0xff;
else P2=0xef;
delay(1);
P0=tab[sec%10];
if(num==3 && temp==1) P2=0xff;
else P2=0xdf;
delay(1);
}
void displaym() //秒表顯示
{
P0=tab[a/10%10];
P2=0xfe;
delay(1);
P0=tab[a%10];
P2=0xfd;
delay(1);
P0=tab[b/10%10];
P2=0xfb;
delay(1);
P0=tab[b%10];
P2=0xf7;
delay(1);
P0=tab[c/10%10];
P2=0xef;
delay(1);
P0=tab[c%10];
P2=0xdf;
delay(1);
}
void T0_int() interrupt 1 using 1 //中斷T0 用于計時
{
TH0=(65536-25000)/256;
TL0=(65536-25000)%256;
count++;
if((num != 0) && (count % 10 == 0)) //用于調(diào)時 數(shù)字閃爍
temp=~temp;
if(count%10==0)
LED=~LED;
if(count==20)
{
count=0;
sec=sec+1;
if(sec==60)
{
sec=0;
min=min+1;
if(min==60)
{
min=0;
hour=hour+1;
if(hour==24)
hour=0;
}
}
}
}
void T1_int() interrupt 3 using 2 //中斷T1 用于 可在時間校準(zhǔn)的減 與計時 之間 進(jìn)行切換
{
if(cmd != 0) //滿足條件 T1進(jìn)入計時功能
{
TH1=(65536-5000)/256;
TL1=(65536-5000)%256;
if(cmd%2 == 0)
{
c=c+1;
if(c==100)
{
c=0;
b=b+1;
if(b==60)
{
b=0;
a=a+1;
}
}
}
}
else //不滿足秒表條件,進(jìn)入計數(shù)功能
{
TH1=0xff;
TL1=0xff;
switch(num)
{
case 1:hour=hour-1;if(hour<=0) hour=23;break;
case 2:min=min-1;if(min<=0) min=59;break;
case 3:sec=sec-1;if(sec<=0) sec=59;break;
default:break;
}
}
}
void I1_int() interrupt 2 using 3 //外部中斷1 用于調(diào)時的加 跟秒表的控制
{
EX1=0;
switch(num)
{
case 0:TMOD=0x11;cmd=cmd+1;break; //當(dāng)外部中斷未被啟用時 進(jìn)入秒表
case 1:hour=hour+1;if(hour>=24) hour=0;break;
case 2:min=min+1;if(min>=60) min=0;break;
case 3:sec=sec+1;if(sec>=60) sec=0;break;
default:break;
}
}
void I0_int() interrupt 0 using 3 //外部中斷0 用于校準(zhǔn)時間在時、分、秒之間進(jìn)行切換
{
EX0=0;
if(cmd != 0 &&(a!=0 || b!=0 || c!=0)) //對秒表進(jìn)行清零
{
a=0;b=0;c=0;
}
else if(cmd != 0 &&(a*b*c==0)) //清零后 退出秒表
{
cmd=0;
TMOD=0x51;
TH1=0xff;
TL1=0xff;
}
else if(cmd==0) //調(diào)時切換
{
temp=1; //啟動數(shù)字閃爍
num=num+1;
if(num==4)
{
temp=0; //關(guān)閉字符閃爍
num=0; //推出調(diào)時功能
}
}
}
void main() //主函數(shù)
{
init();
LED=0;
while(1)
{
if(cmd==0) //如不滿足秒表條件 就進(jìn)入時間顯示
display();
else
displaym();
Bss();
}
}
3.4、protues仿真圖,及作品成型圖
3.4.1 protues 仿真圖
file:///C:\Users\ADMINI~1\AppData\Local\Temp\ksohtml\wps9D89.tmp.jpg
3.4.2實踐電路板照片
file:///C:\Users\ADMINI~1\AppData\Local\Temp\ksohtml\wps9DB9.tmp.png
LED數(shù)字顯示電子時鐘正面(關(guān)閉)
file:///C:\Users\ADMINI~1\AppData\Local\Temp\ksohtml\wps9DBA.tmp.png
LED數(shù)字顯示電子時鐘正面(開啟)
file:///C:\Users\ADMINI~1\AppData\Local\Temp\ksohtml\wps9DCB.tmp.png
LED數(shù)字顯示秒表狀態(tài)
3.5安裝與調(diào)試結(jié)果:
3.5.1電路安裝
安照電路原理圖把元器件安裝到已打好的銅板對應(yīng)的位置,把個元器件固定在銅板后,用導(dǎo)線把對應(yīng)的元器件的引腳相連接,再用焊錫焊接好即可。注意事項:
(1)元器件的布局應(yīng)盡量集中,且各個元器件間引腳的連線應(yīng)盡量短、不彎 曲,跳線盡量少。
(2)各個元器件引腳的焊接不要虛焊。
3.5.2電路調(diào)試
把相應(yīng)編譯好的目標(biāo)程序代碼加載到單片機(jī)芯片AT89S51,可接上5V電壓源即開始進(jìn)行硬件電路的調(diào)試工作。如果顯示結(jié)果不符合設(shè)計要求,即檢查電路各連接點是否正確連接,再次進(jìn)行硬件電路的調(diào)試工作,或是檢查代碼程序是否符合硬件電路的設(shè)計,若有錯即進(jìn)行相應(yīng)的修改,編譯后,再進(jìn)行硬件電路的調(diào)試工作。如此反復(fù)操作,直到調(diào)試出正確結(jié)果。
3.5.3 軟件調(diào)試
(1) 在計算機(jī)上運行程序調(diào)試軟件Keil,進(jìn)行程序調(diào)試。
(2)利用Proteus 軟件進(jìn)行仿真模擬。
(3)加載程序代碼到單片機(jī)芯片AT89S51中,進(jìn)行模擬仿真。若出現(xiàn)錯誤,查看錯誤后進(jìn)行相應(yīng)修改再進(jìn)行調(diào)試與模擬仿真,直到調(diào)試出正確結(jié)果。
3.5.4 性能測試
系統(tǒng)上電后進(jìn)行功能的測試,通過測試觀察到,系統(tǒng)上電后數(shù)碼管上顯示時間:11-11-11。通過測試,本作品設(shè)計實現(xiàn)了數(shù)字電子鐘的基本功能,且系統(tǒng)工作穩(wěn)定。經(jīng)過全組組員一起調(diào)試及驗證,計時誤差為1.0秒。
四.總結(jié):
本次課程設(shè)計的題目是LED數(shù)字顯示電子時鐘。經(jīng)過本組同學(xué)的共同努力,終于調(diào)試成功,并經(jīng)過測試數(shù)據(jù)顯示, 系統(tǒng)的可靠性已經(jīng)基本能夠達(dá)到實際電子鐘的設(shè)計要求,同時本單片機(jī)數(shù)字電子鐘系統(tǒng)具有擴(kuò)展性。
本設(shè)計從經(jīng)濟(jì)實用的角度出發(fā),采用美國Atmel公司的單片機(jī)AT89S51與顯示驅(qū)動芯片7407作為主控芯片與數(shù)據(jù)存儲器單元,結(jié)合外圍的鍵盤輸入、顯示、電源輸入等電路并用C語言編寫主控芯片的控制程序,研制了一款可以調(diào)時并帶有秒表功能的電子時鐘。使用單片機(jī)制作的電子時鐘具有軟硬件設(shè)計簡單,易于開發(fā),成本較低,安全可靠,操作方便等特點,可應(yīng)用于體育賽事和車站、辦公室及家庭等場所,有一定的實用性。此電子時鐘嚴(yán)格按照要求設(shè)計,基本達(dá)到了預(yù)期效果,能夠正確的顯示時分秒的計時,算上是一次比較成功的設(shè)計了。
實驗中遇到了不少問題,但我們一起改進(jìn)和綜合了如下。
1.按鍵問題。此設(shè)計中,很多功能選擇是通過按鍵開關(guān)實現(xiàn)的。在仿真中發(fā)現(xiàn),調(diào)整數(shù)值時,有時按鍵反應(yīng)太快,按一次,跳了幾下,使設(shè)置時間很不方便。于是用軟件延時將按鍵進(jìn)行兩級防抖,從而大大提高了按鈕的可操作性。
2.添加功能問題。此設(shè)計中,除了基本的功能外,我們發(fā)現(xiàn)沒有突出的亮點,于是想到添加一個秒表計時的功能,我們將定時器1進(jìn)行時分復(fù)用,通過按鍵按下的先后順序?qū)Χ〞r器1的計時或計數(shù)進(jìn)行功能選擇,此程序是在調(diào)時進(jìn)行后由開關(guān)1控制,進(jìn)行復(fù)位和控制,可以實現(xiàn)疊加計時和清零。
課程設(shè)計是培養(yǎng)學(xué)生綜合運用所學(xué)知識,發(fā)現(xiàn)實際問題、提出實際問題、分析和解決實際問題,鍛煉實踐能力的重要環(huán)節(jié),是對學(xué)生實際學(xué)習(xí)能力、動手能力的具體訓(xùn)練和考察過程。
在此次數(shù)字鐘設(shè)計過程中, 在學(xué)習(xí)新知識的同時,把在課程中學(xué)到的理論知識運用到實際作品設(shè)計、操作中,更進(jìn)一步地熟悉了單片機(jī)芯片的結(jié)構(gòu)及掌握了其工作原理和具體的使用方法與相關(guān)元器件的參數(shù)計算方法、使用方法,了解了電路的開發(fā)和制作及課程設(shè)計報告的編寫。加深了對相關(guān)理論知識及專業(yè)知識的掌握度,增強(qiáng)自身的動手能力,鍛煉及提高了理解問題、分析問題、解決問題的能力,更深刻的體會到了理論聯(lián)系實際的重要性。
最后,我們組通過此次單片機(jī)課程設(shè)計不僅僅將我們一學(xué)期在單片機(jī)課程上的所學(xué)很好的應(yīng)用到了實際設(shè)計中,更是將理論知識應(yīng)用到了實踐中,這才是真正的學(xué)習(xí),不僅僅是讀萬卷書,更要行萬里路,講知識與實踐有機(jī)的結(jié)合。也十分感謝老師為我們提供了這次單片機(jī)課程設(shè)計的機(jī)會,我們也通過此次課程設(shè)計,更清晰更實際的接觸到了單片機(jī)。
參考書目:
[1] 蔣輝平,《單片機(jī)原理與應(yīng)用設(shè)計》,北京,北京航空航天大學(xué)出版社,2007年
[2] 李鴻等,《單片機(jī)原理及應(yīng)用》,長沙,湖南大學(xué)出版社,2004年
[3] 樓然苗,李光飛,《單片機(jī)課程設(shè)計指導(dǎo)》,北京,北京航空航天出版社,2007年
[4] Kenneth A.Reek,《C和指針》,北京,人民郵電出版社,2008年
作者: zhf339033 時間: 2018-4-15 22:06
大佬,那個ISIS 軟件的電路圖有木有呀。菜鳥看不懂程序,猜不到圖。
作者: sun131838096 時間: 2018-5-29 07:49
老哥666666
作者: LinkerH 時間: 2018-6-14 20:08
大佬還是牛批
作者: ancient-gree 時間: 2018-6-17 14:25
感謝大佬分享
作者: ww295709429 時間: 2018-7-2 15:48
電路圖怎么看?
作者: 我是幽靈 時間: 2018-11-30 12:37
大佬,有圖嗎
作者: 54154谷歌 時間: 2018-12-23 19:47
有沒有仿真圖,Proteus文件
作者: 159wzl 時間: 2018-12-25 18:22
Proteus仿真圖有沒有啊大佬,江湖救急
作者: ccll036918 時間: 2018-12-26 16:25
對啊,為什么圖片加載不出來????
作者: yanar 時間: 2019-1-3 22:05
學(xué)習(xí)了,抱拳
作者: 1433538653 時間: 2019-3-5 22:08
厲害了666
作者: 15992335933 時間: 2019-9-29 13:36
很給力
歡迎光臨 (http://m.zg4o1577.cn/bbs/) |
Powered by Discuz! X3.1 |
主站蜘蛛池模板:
国产一区福利
|
日韩第一区
|
亚洲天堂一区
|
亚洲免费视频一区
|
中文字幕免费观看视频
|
国产不卡在线观看
|
欧美日韩国产中文字幕
|
国产亚洲欧美在线
|
欧美色偷偷
|
毛片一级片
|
av网址在线播放
|
欧美精品一区二
|
日韩不卡av
|
日韩精品一区在线
|
天天拍天天干
|
日本久久综合
|
免费a在线观看
|
免费av一区|
国产福利一区二区三区
|
亚洲精选一区
|
国产在线欧美
|
日本免费中文字幕
|
日韩精品观看
|
亚洲区视频
|
久久久亚洲精品视频
|
国产在线www
|
色午夜|
四虎影视最新地址
|
亚洲砖区区免费
|
天堂av影院
|
在线观看日韩视频
|
伊人网av
|
中文字幕在线观看第一页
|
久久久久久久久久久国产
|
一区二区三区在线看
|
成人毛片100免费观看
|
亚洲www啪成人一区二区麻豆
|
午夜免费小视频
|
91久久久久国产一区二区
|
五月天在线
|
特级丰满少妇一级aaaa爱毛片
|