版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、<p><b> 課 程 設(shè) 計(jì)</b></p><p><b> 目 錄</b></p><p> 一、數(shù)字時(shí)鐘的設(shè)計(jì)與制作3</p><p> 1.1主要技術(shù)指標(biāo)3</p><p> 1.2方案論證及選擇3</p><p> 1.2.1方
2、案論證3</p><p> 方案一:使用專用時(shí)鐘芯片。4</p><p> 方案二:采用MCU內(nèi)部定時(shí)器。4</p><p> 1.2.2方案選擇5</p><p> 1.3系統(tǒng)組成框圖5</p><p> 1.4單元電路設(shè)計(jì)6</p><p> 1.5總體電路圖11&
3、lt;/p><p> 1.6電路仿真12</p><p> 1.7調(diào)試過(guò)程及測(cè)試結(jié)果12</p><p> 1.7.1調(diào)試過(guò)程12</p><p> 1.7.2測(cè)試結(jié)果33</p><p> 1.8主要元件清單33</p><p> 二、出租車(chē)計(jì)費(fèi)器的設(shè)計(jì)與制作35</
4、p><p> 1.1主要技術(shù)指標(biāo)35</p><p> 1.2方案論證及選擇35</p><p> 1.2.1方案論證35</p><p> 1.2.2方案選擇37</p><p> 1.3系統(tǒng)組成框圖37</p><p> 1.4單元電路設(shè)計(jì)37</p>&l
5、t;p> 1.5總體電路圖42</p><p> 1.6調(diào)試過(guò)程及測(cè)試結(jié)果43</p><p> 1.6.1調(diào)試過(guò)程43</p><p> 1.7.2測(cè)試結(jié)果58</p><p> 1.8主要元件清單58</p><p> 1.9課程設(shè)計(jì)小結(jié)59</p><p>&
6、lt;b> 三、個(gè)人總結(jié)61</b></p><p> 一、數(shù)字時(shí)鐘的設(shè)計(jì)與制作</p><p><b> 1.1主要技術(shù)指標(biāo)</b></p><p> 設(shè)計(jì)和制作一個(gè)顯示時(shí)、分、秒的數(shù)字時(shí)鐘,具有校時(shí)功能,可對(duì)小時(shí)和分單獨(dú)校時(shí),對(duì)分校時(shí)的時(shí)候,停止向小時(shí)的進(jìn)位。校時(shí)時(shí)鐘可以手動(dòng)輸入或借用電路中的時(shí)鐘;實(shí)現(xiàn)秒表功能;
7、省電狀態(tài)(不顯示);顯示年、月、日、學(xué)號(hào)。在實(shí)現(xiàn)數(shù)字時(shí)鐘功能的同時(shí),設(shè)計(jì)和制作一個(gè)溫度顯示器,可用鍵盤(pán)設(shè)置溫度的上限和下限,測(cè)量的溫度高于低于設(shè)置的溫度時(shí),溫度顯示器報(bào)警。</p><p> 1.2方案論證及選擇</p><p><b> 1.2.1方案論證</b></p><p><b> ⑴ 單片機(jī)的選擇:</b>
8、;</p><p> 方案一:采用型號(hào)為AT89S52的51單片機(jī)芯片。</p><p> 51內(nèi)核具有豐富的指令集和32個(gè)通用工作寄存器。所有的寄存器都直接與算術(shù)邏輯單元(ALU) 相連接,使得一條指令可以在一個(gè)時(shí)鐘周期內(nèi)同時(shí)訪問(wèn)兩個(gè)獨(dú)立的寄存器。這種結(jié)構(gòu)大大提高了代碼效率,并且具有比普通的CISC微控制器最高至10倍的數(shù)據(jù)吞吐率。</p><p> AT8
9、9S52有如下特點(diǎn):8K字節(jié)的系統(tǒng)內(nèi)可編程Flash(具有同時(shí)讀寫(xiě)的能力,即(RWW),512 字節(jié)EEPROM,1K字節(jié)SRAM,32個(gè)通用I/O口線,32個(gè)通用工作寄存器,用于邊界掃描的JTAG 接口,支持片內(nèi)調(diào)試與編程,三個(gè)具有比較模式的靈活的定時(shí)器/ 計(jì)數(shù)器(T/C),片內(nèi)/外中斷,可編程串行USART,有起始條件檢測(cè)器的通用串行接口,具有片內(nèi)振蕩器的可編程看門(mén)狗定時(shí)器,一個(gè)SPI串行端口,以及六個(gè)可以通過(guò)軟件進(jìn)行選擇的省電模式
10、。 工作于空閑模式時(shí)CPU停止工作,而USART、兩線接口、SRAM、T/C、SPI 端口以及中斷系統(tǒng)繼續(xù)工作;掉電模式時(shí)晶體振蕩器停止振蕩,所有功能除了中斷和硬件復(fù)位之外都停止工作;在省電模式下,異步定時(shí)器繼續(xù)運(yùn)行,允許用戶保持一個(gè)時(shí)間基準(zhǔn),而其余功能模塊處于休眠狀態(tài);Standby模式下只有晶體或諧振振蕩器運(yùn)行,其余功能模塊處于休眠狀態(tài),使得器件只消耗極少的電流,同時(shí)具有快速啟動(dòng)能力;擴(kuò)展Standby模式下則允許振蕩器和異步定時(shí)器
11、繼續(xù)工作。</p><p> 本芯片是以Atmel高密度非易失性存儲(chǔ)器技術(shù)生產(chǎn)的。片內(nèi)ISP Flash允許程序存儲(chǔ)器通過(guò)ISP串行接口,或者通用編程器進(jìn)行編程,也可以通過(guò)運(yùn)行于AVR 內(nèi)核之中的引導(dǎo)程序進(jìn)行編程。引導(dǎo)程序可以使用任意接口將應(yīng)用程序下載到應(yīng)用Flash存儲(chǔ)區(qū)(Application Flash Memory)。在更新應(yīng)用Flash存儲(chǔ)區(qū)時(shí)引導(dǎo)Flash區(qū)(Boot Flash Memory)的程
12、序繼續(xù)運(yùn)行,實(shí)現(xiàn)了RWW操作。 通過(guò)將8位RISC CPU與系統(tǒng)內(nèi)可編程的Flash集成在一個(gè)芯片內(nèi),ATmega16 成為一個(gè)功能強(qiáng)大的單片機(jī),為許多嵌入式控制應(yīng)用提供了靈活而低成本的解決方案。</p><p> 方案二:選用其他單片機(jī)。</p><p> 無(wú)論從單片機(jī)的資源,還是執(zhí)行速度進(jìn)行比較,51單片機(jī)都要比其他單片機(jī)性價(jià)比高。而且51單片機(jī)的價(jià)格比其他單片機(jī)便宜。</p
13、><p><b> ?、朴?jì)時(shí)控制方案</b></p><p> 方案一:使用專用時(shí)鐘芯片。</p><p> 使用微控制器控制專用時(shí)鐘芯片實(shí)現(xiàn)計(jì)時(shí)控制,這種方案有著計(jì)時(shí)精度高、控制簡(jiǎn)單的優(yōu)點(diǎn),而且更易于實(shí)現(xiàn)日期/時(shí)間顯示、定時(shí)烹調(diào)等計(jì)時(shí)擴(kuò)展功能。</p><p> 方案二:采用MCU內(nèi)部定時(shí)器。</p>
14、<p> AT89S52內(nèi)部含有2個(gè)定時(shí)器,可以利用一個(gè)定時(shí)器與程序計(jì)數(shù)器相結(jié)合的方式,在系統(tǒng)晶振的驅(qū)動(dòng)下,產(chǎn)生標(biāo)準(zhǔn)時(shí)鐘頻率。</p><p><b> ⑶顯示方案選擇</b></p><p><b> 方案一:數(shù)碼管顯示</b></p><p> 工作原理簡(jiǎn)單,軟件編程簡(jiǎn)單,但考慮到本電路功能多所需數(shù)碼
15、管多,組合使用電路焊接難度加大,故不宜使用。</p><p><b> 方案二:液晶顯示</b></p><p> 工作原理較復(fù)雜,切編程難度大,但外圍電路簡(jiǎn)單,能顯示多種字符,能夠同時(shí)顯示多位字符,焊接也比較容易。</p><p><b> 1.2.2方案選擇</b></p><p><
16、;b> ?、?單片機(jī)的選擇:</b></p><p> 根據(jù)以上的兩種方案的比較,本電路設(shè)計(jì)時(shí)最終采用的是AT89S52芯片。</p><p><b> ?、朴?jì)時(shí)控制方案</b></p><p> 根據(jù)以上的兩種方案的比較,本電路設(shè)計(jì)時(shí)最終采用的是實(shí)用專用的時(shí)鐘芯片。</p><p><b&g
17、t; ⑶顯示方案選擇</b></p><p> 根據(jù)以上的兩種方案的比較,考慮到方案二比較適合本電路,切可用軟件實(shí)現(xiàn)多位顯示,綜上所述,故選擇方案二。選擇最常用的顯示器1602。</p><p><b> 1.3系統(tǒng)組成框圖</b></p><p> 系統(tǒng)組成框圖如下圖1--1所示:</p><p>
18、<b> 圖1--1</b></p><p><b> 1.4單元電路設(shè)計(jì)</b></p><p> ?。?) 復(fù)位電路如圖1--2所示:</p><p><b> 圖1--2</b></p><p> ?。?)晶振電路如圖1--3所示:</p><p
19、><b> 圖1--3</b></p><p> ?。?)顯示電路如圖1--4所示:</p><p><b> 圖1--4</b></p><p> 液晶顯示器用的是HS1602芯片,共有16個(gè)管腳,三個(gè)控制口,七個(gè)數(shù)據(jù)口,是一種低功能CMOS技術(shù)實(shí)現(xiàn)的LCD模塊。液晶顯示模塊具有體積小、功耗低、顯示內(nèi)容豐富等
20、特點(diǎn),現(xiàn)在字符型液晶顯示模塊已經(jīng)是單片機(jī)應(yīng)用設(shè)計(jì)中最常用的信息顯示器件了。1602B可以顯示2行16個(gè)字符,有8位數(shù)據(jù)總線D0-D7,和RS、R/W、EN三個(gè)控制端口,工作電壓為5V,并且?guī)в凶址麑?duì)比度調(diào)節(jié)和背光。該模塊也可以只用D4-D7作為四位數(shù)據(jù)分兩次傳送。</p><p> 1602B外觀如圖1--5所示:</p><p><b> 圖1--5</b>&l
21、t;/p><p> 1602引腳說(shuō)明如表2--1所示:</p><p><b> 表2--1</b></p><p> 1602的基本操作時(shí)序?yàn)椋?lt;/p><p> 讀狀態(tài):輸入: RS=0,RW=1,E=1 輸出:D0~D7=狀態(tài)字寫(xiě)指令:輸入: RS=0,RW=0,D0~D7=指令
22、碼,E=高脈沖 輸出:無(wú)</p><p> 讀數(shù)據(jù):輸入: RS=1,RW=1, 輸出:D0~D7=數(shù)據(jù)</p><p> 寫(xiě)數(shù)據(jù):輸入: RS=1,RW=0,D0~D7=數(shù)據(jù),E=高脈沖 輸出:無(wú)</p><p><b> 時(shí)鐘信號(hào)產(chǎn)生電路:</b></p><p&
23、gt; 本單元電路采用時(shí)鐘芯片DS1302來(lái)實(shí)現(xiàn)日期、時(shí)間的顯示功能。DS1302 是DALLAS 公司推出的涓流充電時(shí)鐘芯片內(nèi)含有一個(gè)實(shí)時(shí)時(shí)鐘/日歷和31 字節(jié)靜態(tài)RAM 通過(guò)簡(jiǎn)單的串行接口與單片機(jī)進(jìn)行通信實(shí)時(shí)時(shí)鐘/日歷電路提供秒分時(shí)日日期月年的信息每月的天數(shù)和閏年的天數(shù)可自動(dòng)調(diào)整時(shí)鐘操作可通過(guò)AM/PM 指示決定采用24 或12 小時(shí)格式DS1302 與單片機(jī)之間能簡(jiǎn)單地采用同步串行的方式進(jìn)行通信僅需用到三個(gè)口線(1) RES(復(fù)
24、位)(2) I/O 數(shù)據(jù)線(3)SCLK(串行時(shí)鐘)時(shí)鐘/RAM 的讀/寫(xiě)數(shù)據(jù)以一個(gè)字節(jié)或多達(dá)31 個(gè)字節(jié)的字符組方式通信DS1302 工作時(shí)功耗很低保持?jǐn)?shù)據(jù)和時(shí)鐘信息時(shí)功率小于1mW。</p><p> DS1302的管腳配置圖如圖1--6所示:</p><p><b> 圖1--6</b></p><p><b> 管腳描述
25、:</b></p><p> X1、X2: 32.768KHz 晶振管腳</p><p><b> GND: 地</b></p><p><b> RST: 復(fù)位腳</b></p><p> /O: 數(shù)據(jù)輸入/輸出引腳</p><p> SCLK: 串行
26、時(shí)鐘</p><p> Vcc1,Vcc2:電源供電管腳</p><p> ?。?)鬧鐘電路如圖1--7所示:</p><p><b> 圖1--7</b></p><p> (6)按鍵電路如圖1--8所示:</p><p><b> 圖1--8</b></p&
27、gt;<p><b> 1.5總體電路圖</b></p><p> 總體電路圖如圖1--9所示:</p><p><b> 圖1--9</b></p><p><b> 1.6電路仿真</b></p><p> 電路仿真圖如下圖1-10:</p&g
28、t;<p><b> 圖1—10</b></p><p> 1.7調(diào)試過(guò)程及測(cè)試結(jié)果</p><p><b> 1.7.1調(diào)試過(guò)程</b></p><p> 電路按設(shè)計(jì)圖焊接確保無(wú)誤。</p><p><b> 軟件編程流程圖:</b></p>
29、;<p> <1> 按電路設(shè)計(jì)圖,分配各I/O口;</p><p> <2>根據(jù)任務(wù)要求分配各按鍵功能;</p><p> <3> 根據(jù)分配的按鍵功能完成相應(yīng)的編程; </p><p> <4> 根據(jù)各分配的I/O口,完成相應(yīng)的編程;</p><p> <5>
30、完成芯片1602初始化程序;</p><p> <6> 完成主程序的編程。</p><p> 軟件流程圖如圖1--11所示</p><p><b> 圖1--11</b></p><p> (4)整體編程如下:</p><p> #include<reg52.h>
31、</p><p> #include<intrins.h></p><p> #include<string.h></p><p> #include<ctype.h></p><p> #include<stdio.h></p><p> #define u
32、char unsigned char</p><p> #define uint unsigned int</p><p> sbit buzz = P2^6;</p><p> sbit lcd_on=P1^4;</p><p> sbit lcd_rs=P2^4; </p><p> s
33、bit lcd_rw=P1^5;</p><p> sbit lcd_re=P2^5;</p><p> sbit dq = P3^1;</p><p> sbit s1 =P2^0; //總控制端</p><p> sbit s2 =P2^1;//加一</p><p> sbit s3 =P2^2; //減
34、一 </p><p> sbit s4 =P2^3; //秒表控制</p><p> sbit s7=P2^7; //the controlling of the lcd</p><p> void lcd_writedata(uchar date);</p><p> void lcd_writecom(uchar com);&
35、lt;/p><p> void change(uchar add,uchar date,uchar row);</p><p> void delay_ds1820(int num);</p><p> uchar readonechar(); //讀一個(gè)字節(jié)</p><p> void writeonechar(uchar dat);
36、 //寫(xiě)一個(gè)字節(jié)</p><p> uchar code wendu[]="0123456789";</p><p> uint readtemp() ; //讀溫度</p><p> void displayw() ; //顯示溫度</p><p> void key();</p><
37、p> void guding();</p><p> void ds1302_inputbyte(uchar d); </p><p> uchar ds1302_outputbyte();</p><p> uchar read1302(uchar add);</p><p> void write1302(uchar ad
38、d,uchar date);</p><p> void get_1302(uchar realtime[]);</p><p> void xianshi();</p><p> void miaobiao_init();</p><p> void keys();</p><p> void set_al
39、arm();</p><p> void read_alarm();</p><p> void alarm();</p><p> void alarm_sound();</p><p> void sheng_set();</p><p> void read_sheng();</p>&l
40、t;p> void sheng();</p><p> sbit ds1302_rst=P1^0; //ds1302腳定義</p><p> sbit ds1302_clk=P1^1;</p><p> sbit ds1302_io=P1^2;</p><p> sbit acc0 = ACC^0;</p>&
41、lt;p> sbit acc7 = ACC^7;</p><p> uchar C12_24,count=0,up=25,dn=25;</p><p> uchar num,s1num,s4num,flag,flag1,flag2,flag3; //定義變量</p><p> uchar shi,fen,miao,weimiao,t;</p&
42、gt;<p> char time[7],time1[7];</p><p> uchar ashi,afen,amiao,anian,ayue,ari;</p><p> uchar code table_1[]="BY: 21 29 41";</p><p> uchar code table_2[]="We
43、lcome to use!";</p><p> uchar table_3[]="ST_UP:";</p><p> uchar table_3_1[]="30";</p><p> uchar table_4_1[]="20";</p><p> ucha
44、r table_4[]="ST_DN:";</p><p> uchar code table[]=" StopWatch ";</p><p> uchar code table1[]=" 00:00:00:00 ";</p><p> uchar code table4[][3]={
45、"Mon","Tue","Wed","Thu","Fri","Sat","Sun"};</p><p> void write_xingqi(char xingqi);</p><p> void delay(uint z)</p>
46、<p><b> {</b></p><p><b> uint x,y;</b></p><p> for(x=z;x>0;x--)</p><p> for(y=110;y>0;y--);</p><p><b> }</b></p&g
47、t;<p> void lcd_init()//液晶初始化和命令數(shù)據(jù)操作</p><p><b> {</b></p><p> lcd_rw=0;lcd_writecom(0x38);lcd_writecom(0x0c);lcd_writecom(0x06);lcd_writecom(0x01);lcd_writecom(0x80);<
48、;/p><p><b> } </b></p><p> void lcd_writecom(uchar com)</p><p><b> {</b></p><p> lcd_rs=0;lcd_re=0;P0=com;lcd_re=1;delay(1);lcd_re=0;</p&g
49、t;<p><b> }</b></p><p> void lcd_writedata(uchar date)</p><p><b> {</b></p><p> lcd_rs=1;lcd_re=0;P0=date;lcd_re=1;delay(1);lcd_re=0;</p>
50、<p><b> }</b></p><p> void change(uchar add,uchar date,uchar row)</p><p><b> {</b></p><p> uchar shi,ge; shi=date/10; ge=date%10;</p><p&
51、gt; if(row==0)</p><p><b> {</b></p><p> lcd_writecom(0x80+add); lcd_writedata(0x30+shi); lcd_writedata(0x30+ge);</p><p><b> }</b></p><p>
52、 if(row==1)</p><p><b> {</b></p><p> lcd_writecom(0x80+0x40+add); lcd_writedata(0x30+shi); lcd_writedata(0x30+ge);</p><p><b> }</b></p><p>&
53、lt;b> }</b></p><p> void key()</p><p><b> {</b></p><p><b> if(s4==0)</b></p><p><b> {</b></p><p><b>
54、; delay(5);</b></p><p><b> if(s4==0)</b></p><p><b> {</b></p><p><b> flag1=1;</b></p><p> while(!s4);</p><p>
55、;<b> s4num++;</b></p><p> if(s4num==1)</p><p><b> {</b></p><p> lcd_init();</p><p> miaobiao_init();</p><p> lcd_writecom(0x8
56、0+0x40+4);</p><p> lcd_writedata(':');</p><p> lcd_writecom(0x80+0x40+7);</p><p> lcd_writedata(':');</p><p> lcd_writecom(0x80+0x40+10);</p>
57、<p> lcd_writedata(':');</p><p> lcd_writecom(0x80+2);</p><p> for(num=0;num<14;num++)</p><p><b> {</b></p><p> lcd_writedata(table[nu
58、m]);</p><p><b> delay(6);</b></p><p><b> }</b></p><p><b> }</b></p><p> if(s4num==2)</p><p><b> TR0=1;</
59、b></p><p> if(s4num==3)</p><p><b> {</b></p><p><b> TR0=0;</b></p><p><b> }</b></p><p> if(s4num==4)</p>
60、<p><b> {</b></p><p> lcd_init();</p><p> miaobiao_init();</p><p> lcd_writecom(0x80+0x40+4);</p><p> lcd_writedata(':');</p><
61、p> lcd_writecom(0x80+0x40+7);</p><p> lcd_writedata(':');</p><p> lcd_writecom(0x80+0x40+10);</p><p> lcd_writedata(':');</p><p> lcd_writecom(0
62、x80+2);</p><p> for(num=0;num<14;num++)</p><p><b> {</b></p><p> lcd_writedata(table[num]);</p><p><b> delay(6);</b></p><p>
63、;<b> }</b></p><p><b> }</b></p><p> if(s4num==5)</p><p><b> {</b></p><p> lcd_init(); guding();s4num=0;weimiao=0;miao=0;fen=0;
64、shi=0;flag1=0;</p><p><b> }</b></p><p><b> }</b></p><p><b> }</b></p><p><b> if(s1==0)</b></p><p> //
65、if(s4num==0)</p><p><b> {</b></p><p><b> delay(5);</b></p><p><b> if(s1==0)</b></p><p><b> {</b></p><p&g
66、t;<b> flag=1;</b></p><p><b> s1num++;</b></p><p> // if(s1num==8)</p><p> // s1num=0;</p><p> //while(!s7);</p><p>
67、switch(s1num)</p><p><b> {</b></p><p> case 1:lcd_writecom(0x80+0x40+7);</p><p> lcd_writecom(0x0f);</p><p><b> break;</b></p><p&
68、gt; case 2:lcd_writecom(0x80+0x40+4); </p><p> lcd_writecom(0x0f);</p><p><b> break;</b></p><p> case 3:lcd_writecom(0x80+0x40+1);</p><p> lcd_writecom
69、(0x0f);</p><p><b> break;</b></p><p> case 4:lcd_writecom(0x80+3);</p><p> lcd_writecom(0x0f);</p><p><b> break;</b></p><p> c
70、ase 5:lcd_writecom(0x80+6);</p><p> lcd_writecom(0x0f);</p><p><b> break;</b></p><p> case 6:lcd_writecom(0x80+9);</p><p> lcd_writecom(0x0f);</p>
71、<p><b> break;</b></p><p> case 7:lcd_writecom(0x80+12);</p><p> lcd_writecom(0x0f);</p><p><b> break; </b></p><p> case 8: s1num=
72、0;</p><p> lcd_writecom(0x0c); </p><p> write1302(0x8e,0x00); //控制寫(xiě)入</p><p> write1302(0x8c, time1[6]/10*16+time1[6]%10); //年</p><p> write1302(0x88, time1[4
73、]/10*16+time1[4]%10); //月</p><p> write1302(0x86, time1[3]/10*16+time1[3]%10); //日</p><p> write1302(0x8a, time1[5]/10*16+time1[5]%10); //星期</p><p> write1302(0x84, time1[2]/10
74、*16+time1[2]%10); //時(shí)</p><p> write1302(0x82, time1[1]/10*16+time1[1]%10); //分</p><p> write1302(0x80, time1[0]/10*16+time1[0]%10); //秒 </p><p> write1302(0x8e,0x80); //禁止寫(xiě)入&l
75、t;/p><p><b> flag=0;</b></p><p> break; </p><p> } </p><p><b> }</b></p><p><b> }</b></p
76、><p> if(s1num!=0)</p><p><b> {</b></p><p><b> if(s2==0)</b></p><p><b> {</b></p><p><b> delay(5);</b><
77、;/p><p><b> if(s2==0)</b></p><p><b> {</b></p><p> while(!s2);</p><p> switch(s1num)</p><p><b> {</b></p><
78、p> case 1:time1[0]++;</p><p> if(time1[0]==60) //秒</p><p> time1[0]=0;</p><p> change(6,time1[0],1);</p><p> lcd_writecom(0x80+0x40+6);</p><p>&
79、lt;b> break;</b></p><p> case 2:time1[1]++;</p><p> if(time1[1]==60)</p><p> time1[1]=0; //分</p><p> change(3,time1[1],1);</p><p> lcd
80、_writecom(0x80+0x40+3);</p><p><b> break;</b></p><p> case 3:time1[2]++;</p><p> if(time1[2]==24)</p><p> time1[2]=0; //時(shí)</p><p> ch
81、ange(0,time1[2],1);</p><p> lcd_writecom(0x80+0x40+0);</p><p><b> break;</b></p><p> case 4:time1[6]++;</p><p> if(time1[6]==100)</p><p>
82、time1[6]=0; //年</p><p> change(2,time1[6],0);</p><p> lcd_writecom(0x80+2);</p><p><b> break;</b></p><p> case 5:time1[4]++;</p><p>
83、 if(time1[4]==13)</p><p> time1[4]=1; //月</p><p> change(5,time1[4],0);</p><p> lcd_writecom(0x80+5);</p><p><b> break;</b></p><p>
84、case 6:time1[3]++;</p><p> if(time1[3]==32)</p><p> time1[3]=1; //日</p><p> change(8,time1[3],0);</p><p> lcd_writecom(0x80+8);</p><p><b>
85、 break;</b></p><p> case 7:time1[5]++;</p><p> if(time1[5]==7)</p><p> time1[5]=0; //星期</p><p> write_xingqi(time1[5]);</p><p> lcd_writec
86、om(0x80+12);</p><p><b> break;</b></p><p><b> }</b></p><p><b> }</b></p><p><b> }</b></p><p><b>
87、 }</b></p><p><b> if(s3==0)</b></p><p><b> {</b></p><p><b> delay(5);</b></p><p><b> if(s3==0)</b></p>
88、<p><b> {</b></p><p> while(!s3);</p><p> switch(s1num)</p><p><b> {</b></p><p> case 1:time1[0]--;</p><p> if(time1[0]
89、==-1) //秒</p><p> time1[0]=59;</p><p> change(6,time1[0],1);</p><p> lcd_writecom(0x80+0x40+6);</p><p><b> break;</b></p><p> case 2:ti
90、me1[1]--;</p><p> if(time1[1]==-1)</p><p> time1[1]=59; //分</p><p> change(3,time1[1],1);</p><p> lcd_writecom(0x80+0x40+3);</p><p><b> br
91、eak;</b></p><p> case 3:time1[2]--;</p><p> if(time1[2]==-1)</p><p> time1[2]=23; //時(shí)</p><p> change(0,time1[2],1);</p><p> lcd_writecom(0
92、x80+0x40+0);</p><p><b> break;</b></p><p> case 4:time1[6]--;</p><p> if(time1[6]==-1)</p><p> time1[6]=99; //年</p><p> change(2,tim
93、e1[6],0);</p><p> lcd_writecom(0x80+2);</p><p><b> break;</b></p><p> case 5:time1[4]--;</p><p> if(time1[4]==0)</p><p> time1[4]=12;
94、 //月</p><p> change(5,time1[4],0);</p><p> lcd_writecom(0x80+5);</p><p><b> break;</b></p><p> case 6:time1[3]--;</p><p> if(time1[3]==0)
95、</p><p> time1[3]=31; //日</p><p> change(8,time1[3],0);</p><p> lcd_writecom(0x80+8);</p><p><b> break;</b></p><p> case 7:time1[5]-
96、-;</p><p> if(time1[5]==-1)</p><p> time1[5]=6; //星期</p><p> write_xingqi(time1[5]);</p><p> lcd_writecom(0x80+12);</p><p><b> break;</
97、b></p><p><b> } </b></p><p><b> }</b></p><p><b> }</b></p><p><b> }</b></p><p> //DS1302讀寫(xiě)模塊</p
98、><p> void ds1302_set( ) //設(shè)置時(shí)間初值</p><p><b> {</b></p><p> write1302(0x8e,0x00); //控制寫(xiě)入</p><p> write1302(0x8c,0x11); //年</p><p> write1302
99、(0x88,0x03); //月</p><p> write1302(0x86,0x01); //日</p><p> write1302(0x8a,0x01); //星期</p><p> write1302(0x84,0x21); //時(shí)</p><p> write1302(0x82,0x20); //分</p>
100、;<p> write1302(0x80,0x50); //秒</p><p> write1302(0x8e,0x80); //禁止寫(xiě)入</p><p><b> } </b></p><p> void ds1302_inputbyte(uchar d) //寫(xiě)一個(gè)字節(jié)</p><p><
101、;b> {</b></p><p> uchar i;ACC=d;</p><p> for(i=8;i>0;i--)</p><p><b> {</b></p><p> ds1302_io = acc0; </p><p> ds130
102、2_clk = 1;</p><p> ds1302_clk = 0;</p><p> ACC = ACC >> 1; </p><p><b> }</b></p><p><b> } </b></p><p> uchar ds1302_out
103、putbyte( ) //實(shí)時(shí)時(shí)鐘讀取一字節(jié)</p><p><b> { </b></p><p><b> uchar i;</b></p><p> for(i=8; i>0; i--)</p><p><b> {</b></p><
104、p> ACC = ACC >>1; </p><p> acc7 = ds1302_io; </p><p> ds1302_clk = 1;</p><p> ds1302_clk = 0;</p><p><b> } </b></p><p>
105、 return(ACC); </p><p><b> }</b></p><p> void write1302(uchar add,uchar date)</p><p><b> {</b></p><p> ds1302_rst = 0;</p><p>
106、 ds1302_clk = 0;</p><p> ds1302_rst = 1;</p><p> ds1302_inputbyte(add); </p><p> ds1302_inputbyte(date); </p><p> ds1302_clk = 1;</p><p>
107、 ds1302_rst = 0;</p><p><b> }</b></p><p> uchar read1302(uchar add)</p><p><b> {</b></p><p> uchar date;</p><p> ds1302_rst =
108、 0;</p><p> ds1302_clk = 0;</p><p> ds1302_rst = 1;</p><p> ds1302_inputbyte(add); </p><p> date = ds1302_outputbyte(); </p><p> ds1302
109、_clk = 1;</p><p> ds1302_rst = 0;</p><p> return(date);</p><p><b> }</b></p><p> void get_1302(uchar realtime[])</p><p><b> {</b&
110、gt;</p><p><b> uchar i;</b></p><p> uchar add=0x81;</p><p> for(i=0;i<7;i++)</p><p><b> {</b></p><p> realtime[i]=read1302(
111、add);</p><p><b> add+=2;</b></p><p><b> }</b></p><p><b> }</b></p><p> void xianshi()</p><p><b> {</b>
112、;</p><p> uchar i,a;</p><p> get_1302(time);</p><p> for(i=0;i<7;i++)</p><p><b> {</b></p><p> time1[i]=time[i]/16*10+time[i]%16;</
113、p><p><b> }</b></p><p> a=time1[2];</p><p><b> if(count)</b></p><p> { </p><p><b> if(a>12)</b></p>
114、;<p><b> { </b></p><p> a = a-12; </p><p> lcd_writecom(0x80+0x40+8);</p><p> lcd_writedata('P'); </p><p><b> }&
115、lt;/b></p><p><b> else{</b></p><p> lcd_writecom(0x80+0x40+8);</p><p> lcd_writedata('A');</p><p><b> } </b></p><p>
116、;<b> }</b></p><p><b> else</b></p><p><b> {</b></p><p> a =time1[2];</p><p> lcd_writecom(0x80+0x40+8);</p><p> l
117、cd_writedata(' ');</p><p><b> } </b></p><p> change(6,time1[0],1);//寫(xiě)秒 </p><p> change(3,time1[1],1);//寫(xiě)分</p><p> change(0,a,1);//寫(xiě)時(shí)<
118、/p><p> change(8,time1[3],0);//寫(xiě)日</p><p> change(5,time1[4],0); //寫(xiě)月</p><p> write_xingqi(time1[5]);</p><p> change(2,time1[6],0); //寫(xiě)年</p><p><b>
119、; }</b></p><p> void write_xingqi(char xingqi)</p><p><b> {</b></p><p><b> char num;</b></p><p> lcd_writecom(0x80+12);</p>&l
120、t;p> for(num=0;num<3;num++)</p><p><b> { </b></p><p> lcd_writedata(table4[xingqi][num]);</p><p><b> }</b></p><p><b> }</b&g
121、t;</p><p> void guding()</p><p><b> {</b></p><p> lcd_writecom(0x80+0x40+2);lcd_writedata(':');lcd_writecom(0x80+0x40+5);</p><p> lcd_writedata(
122、':');lcd_writecom(0x80);</p><p> change(0,20,0);lcd_writecom(0x80+4);</p><p> lcd_writedata('-');lcd_writecom(0x80+7);</p><p> lcd_writedata('-');lcd_writ
123、ecom(0x80+0x40+14);</p><p> lcd_writedata(0xdf);lcd_writecom(0x80+0x40+15);</p><p> lcd_writedata('C');</p><p><b> }</b></p><p> void delay_ds1
124、820(int num) //DS18B20讀寫(xiě)模塊</p><p><b> {</b></p><p> while(num--);</p><p><b> }</b></p><p> void Init_DS18B20()//初始化ds1820</p><
125、p><b> {</b></p><p> uchar x=0;dq=1; delay_ds1820(8); dq=0; delay_ds1820(80); dq=1; </p><p> delay_ds1820(14);x=dq; delay_ds1820(20);</p><p><b>
126、 }</b></p><p> uchar readonechar() //讀一個(gè)字節(jié)</p><p><b> {</b></p><p> uchar i=0;uchar dat=0;</p><p> for (i=8;i>0;i--)</p><p><b
127、> {</b></p><p> dq = 0; dat>>=1;dq = 1; if(dq)dat|=0x80;delay_ds1820(4);</p><p><b> }</b></p><p> return(dat);</p><p><b> }</b&
128、gt;</p><p> void writeonechar(uchar dat) //寫(xiě)一個(gè)字節(jié)</p><p><b> {</b></p><p><b> uchar i;</b></p><p> for (i=8; i>0; i--)</p><p&g
129、t;<b> {</b></p><p> dq = 0;dq = dat&0x01;delay_ds1820(5);dq = 1;dat>>=1;</p><p><b> }</b></p><p><b> }</b></p><p> ui
130、nt readtemp() //讀溫度</p><p><b> {</b></p><p> uchar a=0;uchar b=0;uint t=0;float tt=0; Init_DS18B20();writeonechar(0xCC);</p><p> writeonechar(0x44); Init_DS18B20();
131、writeonechar(0xCC);writeonechar(0xBE);</p><p> a=readonechar();b=readonechar();t=b;t<<=8;t=t|a;tt=t*0.0625;t= tt*10+0.5;</p><p> return(t); </p><p><b> }</b>
132、</p><p> void displayw() //顯示溫度</p><p><b> {</b></p><p> uint num;uint shi,ge,xiaoshu;num=readtemp();shi=num/100;ge=num/10;</p><p> if((ge>=up)||
133、(ge<=dn))</p><p><b> {</b></p><p><b> buzz=0;</b></p><p><b> }</b></p><p><b> else</b></p><p><b&
134、gt; buzz=1;</b></p><p><b> ge=ge%10;</b></p><p> xiaoshu=num%10;</p><p> lcd_writecom(0x80+0x40+10);lcd_writedata(wendu[shi]);lcd_writecom(0x80+0x40+11);</
135、p><p> lcd_writedata(wendu[ge]);lcd_writecom(0x80+0x40+12);</p><p> lcd_writedata(0x2e);lcd_writecom(0x80+0x40+13);</p><p> lcd_writedata(wendu[xiaoshu]);</p><p><b&
136、gt; }</b></p><p> void miaobiao_init()</p><p><b> {</b></p><p> change(2,0,1);lcd_writecom(0x80+0x40+2);</p><p> change(5,0,1);lcd_writecom(0x80+
137、0x40+5);</p><p> change(8,0,1);lcd_writecom(0x80+0x40+8);</p><p> change(11,0,1);lcd_writecom(0x80+0x40+11);</p><p> TMOD=0x01;TH0=(65536-10000)/256;TL0=(65536-10000)%256;ET0=1;
138、EA=1;TR0=0;</p><p><b> }</b></p><p> void set_alarm()</p><p><b> {</b></p><p> write1302(0x8e,0x00); //控制寫(xiě)入</p><p> write1302(
139、0xc0,0x08); //時(shí)</p><p> write1302(0xc2,0x00); //分</p><p> write1302(0xc4,0x00); //秒</p><p> write1302(0x8e,0x80); //禁止寫(xiě)入</p><p><b> }</b></p>&l
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 眾賞文庫(kù)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 數(shù)字時(shí)鐘課程設(shè)計(jì)--數(shù)字時(shí)鐘的設(shè)計(jì)與制作
- 數(shù)字時(shí)鐘課程設(shè)計(jì)報(bào)告
- 數(shù)字時(shí)鐘課程設(shè)計(jì)報(bào)告
- 數(shù)字時(shí)鐘課程設(shè)計(jì)報(bào)告
- 數(shù)字時(shí)鐘課程設(shè)計(jì)報(bào)告
- 數(shù)字時(shí)鐘課程設(shè)計(jì)報(bào)告
- 數(shù)字時(shí)鐘(數(shù)字邏輯)課程設(shè)計(jì)報(bào)告
- 數(shù)字時(shí)鐘(數(shù)字邏輯)課程設(shè)計(jì)報(bào)告
- 電子數(shù)字時(shí)鐘課程設(shè)計(jì)報(bào)告
- 數(shù)字鐘課程設(shè)計(jì)--數(shù)字時(shí)鐘設(shè)計(jì)報(bào)告
- 數(shù)字鐘課程設(shè)計(jì)--數(shù)字時(shí)鐘設(shè)計(jì)報(bào)告
- 數(shù)字時(shí)鐘課程設(shè)計(jì)
- 數(shù)字時(shí)鐘課程設(shè)計(jì)
- 課程設(shè)計(jì)--數(shù)字時(shí)鐘
- 數(shù)字時(shí)鐘課程設(shè)計(jì)
- 數(shù)字時(shí)鐘課程設(shè)計(jì)
- 數(shù)字時(shí)鐘課程設(shè)計(jì)
- 數(shù)字時(shí)鐘課程設(shè)計(jì)
- 數(shù)字時(shí)鐘的設(shè)計(jì)課程設(shè)計(jì)
- 數(shù)字電子時(shí)鐘 課程設(shè)計(jì)報(bào)告
評(píng)論
0/150
提交評(píng)論