




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、題目: 秒表計時器課程: 單片機課程設計專業(yè):班級:學號:姓名:指導老師:設計時間: 目錄一、 設計目的二、 設計要求三、 設計原理四、 電路的功能單元設計五、 各項程序六、設計心得體會一、 設計目的1、用紅、綠、黃三色發(fā)光二極管做信號燈,主干道a為東西向,設紅、綠、黃三色燈為ar、ag、ay;支干道b喂南北向。三色燈為br、bg、by。2、主干道車輛較多,所以亮綠燈的時間設為50s;支干道亮綠燈的時間設為30s。當主干道允許通行亮綠燈時則支干道亮紅燈;相反,支干道允許通行亮綠燈時則主干道亮紅燈。每次由綠燈轉變?yōu)榧t燈時,其間要亮5s的黃燈作為過渡,以便行駛中的車輛有時間停到禁止線以內。3、交通
2、燈正常運行時,用4位數(shù)碼管m1、m2、m3、m4顯示主干道和支干道的倒計時時間,m1、m2顯示主干道在當前狀態(tài)剩余時間;m3、m4顯示支干道在當前狀態(tài)的剩余時間。4、能實現(xiàn)系統(tǒng)總清0,清0后計數(shù)器由出事狀態(tài)開始計數(shù)。指示燈指示主干道亮綠燈。5、具有一定的擴展功能: 它能實現(xiàn)特殊狀態(tài)的功能先死,用開關s作為特殊信號傳感器,s為1時進入特殊狀態(tài)并實現(xiàn)下列特殊狀態(tài)功能: 1)顯示器m1、m2、m3、m4閃爍,即在全0和當前計時時間中交替顯示。 2)計數(shù)器停止計數(shù)并保持原來的時間數(shù)據(jù)。 3)東西、南北方向的三色燈全顯示為紅色狀態(tài)。 4)特殊狀態(tài)解除后能繼續(xù)返回正常工作狀態(tài)。 5)進入特殊狀態(tài)時,音響電
3、路發(fā)出急促的“嘀嘟”聲,以示警告。二、設計要求 1、分析設計任務,擬定多種設計方案,根據(jù)當時的制作條件,選定其中的一種方案繪制系統(tǒng)框圖和設計流程。三、設計原理系統(tǒng)模塊劃分根據(jù)設計要求系統(tǒng)分為4大模塊1. 主程序模塊(內包含發(fā)聲模塊)2. 鍵盤按鍵模塊3. 1602顯示模塊4. 1307時鐘模塊系統(tǒng)設計思路根據(jù)設計要求,我們主程序模塊主要以按鍵為觸發(fā)其他狀態(tài)的信號,沒有按鍵時,循環(huán)執(zhí)行當前狀態(tài)內容,即掃描按鍵,通過i2c讀取1307內部存儲時間并在lcd1602上顯示。而定時器0主要用來發(fā)聲脈沖的建立。程序狀態(tài)主要分為三種(即:秒表模式swit_flag=1、北京時間模式swit_flag=0)
4、a)在時間模式下可以通過設置年月日時分秒的鍵和一個加鍵一個減鍵來設置需要顯示的時間;b)秒表模式下,通過切換鍵切換到秒表模式,通過選擇鍵(即順計時和倒計時的選擇),可以設置需要倒計的時間長度,按相應的鍵保存當前的數(shù)據(jù),按顯示鍵,顯示之前保存相應組別的數(shù)據(jù)(詳見流程圖)。倒計時到零時,蜂鳴器會發(fā)出響聲,提醒時間到。主程序流程框圖lcd顯示n實現(xiàn)當前狀態(tài)下功能狀態(tài)轉換s0、s1、s2初始化是否有鍵按?下?y秒表模式 進入秒表 讀取秒表功能鍵 判斷鍵值 打開定時器 查看記錄 進入到計時開始計時 鍵=5,暫停 鍵=6,查看 按鍵14和鍵并存儲 記錄 10,初值設定 鍵=13, 開始倒計時 顯示=13=
5、9=2 時間模式 進入時間模式 讀取鍵值 關閉時間讀取, 鍵值=7? 對ds1307進 行時間設置 正常讀取 ds1307 顯示 四、電路的功能單元設計4.1按鍵電路設計由于設計要求使用矩陣鍵盤,所以本設計就采用行列式鍵盤,同時也能減少鍵盤與單片機接口時所占用的i/o線的數(shù)目,在按鍵比較多的時候,通常采用這樣方法。其原理如圖41所示。圖41每一條水平(行線)與垂直線(列線)的交叉處不相通,而是通過一個按鍵來連通,利用這種行列式矩陣結構只需要n條行線和m條列線,即可組成具有nm個按鍵的鍵盤。在這種行列式矩陣鍵盤非鍵盤編碼的單片機系統(tǒng)中,鍵盤處理程序首先執(zhí)行等待按鍵并確認有無按鍵按下的程序段。當確
6、認有按鍵按下后,下一步就要識別哪一個按鍵按下。對鍵的識別通常有兩種方法:一種是常用的逐行掃描查詢法;另一種是速度較快的線反轉法。對照圖24所示的44鍵盤,說明線反轉個工作原理。首先辨別鍵盤中有無鍵按下,有單片機i/o口向鍵盤送全掃描字,然后讀入行線狀態(tài)來判斷。方法是:向行線輸出全掃描字00h,把全部列線置為低電平,然后將列線的電平狀態(tài)讀入累加器a中。如果有按鍵按下,總會有一根行線電平被拉至低電平從而使行線不全為1。判斷鍵盤中哪一個鍵被按下使通過將列線逐列置低電平后,檢查行輸入狀態(tài)來實現(xiàn)的。方法是:依次給列線送低電平,然后查所有行線狀態(tài),如果全為1,則所按下的鍵不在此列;如果不全為1,則所按下的
7、鍵必在此列,而且是在與零電平行線相交的交點上的那個鍵。按鍵的操作面板如圖圖44所示。共計數(shù)字鍵10個,功能鍵6個。tmolzcsr+e1圖34 按鍵操作面板示意圖s+ps-e2r-圖4-4鍵位說明:m:模式轉換鍵t:時間模式復位鍵c:年月日時分秒的切換s+:時間調整+s-:時間調整-l:切入秒表儲存記錄z:查看秒表儲存記錄e1:高位倒計時設定e2:低位倒計時設定o:進入秒表s:秒表時間記錄鍵r+:正計時秒表開始r-:倒計時秒表開始p:秒表暫停鍵4.2 顯示電路設計lcd顯示信號連接圖如圖1.7所示。圖1.7 lcd信號連接關鍵網絡名和引腳名解釋: (1)disctrl04:顯示控制信號。(2)
8、d0d7、db0db7:數(shù)據(jù)總線。(3)e:lcd使能信號。(4)rs:數(shù)據(jù)、指令選擇信號。(5)rw:讀、寫選擇信號。(6)cs1、cs2:lcd12864由兩部分組成,cs1和cs2為選擇信號。4.3 at24c02掉電存儲單元的設計掉電存儲單元的作用是在電源斷開的時候,存儲當前設定的單價信息。at24c02是atmel公司的2kb字節(jié)的電可擦除存儲芯片,采用兩線串行的總線和單片機通訊,電壓最低可以到2.5v,額定電流為1ma,靜態(tài)電流10ua(5.5v),芯片內的資料可以在斷電的情況下保存40年以上,而且采用8腳的dip封裝,使用方便。其電路如圖25所示。圖37 掉電存儲電路原理圖圖中r
9、8、r10是上拉電阻,其作用是減少at24c02的靜態(tài)功耗,由于at24c02的數(shù)據(jù)線和地址線是復用的,采用串口的方式傳送數(shù)據(jù),所以只用兩根線scl(移位脈沖)和sda(數(shù)據(jù)/地址)與單片機傳送數(shù)據(jù)。每當設定一次單價,系統(tǒng)就自動調用存儲程序,將單價信息保存在芯片內;當系統(tǒng)重新上電的時候,自動調用讀存儲器程序,將存儲器內的單價等信息,讀到緩存單元中,供主程序使用。五、各項程序5.1主程序main#include #includeintrins.h#includertch.h#include key.h#include lcd.h#define unchar unsigned charunsign
10、ed int tsave25=0,0,0,0,0,0,0,0,0,0;unsigned int miao = 0;unsigned char interruptcounter=0;/定義中斷計數(shù)變量并賦初值0unsigned char flag=0;/判斷倒計時sbit alarm =p26;/函數(shù)聲明void delay(unsigned int t);/ void beep() unsigned int num; for(num=0;num500;num+) alarm=alarm; delay(100); void delay(unsigned int t)unsigned int i;
11、for(i = 0;i t;i+);void main() unsigned char table116= ;unsigned char table216= ;unsigned char table10=0123456789 ; unsigned char time7;unsigned char m4; unsigned char state,set_tim=0;unsigned char swit_flag=0,time_f=0,set_f=0; unsigned char p;unsigned char han=1 ,lie =1;unsigned char dajs=0,play_f=0
12、,i;pllcon&=0xf8;/設置頻率為12.58mhzcfg848|=0x01;/使用片內xram i2ccon=0xe8;/配置iic為軟件主發(fā)送模式p2 &= 0xe1;p3 &= 0x17;tmod=0x01; /配置定時器0為16位模式,時鐘為12.58mhzie=0x82; /使能定時器0中斷和全局中斷th0=0x0a;tl0=0x4c;tr0=0; /關閉、開啟定時器0flag=0;/顯示初始化init_lcd();/while(1) /lcd顯示write_lcd(0,0x80);for(p = 0;p = 15;p+)write_lcd(1,table1p);write_
13、lcd(0,0x80+0x40);for(p = 0;p 59)time0=0;/secondif(set_f=2)time1+;if(time159)time1=0;/minuteif(set_f=3)time2+;if(time223)time2=0;/hour if(state=15) if(set_f=1)time0-;if(time0=255)time0=59;/secondif(set_f=2)time1-;if(time1=255)time1=59;/minuteif(set_f=3)time2-;if(time2=255)time2=23;/hour if(set_f!=0)s
14、ettime(time); if(state=11) if(set_f=5)time5+;if(time512)time5=1;/monthif(set_f=6)time6+;if(time699)time6=0;/yearif(set_f=4)time4+; switch(time5) case 1: case 3: case 5: case 7: case 8: case 10: case 12:if(time431)time4=1;break; case 4: case 6: case 9: case 11:if(time430)time4=1;break; case 2: if(tim
15、e6%4)if(time428)time4=1; else if(time429)time4=1; break; default:break; /data if(state=15) if(set_f=5)time5-;if(time5=255)time5=12;/monthif(set_f=6)time6-;if(time6=255)time6=99;/yearif(set_f=4)time4-; switch(time5) case 1: case 3: case 5: case 7: case 8: case 10: case 12:if(time4=255)time4=31;break;
16、 case 4: case 6: case 9: case 11:if(time4=255)time4=30;break; case 2: if(time6%4)if(time4=255)time4=28; else if(time4=255)time4=29;break; default:break; /data if(set_f!=0)settime(time); if(set_f=0)readtime(time); /清屏for(i=0;i=1001) miao=0; /低二位設置 if(state=10) tr0=0;play_f=0; miao=miao+100; if(miao=1
17、001) miao=0; /高二位設置 if(state=2)/顯示 tr0=0; play_f=1; han=1;lie=1; miao=tsavelie-1han-1; if(play_f=1) if(state=6) tr0=0; han=han+1; if(han=6) han=1; lie=lie+1; if(lie=3) lie=1;han=1; miao=tsavelie-1han-1; / m0=miao%10; m1=(miao%100)/10; m2=(miao%1000)/100; m3=miao/1000; /清屏for(i=0;i=20)interruptcounte
18、r=0;if(flag=0) miao+; if(miao = 1001)miao = 0;if(flag=1)/倒計時 miao-; if(miao=0|miao=65535)miao = 0; 5.2、i2c及1307程序#include #includeintrins.h#define unchar unsigned char/函數(shù)聲明 unsigned char key_process(); void delay(); void delay1(unsigned int count); void iic_delay(); void init (void); void start(void
19、); void stop(void); void ack(void); void unack() ; unchar read(void); void write(unchar a); void settime(unsigned char time7); void readtime(unsigned char time7); /iic void delay1(unsigned int count) /延時1ms程序unsigned int i,j;for(i=0;icount;i+)for(j=0;j120;j+); void iic_delay() _nop_();_nop_();_nop_(
20、); _nop_();_nop_();_nop_();void init (void) mco=1; mde=1; mdo=1;void start(void) mde=1; mdo=1; mco=1; iic_delay(); mdo=0; iic_delay(); void stop(void) mde=1; mdo=0; mco=1; iic_delay(); mdo=1; iic_delay();void ack(void) unchar i=0; mco=1; mde=1; iic_delay(); while(mdo=1&i100) i+; mco=0; iic_delay();v
21、oid unack() mde=1; mdo=1; iic_delay(); mco=1; iic_delay(); mco=0; iic_delay(); unchar read(void) unchar i,dat; dat=0; mco=0; iic_delay(); mde=1; mdo=1; mde=0; iic_delay(); for(i=0;i8;i+) mco=1;dat=dat1;dat=dat|mdi; iic_delay();mco=0;iic_delay(); return dat;void write(unchar a) unchar i; mco=0; mde=1
22、; iic_delay(); for(i=0;i8;i+) if(a&0x80) mdo=1; else mdo=0; a=a1; iic_delay(); mco=1; iic_delay(); mco=0; iic_delay(); mdo=1;iic_delay(); void readtime(unsigned char time7) bit eatemp; unsigned char temp,i; eatemp=ea;for(i=0;i4)*10+(time0&0x0f); /second time1=(time1&0x7f)4)*10+(time1&0x0f); /minute
23、if(time2&0x40) if(time2&0x20)temp=0x80;else temp=0x40; time2=(time2&0x1f)4)*10+(time2&0x0f); /12hour time2|=temp; else time2=(time2&0x3f)4)*10+(time2&0x0f);/24 time3=time3&0x07; /week time4=(time4&0x3f)4)*10+(time4&0x0f); /date time5=(time5&0x1f)4)*10+(time5&0x0f); /month time6=(time64)*10+(time6&0x
24、0f); /year ea=eatemp;void settime(unsigned char time7) bit eatemp; unsigned char temp=0; unsigned char timetemp7; eatemp=ea; for(temp=0;temp7;temp+)timetemptemp=timetemp; temp=0; timetemp6=(timetemp6/10)4)+(timetemp6%10);/year timetemp5=(timetemp5/10)4)+(timetemp5%10);/month timetemp4=(timetemp4/10)
25、4)+(timetemp4%10);/date timetemp3=(timetemp3/10)4)+(timetemp3%10);/week /to ascii if(timetemp2&0xc0)=0x00) timetemp2=(timetemp2/10)4)+(timetemp2%10); else if(timetemp2&0xc0)=0x01)temp=0x40;else temp=0x60; timetemp2&=0x3f; timetemp2=(timetemp2/10)4)+(timetemp2%10); timetemp2|=temp; /hour timetemp1=(t
26、imetemp1/10)4)+(timetemp1%10);timetemp1&=0x7f;/minute timetemp0=(timetemp0/10)4)+(timetemp0%10); /second timetemp0&=0x7f; start(); write(0xd0); ack(); write(0x00); ack(); write(timetemp0); ack(); write(timetemp1); ack(); write(timetemp2); ack(); write(timetemp3); ack(); write(timetemp4); ack(); writ
27、e(timetemp5); ack(); write(timetemp6); ack(); stop(); delay1(1); ea=eatemp; 5.3按鍵程序#include void keydelay(unsigned int keytime);unsigned char getkey();unsigned char getkey()static unsigned char keyhavefree=1;unsigned char temp,keytemp=0xff;p1&=0xf0;p2&=0xf0; temp=p1&0x0f;if(keyhavefree) if(temp!=0x0
28、f)/判斷是否有按鍵按下; keydelay(1000);/消抖; if(temp=(p1&0x0f) p2|=0x0e;/忽略高四位; switch(p1&0x0f) case 0x0e:keytemp=3;break; case 0x0d:keytemp=7;break; case 0x0b:keytemp=11;break; case 0x07:keytemp=15;break; case 0x0f:break; default:keytemp= 0x80;break; p2&=0xf0;p2|=0x0d; switch(p1&0x0f) case 0x0e:keytemp= 2;break; case 0x0d:keytemp= 6;break; case 0x0b:keytemp= 10;break; case 0x07:keytemp= 14;break; case 0x0f:break; default:keytemp= 0x81;break; p2&=0xf0;p2|=0x0b; switch(p1&0x0f) case 0x0e:keytemp= 1;break; case 0x0d:keytemp= 5;break; case 0x0b:keytemp= 9;break; case 0x07:keytemp= 13;break; case
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2019-2025年軍隊文職人員招聘之軍隊文職教育學題庫與答案
- 2025年軍隊文職人員招聘之軍隊文職管理學與服務考試題庫
- 2021-2022學年廣東省廣州市白云區(qū)六校七年級(下)期中數(shù)學試卷(含答案)
- 企業(yè)級數(shù)據(jù)安全合規(guī)策略制定服務協(xié)議
- 網絡直播平臺合作項目表
- 四川省成都市武侯區(qū)2024-2025學年七年級上學期期末生物學試題(含答案)
- 湖南省岳陽市岳陽縣2024-2025學年七年級上學期期末生物學試題(含答案)
- 語言學英語翻譯技能測試卷
- 濕地松采脂承包合同
- 團隊目標與績效考核表
- 2025版年度城市綠化活動策劃及實施服務合同范本
- 2025年誠通證券招聘筆試參考題庫含答案解析
- 人教版高一上學期數(shù)學(必修一)期末考試卷(附答案)
- 專題17 全等三角形模型之奔馳模型解讀與提分精練(全國)(解析版)
- 智能制造能力成熟度模型(-CMMM-)介紹及評估方法分享
- 臨床康復??谱o士主導神經重癥患者早期漸進式離床活動實踐應用
- 《搜索引擎使用方法》課件
- DBJT14-100-2013 外墻外保溫應用技術規(guī)程(改性酚醛泡沫板薄抹灰外墻外保溫系統(tǒng))
- 《兒科補液》課件
- 2024解析:第六章質量和密度-講核心(解析版)
- 基爾霍夫定律課件(共17張課件)
評論
0/150
提交評論