單片機(jī)課程設(shè)計(jì)任務(wù)書
題 目
基于51單片機(jī)的電子表
課題性質(zhì)
工程設(shè)計(jì)
課題來源
自選
指導(dǎo)教師
主要內(nèi)容
(參數(shù))
利用51單片機(jī)實(shí)現(xiàn)以下功能:
電子時(shí)鐘可以正常計(jì)時(shí)。
可以對(duì)電子時(shí)鐘進(jìn)行調(diào)節(jié)。
調(diào)節(jié)時(shí)有光標(biāo)閃爍。
任務(wù)要求
(進(jìn)度)
第1-2天:熟悉課程設(shè)計(jì)任務(wù)及要求,查閱技術(shù)資料,確定設(shè)計(jì)方案。
第3-4天:按照確定的方案設(shè)計(jì)單元電路。要求畫出單元電路圖,元件及元件參數(shù)選擇要有依據(jù),各單元電路的設(shè)計(jì)要有詳細(xì)論述。
第5-6天:軟件設(shè)計(jì),編寫程序。
第7-8天:軟件調(diào)試。
第9-10天:撰寫課程設(shè)計(jì)報(bào)告。要求內(nèi)容完整、圖表清晰、文理流暢、格式規(guī)范、方案合理、設(shè)計(jì)正確,篇幅合理。
目錄
1 系統(tǒng)概述
1.1 設(shè)計(jì)目的
1.2 設(shè)計(jì)內(nèi)容
1.3 設(shè)計(jì)目標(biāo)
2 方案論證
2.1 用開發(fā)板進(jìn)行電子鐘的設(shè)計(jì)
2.2 用實(shí)物進(jìn)行電子鐘的
3 硬件設(shè)計(jì)
3.1 系統(tǒng)的原理
3.2 部分電路圖
3.3 I/O分配
3.4 元器件選型
4 軟件設(shè)計(jì)
4.1 主源程序
4.2 lcd1602源程序
4.3 1302時(shí)鐘源程序
5 系統(tǒng)調(diào)試
設(shè)計(jì)心得
參考文獻(xiàn)
1 系統(tǒng)概述
1.1 設(shè)計(jì)目的1.熟悉DS1302的工作原理與過程 2.熟悉LCD1602液晶屏的工作原理和過程 3.熟悉掌握51的c程序編寫 4結(jié)合DS1302和LCD1602液晶屏設(shè)計(jì)出電子表 1.2 設(shè)計(jì)內(nèi)容1.使液晶屏中顯示秒分時(shí)日月年星期等功能 2.液晶屏中的初始時(shí)間可調(diào)節(jié) 3.液晶屏中的時(shí)間日期可調(diào) 4每次調(diào)節(jié)時(shí)都有光標(biāo)閃爍 1.3 設(shè)計(jì)目標(biāo)1.在51開發(fā)板上能夠?qū)崿F(xiàn)時(shí)間日期的顯示 2.學(xué)會(huì)開發(fā)板的基礎(chǔ)知識(shí) 3.可穩(wěn)定調(diào)節(jié)和計(jì)時(shí) 4.熟悉掌握c語言的編寫 2 方案論證
2.1 用開發(fā)板進(jìn)行電子鐘的設(shè)計(jì)用開發(fā)板進(jìn)行設(shè)計(jì)時(shí),可以采用keil4軟件中51功能,在其中編寫c語言,然后生成hex文件,根據(jù)設(shè)計(jì)的需要查資料進(jìn)行編寫。對(duì)于新手來說,這是一個(gè)不錯(cuò)的選擇,可以隨時(shí)進(jìn)行錯(cuò)誤的識(shí)別和更改,大大提高了效率,為以后的單片機(jī)學(xué)習(xí)打下基礎(chǔ)。在用開發(fā)板進(jìn)行編寫程序時(shí),先進(jìn)行主函數(shù)的編寫,然后根據(jù)主函數(shù)所需要的東西,再繼續(xù)編寫其他程序。在主函數(shù)中,主要是按鍵的設(shè)置和時(shí)間調(diào)節(jié)的循環(huán)。然后再加入lcd和ds1302的功能便可以實(shí)現(xiàn)時(shí)鐘的顯示。這樣做不僅節(jié)約了成本,還為以后編寫程序打下了基礎(chǔ)。 2.2 用實(shí)物進(jìn)行電子鐘的用實(shí)物進(jìn)行設(shè)計(jì),需要進(jìn)行元器件的焊接,并且在焊接過程中易出現(xiàn)錯(cuò)誤導(dǎo)致設(shè)計(jì)的失敗,而且用匯編語言進(jìn)行編寫程序時(shí),會(huì)增加設(shè)計(jì)難度,通常來說,一條c語言可以轉(zhuǎn)化成多條匯編語言,相比較,用開發(fā)板進(jìn)行設(shè)計(jì)更方便,所以選擇用開發(fā)板進(jìn)行設(shè)計(jì)。 3 硬件設(shè)計(jì)
3.1 系統(tǒng)的原理開發(fā)板通過USB自動(dòng)下載電路下載開發(fā)板連接電腦的裝置,然后給開發(fā)板供電,然后通過DS1302時(shí)鐘芯片、LCD1602、開關(guān)、STC89C52芯片各自引腳連接在一起,組成基本的硬件連接,然后在keil4上面編寫軟件,經(jīng)過開發(fā)板自帶的燒錄軟件運(yùn)行程序。 圖一:系統(tǒng)工作原理圖 3.2 部分電路圖
圖二:STC89C52芯片引腳連線 
圖三:LCD1602液晶屏引腳連線 
圖四:開關(guān)引腳連線 
圖5:USB自動(dòng)下載電路引腳連線 
圖6:DS1302時(shí)鐘芯片引腳連線 3.3 I/O分配LCD1602的DB0到DB7 8個(gè)引腳接p0口,RS接p2.6口,RW接p2.5口,E接p2.7口。如圖三所示 開關(guān)的K1接RXT(p3.1),K2接TXD(p3.0),K3接p3.2,K4接p3.3。如圖四所示 DS1302芯片的SCLK引腳接p3.6,I/O引腳接p3.4,CE引腳接p3.5。如圖六所示 3.4 元器件選型LCD1602液晶屏一個(gè) DS1302時(shí)鐘芯片一個(gè) STC89C52芯片一個(gè) 晶振、電阻、電容、開關(guān)若干
5 系統(tǒng)調(diào)試下載開發(fā)板自帶的燒錄軟件,調(diào)試運(yùn)行結(jié)果如下 
圖7:運(yùn)行結(jié)果 
圖8:運(yùn)行初始狀態(tài) 
圖9:調(diào)節(jié)后的時(shí)間 在調(diào)試過程中,一開始沒有光標(biāo)的閃爍,不確定具體調(diào)節(jié)的是那一位,后來根據(jù)lcd1602的原理設(shè)置其閃爍,知道調(diào)節(jié)后是哪一個(gè)時(shí)間和日期。后來在設(shè)置星期的時(shí)候怎么都設(shè)置,怎么都不出來7,后來檢查源程序,發(fā)現(xiàn)程序中不包含7,修改以后,可以實(shí)現(xiàn)時(shí)間日期的準(zhǔn)確調(diào)節(jié),并能夠準(zhǔn)確的按照時(shí)鐘連續(xù)運(yùn)行下去。 設(shè)計(jì)心得經(jīng)過這次課程設(shè)計(jì),讓我充分認(rèn)識(shí)了自己的不足,太多的基礎(chǔ)知識(shí)不知道,導(dǎo)致這個(gè)過程變得非常艱難。最開始的時(shí)候是準(zhǔn)備做一個(gè)上課講過的簡單的時(shí)鐘,僅僅包含有時(shí)分秒,直接弄上一個(gè)編程語言然后就可以實(shí)現(xiàn)了,但是還有許多的 定義不知道如何去設(shè)置,于是就在開發(fā)板上面找到包含時(shí)分秒日月星期年的程序,然后看最基礎(chǔ)的教學(xué)視頻,把lcd1602和1302時(shí)鐘芯片還有開關(guān)等組裝成一個(gè)時(shí)鐘秒表,其中的程序有錯(cuò)誤的,有何自己設(shè)計(jì)不同的,于是便根據(jù)最基本的知識(shí)來看程序,然后進(jìn)行修改,稍微有點(diǎn)錯(cuò)誤就會(huì)導(dǎo)致程序的無法進(jìn)行,可見學(xué)習(xí)單片機(jī)是一個(gè)嚴(yán)謹(jǐn)?shù)倪^程,容不得絲毫馬虎。反正是最后做出來的時(shí)候,只有一個(gè)感覺,太累了,好不容易。如果基礎(chǔ)知識(shí)牢固的話,那么現(xiàn)在的我應(yīng)該是很隨意的就設(shè)計(jì)出來這個(gè)電子表,但是實(shí)際情況卻不是這樣,花了大量的時(shí)間去重新學(xué)習(xí)基礎(chǔ)知識(shí),使設(shè)計(jì)緩慢的進(jìn)行下去。 在設(shè)計(jì)的過程中,遇到過很多的困難,像windows8上面裝keil4,出現(xiàn)了不兼容的問題,在網(wǎng)上多處搜索得到的答案都是換windows7,但問了多個(gè)以前裝過keil4的同學(xué),終于知道了如何解決,設(shè)置系統(tǒng)不更新,然后根據(jù)開發(fā)板贈(zèng)送的光盤上面的步驟一步步完成了安裝,然后對(duì)整個(gè)程序進(jìn)行修改,無奈的是改完程序后編譯沒有錯(cuò)誤,但是就是顯示不出來東西,找了好久也找不到解決的辦法,只好用源程序進(jìn)行簡單的修改來實(shí)現(xiàn)我的功能。可以這樣說,這次的課程設(shè)計(jì)是一次不成功的設(shè)計(jì)。在以后的學(xué)習(xí)中,一定要認(rèn)真學(xué)習(xí),熟練的掌握單片機(jī)與編程知識(shí)。
4 軟件設(shè)計(jì)
4.1 主源程序
- void main()
- {
- unsigned char i;
- Int0Configuration();
- LcdInit();
- Ds1302Init();
- while(1)
- {
- if(SetState==0)
- {
- Ds1302ReadTime();
- }
- else
- {
- if(K1==0) //檢測按鍵K1是否按下
- {
- Delay10ms(); //消除抖動(dòng)
- if(K1==0)
- {
- SetPlace++;
- if(SetPlace>=7)
- SetPlace=0;
- }
-
- while((i<50)&&(K1==0)) //檢測按鍵是否松開
- {
- Delay10ms();
- i++;
- }
- i=0;
- }
- if(K2==0) //檢測按鍵K2是否按下
- {
- Delay10ms(); //消除抖動(dòng)
- if(K2==0)
- {
- TIME[SetPlace]++;
- if((TIME[SetPlace]&0x0f)>9) //換成BCD碼。
- {
- TIME[SetPlace]=TIME[SetPlace]+6;
- }
- if((TIME[SetPlace]>=0x60)&&(SetPlace<2)) //分秒只能到59
- {
- TIME[SetPlace]=0;
- }
- if((TIME[SetPlace]>=0x24)&&(SetPlace==2)) //小時(shí)只能到23
- {
- TIME[SetPlace]=0;
- }
- if((TIME[SetPlace]>=0x32)&&(SetPlace==3)) //日只能到31
- {
- TIME[SetPlace]=0;
- }
- if((TIME[SetPlace]>=0x13)&&(SetPlace==4)) //月只能到12
- {
- TIME[SetPlace]=0;
- }
- if((TIME[SetPlace]>=0x8)&&(SetPlace==5)) //周只能到7
- {
- TIME[SetPlace]=1;
- }
- if(SetPlace==5) //月只能到12
- {
- TIME[SetPlace]=;
- }
- }
-
- while((i<50)&&(K2==0)) //檢測按鍵是否松開
- {
- Delay10ms();
- i++;
- }
- i=0;
-
- }
- }
- LcdDisplay();
- }
-
- }
復(fù)制代碼
4.2 lcd1602源程序 void LcdDisplay()
{
LcdWriteCom(0x80+0X40);
LcdWriteData('0'+TIME[2]/16); //時(shí)
LcdWriteData('0'+(TIME[2]&0x0f));
LcdWriteData('-');
LcdWriteData('0'+TIME[1]/16); //分
LcdWriteData('0'+(TIME[1]&0x0f));
LcdWriteData('-');
LcdWriteData('0'+TIME[0]/16); //秒
LcdWriteData('0'+(TIME[0]&0x0f));
LcdWriteCom(0x80);
LcdWriteData('2');
LcdWriteData('0');
LcdWriteData('0'+TIME[6]/16); //年
LcdWriteData('0'+(TIME[6]&0x0f));
LcdWriteData('-');
LcdWriteData('0'+TIME[4]/16); //月
LcdWriteData('0'+(TIME[4]&0x0f));
LcdWriteData('-');
LcdWriteData('0'+TIME[3]/16); //日
LcdWriteData('0'+(TIME[3]&0x0f));
LcdWriteCom(0x8D);
LcdWriteData('0'+(TIME[5]&0x07)); //星期
4.3 1302時(shí)鐘源程序
- void Ds1302Write(uchar addr, uchar dat)
- {
- uchar n;
- RST = 0;
- _nop_();
-
- SCLK = 0;//先將SCLK置低電平。
- _nop_();
- RST = 1; //然后將RST(CE)置高電平。
- _nop_();
-
- for (n=0; n<8; n++)//開始傳送八位地址命令
- {
- DSIO = addr & 0x01;//數(shù)據(jù)從低位開始傳送
- addr >>= 1;
- SCLK = 1;//數(shù)據(jù)在上升沿時(shí),DS1302讀取數(shù)據(jù)
- _nop_();
- SCLK = 0;
- _nop_();
- }
- for (n=0; n<8; n++)//寫入8位數(shù)據(jù)
- {
- DSIO = dat & 0x01;
- dat >>= 1;
- SCLK = 1;//數(shù)據(jù)在上升沿時(shí),DS1302讀取數(shù)據(jù)
- _nop_();
- SCLK = 0;
- _nop_();
- }
-
- RST = 0;//傳送數(shù)據(jù)結(jié)束
- _nop_();
- }
復(fù)制代碼
完整的Word格式文檔51黑下載地址:
基于51單片機(jī)的電子表.docx
(1.06 MB, 下載次數(shù): 19)
2018-11-21 18:31 上傳
點(diǎn)擊文件名下載附件
|