版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rè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 單片機(jī)電路圖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í)驗(yàn)板上的數(shù)碼管只有6位,所以決定采用1602液晶進(jìn)行顯示。利用矩陣鍵盤作為外圍控制,但是因?yàn)閷?shí)驗(yàn)板上的矩陣鍵盤和LCD都接在了P3口,所以能夠利用的按鍵個數(shù)很少,導(dǎo)致部分功能如秒表時間調(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> 實(shí)驗(yàn)板上有
9、一組4*4的矩陣鍵盤和4個獨(dú)立按鍵,本課題中是使用了矩陣鍵盤中的一列和一個獨(dú)立按鍵。獨(dú)立按鍵的一端與P3.7相連,另一端接地。矩陣按鍵分別與P3.0-P3.3相連,另一端接P3.6。</p><p> 2.2 單片機(jī)電路圖</p><p> 外部晶振的頻率為11.0592MHz,復(fù)位電路采用的是手動復(fù)位電路。P0口與10K的排阻相連作為上拉電阻,驅(qū)動1602LCD.P2.3用于驅(qū)動蜂鳴
10、器。</p><p> 2.3 1602模塊電路圖</p><p> 1602的D0-D7為數(shù)據(jù)口,與單片機(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> 主程序中主要進(jìn)行LCD和定時器的初始化以及鍵盤掃描并執(zhí)行相應(yīng)的操作。</p><p> LCD初始化:16*2顯示,5*7點(diǎn)陣,8位數(shù)
12、據(jù)接口,不顯示光標(biāo),執(zhí)行寫操作后地址指針加一。</p><p> 定時器初始化:定時器0、1工作于方式一,50ms中斷一次</p><p> 2、鍵盤掃描函數(shù)流程及說明</p><p> 鍵盤應(yīng)該完成以下幾個功能:北京時間的調(diào)整、秒表開始、暫停、清零、倒計時、顯示存儲時間的。本課程設(shè)計中采用的是矩陣鍵盤的獨(dú)立式鍵盤。鍵盤掃描程序中應(yīng)該注意以下幾個問題:1、是否
13、有鍵按下;2、按鍵識別;3、按鍵消抖;4、按鍵是否松開。流程圖如下所示</p><p> 3、中斷服務(wù)子程序流程及說明</p><p> 定時器0用于控制時間模塊,定時器1用于控制控制秒表,均工作于方式一,50ms中斷一次。每個中斷子程序中均要放入時間顯示函數(shù),實(shí)新時間。定時器1要同時完成倒計時和計時的功能。所以要設(shè)置一個中間變量。每次進(jìn)入中斷時,對中間變量的值進(jìn)行判斷,執(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) //移動光標(biāo)部分</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)//光標(biāo)停在秒位</
36、p><p><b> {</b></p><p><b> TR0=0;</b></p><p> write_com(0x80+0x40+10);</p><p> write_com(0x0f); //顯示光標(biāo),并且閃爍</p><p><b>
37、 }</b></p><p> if(s1num==2) //光標(biāo)停在分鐘位</p><p><b> {</b></p><p> write_com(0x80+0x40+7);</p><p><b> }</b></p><p> i
38、f(s1num==3) //光標(biāo)停在時鐘位</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)閉光標(biāo)</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;//對時間進(jìn)行分位&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) //因?yàn)樵阪I盤掃描和中斷函數(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í)驗(yàn)板上,倒數(shù)第二列矩陣鍵盤分別為S1、S2、
83、S3、S4,最后一個獨(dú)立按鍵為S5。</p><p> S1:按一下,時間停止走動,進(jìn)入調(diào)節(jié)界面。光標(biāo)停在秒鐘位并閃爍。按第二下,光標(biāo)跳動至分鐘位,按第三下,光標(biāo)調(diào)至?xí)r鐘位,按第四下,退出時間調(diào)節(jié),時間恢復(fù)走動。</p><p> S2:只是時間調(diào)節(jié)下有效,每按一下使相應(yīng)時間位加一。</p><p> S3:秒表的開始、暫停鍵。</p><
84、p> S4:自動顯示記錄的計時時間。</p><p> S5:開始倒計時,倒計時結(jié)束時,蜂鳴器響,再按一下,使蜂鳴器停止。</p><p> 六、課程設(shè)計心得體會</p><p> 通過單片機(jī)課程設(shè)計,加深了我對單片機(jī)知識的理解,對以前的學(xué)習(xí)內(nèi)容有了一個極大的鞏固和提高。同時,將理論和實(shí)際相聯(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)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 眾賞文庫僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 單片機(jī)課程設(shè)計----多功能秒表
- 基于單片機(jī)多功能秒表課程設(shè)計
- 基于單片機(jī)的多功能秒表系統(tǒng)課程設(shè)計
- 基于單片機(jī)的多功能秒表的課程設(shè)計
- 單片機(jī)多功能秒表課程設(shè)計--89c51單片機(jī)秒表的設(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
提交評論