版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、<p><b> 題目:多功能秒表</b></p><p><b> 目錄</b></p><p> 一、課題任務(wù)及要求3</p><p><b> 1、課題任務(wù)3</b></p><p><b> 2、課題要求3</b><
2、/p><p> 二、設(shè)計思路和方案3</p><p> 三、硬件電路設(shè)計3</p><p><b> 1、原件清單3</b></p><p><b> 2、硬件原理圖3</b></p><p> 2.1 按鍵電路圖3</p><p>
3、 2.2 單片機電路圖3</p><p> 2.3 1602模塊電路圖3</p><p> 2.4 總電路圖3</p><p> 四、軟件系統(tǒng)設(shè)計3</p><p> 1、主程序流程及說明3</p><p> 2、鍵盤掃描函數(shù)流程及說明3</p><p> 3、中斷服務(wù)子
4、程序流程及說明3</p><p> 4、程序清單及注釋3</p><p> 五、使用功能說明書3</p><p><b> 1、功能描述3</b></p><p><b> 2、操作指南3</b></p><p> 六、課程設(shè)計心得體會3</p&g
5、t;<p><b> 一、課題任務(wù)及要求</b></p><p><b> 1、課題任務(wù)</b></p><p> 設(shè)計一電子秒表,并具有顯示,基本操作功能。</p><p><b> 2、課題要求</b></p><p> 1)設(shè)計可以顯示0.1—10
6、0s的秒表,最小單位為毫秒</p><p> 2)通過按鍵控制秒表清零、暫停、繼續(xù)、退出等功能</p><p><b> 3)具有倒計時功能</b></p><p> 4)秒表可以分組存儲,批量顯示</p><p><b> 5)顯示北京時間</b></p><p>
7、 6)可利用蜂鳴器添加提示音</p><p><b> 二、設(shè)計思路和方案</b></p><p> 本課題初步可分為兩個模塊,時間模塊和秒表模塊。由于實驗板上的數(shù)碼管只有6位,所以決定采用1602液晶進行顯示。利用矩陣鍵盤作為外圍控制,但是因為實驗板上的矩陣鍵盤和LCD都接在了P3口,所以能夠利用的按鍵個數(shù)很少,導致部分功能如秒表時間調(diào)節(jié)無法完成。</p
8、><p><b> 三、硬件電路設(shè)計</b></p><p><b> 1、原件清單</b></p><p><b> 2、硬件原理圖</b></p><p><b> 2.1 按鍵電路圖</b></p><p> 實驗板上有
9、一組4*4的矩陣鍵盤和4個獨立按鍵,本課題中是使用了矩陣鍵盤中的一列和一個獨立按鍵。獨立按鍵的一端與P3.7相連,另一端接地。矩陣按鍵分別與P3.0-P3.3相連,另一端接P3.6。</p><p> 2.2 單片機電路圖</p><p> 外部晶振的頻率為11.0592MHz,復位電路采用的是手動復位電路。P0口與10K的排阻相連作為上拉電阻,驅(qū)動1602LCD.P2.3用于驅(qū)動蜂鳴
10、器。</p><p> 2.3 1602模塊電路圖</p><p> 1602的D0-D7為數(shù)據(jù)口,與單片機的P0口相連。</p><p> RS:數(shù)據(jù)/命令選擇端,連P3.5;</p><p> RW:讀寫選擇端,連P3.6;</p><p> LCDEN:使能端,連P3.4</p><
11、p><b> 2.4 總電路圖</b></p><p><b> 四、軟件系統(tǒng)設(shè)計</b></p><p> 1、主程序流程及說明</p><p> 主程序中主要進行LCD和定時器的初始化以及鍵盤掃描并執(zhí)行相應(yīng)的操作。</p><p> LCD初始化:16*2顯示,5*7點陣,8位數(shù)
12、據(jù)接口,不顯示光標,執(zhí)行寫操作后地址指針加一。</p><p> 定時器初始化:定時器0、1工作于方式一,50ms中斷一次</p><p> 2、鍵盤掃描函數(shù)流程及說明</p><p> 鍵盤應(yīng)該完成以下幾個功能:北京時間的調(diào)整、秒表開始、暫停、清零、倒計時、顯示存儲時間的。本課程設(shè)計中采用的是矩陣鍵盤的獨立式鍵盤。鍵盤掃描程序中應(yīng)該注意以下幾個問題:1、是否
13、有鍵按下;2、按鍵識別;3、按鍵消抖;4、按鍵是否松開。流程圖如下所示</p><p> 3、中斷服務(wù)子程序流程及說明</p><p> 定時器0用于控制時間模塊,定時器1用于控制控制秒表,均工作于方式一,50ms中斷一次。每個中斷子程序中均要放入時間顯示函數(shù),實新時間。定時器1要同時完成倒計時和計時的功能。所以要設(shè)置一個中間變量。每次進入中斷時,對中間變量的值進行判斷,執(zhí)行相應(yīng)的操作
14、。</p><p><b> 4、程序清單及注釋</b></p><p> #include<reg52.h></p><p> #define uchar unsigned char </p><p> #define uint unsigned int</p><p>
15、sbit dula=P2^6;</p><p> sbit wela=P2^7;</p><p> sbit rs=P3^5;</p><p> sbit lcden=P3^4;</p><p> sbit wr=P3^6;</p><p> sbit s1=P3^0;</p>
16、<p> sbit s2=P3^1;</p><p> sbit s3=P3^2;</p><p> sbit s4=P3^3;</p><p> sbit s5=P3^7;</p><p> sbit beep=P2^3;</p><p> uchar count,count1,s1num,
17、mbnum,i,j,count2,mbnum1;</p><p> uint num,num1;</p><p> char miao,shi,fen;</p><p> uchar code table[]=" 000.0";</p><p> uchar code table1[]=" 0
18、0:00:00"; //初始化時間</p><p> uint mbtime[10];</p><p> void delay(uint z) //ms延時函數(shù)</p><p><b> {</b></p><p><b> uint x,y;</b>
19、;</p><p> for(x=z;x>0;x--)</p><p> for(y=110;y>0;y--);</p><p><b> }</b></p><p> /************北京時間模塊************/</p><p> void write_
20、com(uchar com) //1602寫指令</p><p><b> {</b></p><p><b> rs=0;</b></p><p><b> lcden=0;</b></p><p><b> P0=com;</b>
21、</p><p><b> delay(5);</b></p><p><b> lcden=1;</b></p><p><b> delay(5);</b></p><p><b> lcden=0;</b></p><p
22、><b> }</b></p><p> void write_date(uchar date)//1602寫數(shù)據(jù)</p><p><b> {</b></p><p><b> rs=1;</b></p><p><b> lcden=
23、0;</b></p><p><b> P0=date;</b></p><p><b> delay(5);</b></p><p><b> lcden=1;</b></p><p><b> delay(5);</b></p
24、><p><b> lcden=0;</b></p><p><b> }</b></p><p> void init()//初始化函數(shù)</p><p><b> {</b></p><p> uchar num;<
25、/p><p><b> dula=0;</b></p><p><b> wela=0;</b></p><p><b> lcden=0;</b></p><p> write_com(0x38);</p><p> write_
26、com(0x0c); </p><p> write_com(0x06);</p><p> write_com(0x01); //以上幾條是1602的初始化設(shè)置</p><p> write_com(0x80); </p><p> for(num=0;num<9;num++)
27、//第一行用來顯示秒表,初始化為"000.0s"</p><p><b> {</b></p><p> write_date(table[num]);</p><p><b> delay(5);</b></p><p><b> }</b>
28、;</p><p> write_com(0x80+0x40);</p><p> for(num=0;num<12;num++)//第二行顯示北京時間,初始時間為"00:00:00"</p><p><b> {</b></p><p> write_date(table1[nu
29、m]);</p><p><b> delay(5);</b></p><p> } </p><p> TMOD=0x11;//定時器的初始化,兩個定時器均工作在方式1</p><p> TH0=(65536-45872)/256;</p><p>
30、 TL0=(65536-45872)%256;</p><p> TH1=(65536-45872)/256;</p><p> TL1=(65536-45872)%256; //50ms中斷一次</p><p><b> EA=1;</b></p><p><b> ET0=1;<
31、;/b></p><p><b> ET1=1;</b></p><p><b> TR0=1;</b></p><p><b> }</b></p><p> void write_sfm(uchar add,uchar date) //時間模塊修改時間
32、函數(shù)</p><p><b> {</b></p><p> uchar shi,ge;</p><p> shi=date/10;</p><p> ge=date%10;</p><p> write_com(0x80+0x40+add); //先寫入地址</p>
33、;<p> write_date(0x30+shi); </p><p> write_date(0x30+ge); //再寫入數(shù)據(jù)</p><p><b> }</b></p><p> void keyscan() //鍵盤掃描函數(shù)</p><p>&l
34、t;b> {</b></p><p> if(s1==0) //移動光標部分</p><p><b> {</b></p><p><b> delay(5);</b></p><p><b> if(s1==0)</b></
35、p><p><b> {</b></p><p><b> s1num++;</b></p><p> while(!s1);</p><p><b> }</b></p><p> if(s1num==1)//光標停在秒位</
36、p><p><b> {</b></p><p><b> TR0=0;</b></p><p> write_com(0x80+0x40+10);</p><p> write_com(0x0f); //顯示光標,并且閃爍</p><p><b>
37、 }</b></p><p> if(s1num==2) //光標停在分鐘位</p><p><b> {</b></p><p> write_com(0x80+0x40+7);</p><p><b> }</b></p><p> i
38、f(s1num==3) //光標停在時鐘位</p><p><b> {</b></p><p> write_com(0x80+0x40+4);</p><p><b> }</b></p><p> if(s1num==4) </p><p
39、><b> {</b></p><p><b> s1num=0;</b></p><p> write_com(0x0c); //關(guān)閉光標</p><p> TR0=1; //重新計時</p><p><b> }</b></p&g
40、t;<p><b> }</b></p><p> if(s1num!=0)</p><p><b> {</b></p><p><b> if(s2==0)</b></p><p><b> {</b></p&
41、gt;<p><b> delay(5);</b></p><p><b> if(s2==0)</b></p><p><b> {</b></p><p> while(!s2);</p><p> if(s1num==1) //調(diào)節(jié)秒
42、鐘位</p><p><b> {</b></p><p><b> miao++;</b></p><p> if(miao==60)</p><p><b> miao=0;</b></p><p> write_sfm(10,miao);
43、</p><p> write_com(0x80+0x40+10); //把地址重新寫會秒位</p><p><b> }</b></p><p> if(s1num==2)</p><p><b> {</b></p><p><b> fen++
44、;</b></p><p> if(fen==60)</p><p><b> fen=0;</b></p><p> write_sfm(7,fen);</p><p> write_com(0x80+0x40+7);</p><p><b> }</b&g
45、t;</p><p> if(s1num==3)</p><p><b> {</b></p><p><b> shi++;</b></p><p> if(shi==24)</p><p><b> shi=0;</b></p>
46、<p> write_sfm(4,shi);</p><p> write_com(0x80+0x40+4);</p><p><b> }</b></p><p><b> }</b></p><p><b> }</b></p><
47、;p><b> }</b></p><p><b> }</b></p><p> /************秒表模塊********/</p><p> void write_mb(uint date) //秒表寫時間</p><p><b> {</b
48、></p><p> uint qian,bai,shi,ge;</p><p> qian=date/1000;</p><p> bai=date%1000/100;</p><p> shi=date%100/10;</p><p> ge=date%10;//對時間進行分位&l
49、t;/p><p> write_com(0x80+4);</p><p> write_date(0x30+qian);</p><p> write_date(0x30+bai);</p><p> write_date(0x30+shi);</p><p> write_date(table[7]);<
50、/p><p> write_date(0x30+ge);</p><p><b> }</b></p><p> void write_mb1(uint date) //因為在鍵盤掃描和中斷函數(shù)中都要調(diào)用寫函數(shù),此處重載</p><p><b> {</b></p><p&g
51、t; uint qian,bai,shi,ge;</p><p> qian=date/1000;</p><p> bai=date%1000/100;</p><p> shi=date%100/10;</p><p> ge=date%10;</p><p> write_com(0x80+4);&l
52、t;/p><p> write_date(0x30+qian);</p><p> write_date(0x30+bai);</p><p> write_date(0x30+shi);</p><p> write_date(table[7]);</p><p> write_date(0x30+ge);&l
53、t;/p><p><b> }</b></p><p> void keyscan1() //秒表鍵盤掃描函數(shù)</p><p><b> {</b></p><p><b> if(s3==0)</b></p><p><b&g
54、t; {</b></p><p><b> delay(5);</b></p><p><b> if(s3==0)</b></p><p><b> {</b></p><p> while(!s3);</p><p><
55、b> mbnum++;</b></p><p> if(mbnum==1)//計時開始</p><p><b> {</b></p><p><b> TR1=1;</b></p><p><b> }</b></p>&
56、lt;p> else if(mbnum==2) //計時暫停</p><p><b> {</b></p><p><b> j++;</b></p><p> mbtime[i++]=num; //存儲暫停的時間</p><p> if(i==10)
57、 //設(shè)置只能存10組時間</p><p><b> i=0;</b></p><p><b> TR1=0;</b></p><p><b> mbnum=0;</b></p><p><b> }</b></p><p&
58、gt;<b> }</b></p><p><b> }</b></p><p><b> if(s4==0)</b></p><p><b> {</b></p><p><b> delay(5);</b></p&
59、gt;<p><b> if(s4==0)</b></p><p><b> {</b></p><p> while(!s4);</p><p><b> count2++;</b></p><p> TR1=0;//自動顯示存儲的
60、時間</p><p> if(count2==1)</p><p><b> {</b></p><p> for(i=0;i<j;i++)</p><p><b> {</b></p><p> write_mb1(mbtime[i]);</p>
61、<p> delay(1000);//加這條延時,否則LCD可能會花屏</p><p> write_com(0x80+4);</p><p> delay(1000);</p><p><b> }</b></p><p> i=0; </p>
62、<p><b> j=0;</b></p><p><b> }</b></p><p> if(count2==2)//清零</p><p><b> {</b></p><p><b> count2=0;</b>&
63、lt;/p><p><b> num=0;</b></p><p> write_mb1(0);</p><p> write_com(0x80+4);</p><p> delay(2000);</p><p><b> }</b></p><p&
64、gt;<b> }</b></p><p><b> }</b></p><p><b> if(s5==0)</b></p><p><b> {</b></p><p><b> delay(5);</b></p&
65、gt;<p><b> if(s5==0)</b></p><p><b> {</b></p><p> while(!s5);</p><p><b> mbnum1++;</b></p><p> if(mbnum1==1)</p>
66、<p><b> TR1=1;</b></p><p> if(mbnum1==2)</p><p><b> {</b></p><p><b> TR1=0;</b></p><p> beep=1; //蜂鳴器關(guān)閉</p>&
67、lt;p> mbnum1=0; //計數(shù)清零</p><p><b> i=0;</b></p><p> j=0; //清空數(shù)組中儲存的時間</p><p><b> }</b></p><p><b> }</b></p>
68、<p><b> } </b></p><p><b> }</b></p><p> void main()</p><p><b> {</b></p><p><b> wela=0;</b></p><
69、p><b> dula=0; </b></p><p><b> wr=0;</b></p><p><b> init();</b></p><p><b> while(1)</b></p><p><b> {</b
70、></p><p> keyscan();</p><p> keyscan1();</p><p><b> }</b></p><p><b> }</b></p><p> void timer0() interrupt 1</p><
71、;p><b> {</b></p><p> TH0=(65536-45872)/256;</p><p> TL0=(65536-45872)%256;</p><p><b> count++;</b></p><p> if(count==20) </p
72、><p><b> {</b></p><p><b> count=0;</b></p><p><b> miao++;</b></p><p> if(miao==60)</p><p><b> {</b></p
73、><p><b> miao=0;</b></p><p><b> fen++;</b></p><p> if(fen==60)</p><p><b> {</b></p><p><b> fen=0;</b><
74、/p><p><b> shi++;</b></p><p> if(shi==24)</p><p><b> {</b></p><p><b> shi=0;</b></p><p><b> }</b></p&g
75、t;<p> write_sfm(4,shi);</p><p><b> }</b></p><p> write_sfm(7,fen);</p><p><b> }</b></p><p> write_sfm(10,miao);</p><p>
76、;<b> }</b></p><p><b> }</b></p><p> void timer1() interrupt 3</p><p><b> {</b></p><p> TH1=(65536-45872)/256;</p><p
77、> TL1=(65536-45872)%256;</p><p><b> count1++;</b></p><p> if(count1==2)</p><p><b> {</b></p><p><b> count1=0;</b></p>
78、<p> if(mbnum1==1)//倒計時函數(shù)</p><p><b> {</b></p><p><b> num--;</b></p><p> if(num==0)//計時時間到</p><p><b> {</b><
79、/p><p> TR1=0; //定時器停止</p><p> beep=0;//蜂鳴器響</p><p><b> }</b></p><p><b> }</b></p><p> else </p><
80、;p><b> {</b></p><p><b> num++;</b></p><p> if(num==1001)</p><p><b> num=0;</b></p><p><b> }</b></p><p
81、> write_mb(num);</p><p> write_com(0x80+4);</p><p><b> }</b></p><p><b> }</b></p><p><b> 五、使用功能說明書</b></p><p>&
82、lt;b> 1、功能描述</b></p><p> 本作品為多功能秒表,具有秒表的基本功能:計時、暫停、顯示10組計時時間、倒計時、倒計時時間到時,蜂鳴器發(fā)出聲音提醒。同時能顯示北京時間,時間具有調(diào)整功能。</p><p><b> 2、操作指南</b></p><p> 實驗板上,倒數(shù)第二列矩陣鍵盤分別為S1、S2、
83、S3、S4,最后一個獨立按鍵為S5。</p><p> S1:按一下,時間停止走動,進入調(diào)節(jié)界面。光標停在秒鐘位并閃爍。按第二下,光標跳動至分鐘位,按第三下,光標調(diào)至時鐘位,按第四下,退出時間調(diào)節(jié),時間恢復走動。</p><p> S2:只是時間調(diào)節(jié)下有效,每按一下使相應(yīng)時間位加一。</p><p> S3:秒表的開始、暫停鍵。</p><
84、p> S4:自動顯示記錄的計時時間。</p><p> S5:開始倒計時,倒計時結(jié)束時,蜂鳴器響,再按一下,使蜂鳴器停止。</p><p> 六、課程設(shè)計心得體會</p><p> 通過單片機課程設(shè)計,加深了我對單片機知識的理解,對以前的學習內(nèi)容有了一個極大的鞏固和提高。同時,將理論和實際相聯(lián)系,提高了自己的動手能力,拓展了有關(guān)C語言編程、相關(guān)電子電路
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 眾賞文庫僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 單片機課程設(shè)計----多功能秒表
- 基于單片機多功能秒表課程設(shè)計
- 基于單片機的多功能秒表系統(tǒng)課程設(shè)計
- 基于單片機的多功能秒表的課程設(shè)計
- 單片機多功能秒表課程設(shè)計--89c51單片機秒表的設(shè)計
- 秒表課程設(shè)計
- 秒表課程設(shè)計
- 秒表課程設(shè)計
- 秒表課程設(shè)計-- 秒表系統(tǒng)的設(shè)計
- 秒表 課程設(shè)計
- 數(shù)字秒表課程設(shè)計
- 數(shù)字秒表課程設(shè)計
- 電子秒表 課程設(shè)計
- 鍵控秒表課程設(shè)計
- 數(shù)字秒表課程設(shè)計
- 電子秒表課程設(shè)計
- 數(shù)字秒表課程設(shè)計
- 多用秒表課程設(shè)計
- 電子秒表課程設(shè)計
- 課程設(shè)計-- 數(shù)字秒表
評論
0/150
提交評論