單片機(jī)課程設(shè)計 時鐘跑表_第1頁
單片機(jī)課程設(shè)計 時鐘跑表_第2頁
單片機(jī)課程設(shè)計 時鐘跑表_第3頁
單片機(jī)課程設(shè)計 時鐘跑表_第4頁
單片機(jī)課程設(shè)計 時鐘跑表_第5頁
已閱讀5頁,還剩20頁未讀 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

1、成績課 程 設(shè) 計課程名稱單片機(jī)原理與應(yīng)用課程設(shè)計課題名稱時鐘跑表設(shè)計專 業(yè)班 級學(xué) 號姓 名指導(dǎo)老師林國漢、王迎旭、汪超、李曉秀等2017年5月22日電氣信息學(xué)院課程設(shè)計任務(wù)書課題名稱時鐘跑表設(shè)計姓 名專業(yè)班級學(xué)號指導(dǎo)老師林國漢課程設(shè)計時間2017年5月22日-2017年6月3日一、任務(wù)及要求設(shè)計任務(wù):本課題要求以MCS-51系列單片機(jī)為核心,設(shè)計一個數(shù)字時鐘。(1) 具有時鐘和跑表功能,用LED或者液晶顯示器進(jìn)行顯示;(2) 具有時鐘調(diào)整功能(3) * 具有鬧鐘功能,且鬧鐘時間可調(diào)整。(4) *其它功能設(shè)計要求:(1)確定系統(tǒng)設(shè)計方案;(2)進(jìn)行系統(tǒng)的硬件設(shè)計;(3)完成應(yīng)用程序設(shè)計;(4

2、)應(yīng)用系統(tǒng)的硬件和軟件的調(diào)試。二、進(jìn)度安排第一周:周一:集中布置課程設(shè)計任務(wù)和相關(guān)事宜,查資料確定系統(tǒng)總體方案。周二周三:完成硬件設(shè)計和電路連接周四周日:完成軟件設(shè)計第二周:周一周三:程序調(diào)試周四周五:設(shè)計報告撰寫。周五進(jìn)行答辯和設(shè)計結(jié)果檢查。三、參考資料1、王迎旭等.單片機(jī)原理及及應(yīng)用M. 2版.機(jī)械工業(yè)出版社,20122、胡漢才.單片機(jī)原理及其接口技術(shù)M.3版.清華大學(xué)出版社,2010.3、戴燦金.51單片機(jī)及其C語言程序設(shè)計開發(fā)實例M.清華大學(xué)出版社,2010目 錄第一章 總體方案設(shè)計11.1 設(shè)計方案設(shè)計任務(wù)與要求11.2 設(shè)計思路及系統(tǒng)框架圖1第二章 硬件電路設(shè)計32.1 單片機(jī)AT

3、89C5132.2 矩陣鍵盤電路42.3 蜂鳴器電路42.4 LED數(shù)碼管顯示電路5第三章 軟件設(shè)計63.1 系統(tǒng)主程序63.2 矩陣鍵盤功能程序63.4 定時功能程序8第四章 調(diào)試104.1 系統(tǒng)調(diào)試方法104.2 調(diào)試結(jié)果10第五章 總結(jié)11附錄12附錄A 電路仿真原理圖12附錄B 程序清單13第一章 總體方案設(shè)計1.1設(shè)計任務(wù)與要求設(shè)計任務(wù):本課題要求以MCS-51系列單片機(jī)為核心,設(shè)計一個數(shù)字時鐘。(1) 具有時鐘和跑表功能,用LED或者液晶顯示器進(jìn)行顯示;(2) 具有時鐘調(diào)整功能(3) * 具有鬧鐘功能,且鬧鐘時間可調(diào)整。(4) *其它功能設(shè)計要求:(1) 確定系統(tǒng)設(shè)計方案;(2)

4、進(jìn)行系統(tǒng)的硬件設(shè)計;(3) 完成應(yīng)用程序設(shè)計;(4) 應(yīng)用系統(tǒng)的硬件和軟件的調(diào)試。1.2 設(shè)計思路及系統(tǒng)框架圖我們采用的是AT89C51作為時鐘控制芯片。本次方案主要由時鐘模塊、秒表模塊和鬧鐘模塊組成,其中時鐘模塊包含時鐘顯示功能、時鐘調(diào)整功能和時鐘暫停功能,秒表模塊包含秒表啟動功能、秒表暫停功能、秒表時間存儲功能和秒表回顯功能,鬧鐘模塊包含鬧鐘調(diào)整功能、鬧鐘顯示功能和鬧鐘存儲功能。時鐘通過定時器T0對時、分、秒的數(shù)值進(jìn)行操作,并且秒計算到60的時候,要自己清零并向分進(jìn)1,分計算到60的時候,要自己清零并向時進(jìn)1,時進(jìn)到24的時候,要清零,這樣才能進(jìn)行循環(huán)計時。秒表模塊需要重新顯示一個秒表界面

5、,同時也應(yīng)該需要通過另外一個定時器T1對秒表進(jìn)行操作,從而保證在秒表界面,時鐘顯示模塊的時間還在進(jìn)行。鬧鐘模塊則需要設(shè)計鬧鐘時間,當(dāng)設(shè)計的鬧鐘時間和時鐘的時間相等,蜂鳴器響起,從而達(dá)到鬧鐘功能,此外通過外接24c02存儲芯片,將鬧鐘時間進(jìn)行存儲,且具有斷電存儲功能,當(dāng)系統(tǒng)斷電重新開啟以后,可顯示之前設(shè)定的鬧鐘值。此外還要實現(xiàn)對時間的調(diào)整功能,AT89C51的P1口外接一個矩陣鍵盤,當(dāng)按下K3鍵時,進(jìn)行時鐘調(diào)整,當(dāng)K3按下一次時,是對時間的分鐘進(jìn)行調(diào)整,按下K5鍵數(shù)值加一,按下K6鍵數(shù)值減一。當(dāng)按下K12鍵時,進(jìn)行鬧鐘的調(diào)整,當(dāng)K3按下一次時,是對鬧鐘的分鐘進(jìn)行調(diào)整,按下K5鍵數(shù)值加一,按下K6

6、鍵數(shù)值減一。對于秒表模塊,當(dāng)按下K7鍵時,秒表啟動,當(dāng)按下K8鍵時,顯示秒表當(dāng)前值,但秒表繼續(xù)走動。在秒表計時過程中,每按下一次K9鍵,則對秒表當(dāng)前值進(jìn)行存儲,每按下K10鍵,則對存儲值進(jìn)行一一回顯(矩陣鍵盤按鍵標(biāo)號詳見電路仿真圖)。在單片機(jī)內(nèi)部構(gòu)建兩個模塊:控制模塊、定時模塊,用以實現(xiàn)根據(jù)要求進(jìn)行自動計數(shù)功能。單片機(jī)外部構(gòu)建四個電路:矩陣鍵盤電路、數(shù)碼管顯示電路、蜂鳴器電路、24C02存儲電路,用以實現(xiàn)對單片機(jī)內(nèi)部計數(shù)選擇控制、鬧鐘響鈴、鬧鐘存儲和時間輸出的正確顯示。該電子時鐘是顯示分、時值,秒為數(shù)碼表的DP位閃爍的一種計時裝置本次計時周期設(shè)置為24小時。為了確保時間正常校對,在系統(tǒng)中設(shè)有校

7、對按鈕,用以實現(xiàn)對數(shù)碼管顯示的正確調(diào)整,如圖1.1所示為系統(tǒng)框架圖。圖1.1 系統(tǒng)框架圖第2章 硬件電路設(shè)計2.1 單片機(jī)AT89C51AT89C51是一低電壓、高性能CMOS的8位微處理器,俗稱單片機(jī)。AT89C51是一種帶2K字節(jié)閃存可編程可擦除只讀存儲器的單片機(jī)。單片機(jī)的可擦除只讀存儲器可以反復(fù)擦除1000次。由于將多功能8位CPU和閃爍存儲器組合在單個芯片中,ATMEL的AT89C51是一種高效微控制器。AT89C51單片機(jī)為很多嵌入式控制系統(tǒng)提供了一種靈活性高且價廉的方案,如圖2.1所示為AT89C51的管腳圖。本次電路中用到單片機(jī)的P0、P1、P2、P3口,所示下面對這四個端口進(jìn)行

8、詳細(xì)介紹。 P0口:P0口為一個8位漏級開路雙向I/O口,每腳可吸收8TTL門電流。當(dāng)P0口的管腳第一次寫1時,被定義為高阻輸入。P0能夠用于外部程序數(shù)據(jù)存儲器,它可以被定義為數(shù)據(jù)/地址的低八位。在FIASH編程時,P0 口作為原碼輸入口,當(dāng)FIASH進(jìn)行校驗時,P0輸出原碼,此時P0外部必須接上拉電阻。本次課設(shè)中P0口接的是數(shù)碼管的8個管腳,P00P07依次接數(shù)碼管的ADP管腳。P1口:P1口是一個內(nèi)部提供上拉電阻的8位雙向I/O口,P1口緩沖器能接收輸出4TTL門電流。P1口管腳寫入1后,被內(nèi)部上拉為高,可用作輸入,P1口被外部下拉為低電平時,將輸出電流,這是由于內(nèi)部上拉的緣故。在FLAS

9、H編程和校驗時,P1口作為低八位地址接收。本次P1課設(shè)口接的數(shù)碼管的6個位選端口。 圖2.1 89C51引腳圖P2口:P2口為一個內(nèi)部上拉電阻的8位雙向I/O口,P2口緩沖器可接收,輸出4個TTL門電流,當(dāng)P2口被寫“1”時,其管腳被內(nèi)部上拉電阻拉高,且作為輸入。并因此作為輸入時,P2口的管腳被外部拉低,將輸出電流。這是由于內(nèi)部上拉的緣故。P2口當(dāng)用于外部程序存儲器或16位地址外部數(shù)據(jù)存儲器進(jìn)行存取時,P2口輸出地址的高八位。在給出地址“1”時,它利用內(nèi)部上拉優(yōu)勢,當(dāng)對外部八位地址數(shù)據(jù)存儲器進(jìn)行讀寫時,P2口輸出其特殊功能寄存器的內(nèi)容。P2口在FLASH編程和校驗時接收高八位地址信號和控制信號

10、。本次課設(shè)中P2口的P24P27分別接的是數(shù)碼管的位選W1W4。P3口:本次課設(shè)中P3口的P33和P34分別接的是24C02的SCL和SDA,P37接的是蜂鳴器的一端。2.2 矩陣鍵盤電路在本次設(shè)計中,矩陣鍵盤的S1S4列分別接P17P14引腳,H1H4行分別接的是P13P10引腳。先從P1口的高四位輸出高電平,低四位輸出低電平,從P1口的高四位讀取鍵盤狀態(tài)。再從P1口的高四位輸出低電平,低四位輸出高電平,從P1口的低四位讀取鍵盤狀態(tài)。將兩次讀取結(jié)果組合起來就可以得到當(dāng)前按鍵的特征編碼。使用上述方法我們得到16個鍵的特征編碼。如圖2.2所示為矩陣鍵盤接線圖。 圖2.2 矩陣鍵盤接線圖2.3 蜂

11、鳴器電路 當(dāng)時鐘顯示的時間與鬧鐘存儲的時間相同時,P37引腳輸出低電平,使蜂鳴器接通,發(fā)出滴滴的響聲,響聲持續(xù)時間為20秒,20秒后P37引腳輸出高電平,蜂鳴器關(guān)斷,如圖2.3所示為蜂鳴器接線圖。圖2.3 蜂鳴器接線圖2.4 LED數(shù)碼管顯示電路在本次的設(shè)計中,采用的4位的數(shù)碼管顯示器。數(shù)碼管如果按照段數(shù)分可為七段數(shù)碼管和八段數(shù)碼管,八段數(shù)碼管比七段數(shù)碼管多一個發(fā)光二極管單元,也就是多了一個小數(shù)點的顯示;如果按照發(fā)光二極管單元的連接方式又可以分為共陽極數(shù)碼管和共陰極數(shù)碼管。共陽極的數(shù)碼管是將所有發(fā)光二極管的陽極接到一起后就形成公共陽極(COM)的數(shù)碼管,共陽極數(shù)碼管在應(yīng)用時要將公共極(COM)

12、接到+5V,當(dāng)某一字段發(fā)光二極管的陰極為低電平時,相應(yīng)字段就點亮,當(dāng)某一字段的陰極為高電平時,相應(yīng)字段就不亮。共陰極數(shù)碼管是將所有發(fā)光二極管的陰極接到一起形成公共陰極(COM)的數(shù)碼管,共陰極數(shù)碼管在應(yīng)用時應(yīng)將公共極(COM)接到地線GND上,當(dāng)某一字段發(fā)光二極管的陽極為高電平時,相應(yīng)字段就點亮,當(dāng)某一字段的陽極為低電平時,相應(yīng)字段就不亮。本次課設(shè)的數(shù)碼管選用共陽極八段數(shù)碼管,如圖2.4所示為LED數(shù)碼管接線圖。圖2.4 LED數(shù)碼管接線圖第3章 軟件設(shè)計3.1 系統(tǒng)主程序先對顯示單元和定時器/計數(shù)器初始化,然后重復(fù)調(diào)用數(shù)碼管顯示模塊和按鍵處理模塊,檢測矩陣按鍵值,則轉(zhuǎn)入相應(yīng)的功能程序。主程序

13、流程圖如圖3.1所示。 圖3.1 主程序流程圖 3.2 矩陣鍵盤功能程序 本次設(shè)計的16個矩陣按鍵共用到了12個按鍵,每個按鍵都有相應(yīng)的功能。K1鍵為時鐘啟動鍵,按下K1鍵后數(shù)碼管顯示時鐘。此時按下K3鍵以后進(jìn)行時鐘調(diào)整,按一下進(jìn)行分鐘調(diào)整,按兩下進(jìn)行小時調(diào)整。接著按K5鍵數(shù)值加一,按K6鍵數(shù)值減一。每次調(diào)整分鐘或小時之后都要按K1鍵進(jìn)行確定之后才能重新按K3鍵進(jìn)行調(diào)整。按下K7鍵啟動秒表,接著按下K8鍵,秒表暫停,但此時秒表還在走動,只是顯示按鍵時秒表的當(dāng)前值。在秒表走動過程中,按下K9鍵則存儲當(dāng)前按下值,每按一下,存儲一個值,按下K10鍵后則回顯秒表之前存儲的值,每按一下,回顯一個時間,循

14、環(huán)顯示。K11鍵為鬧鐘顯示功能按鍵,K12為鬧鐘調(diào)整按鍵,按一下進(jìn)行分鐘調(diào)整,按兩下進(jìn)行小時調(diào)整。接著按K5鍵數(shù)值加一,按K6鍵數(shù)值減一。每次調(diào)整分鐘或小時之后都要按K11鍵進(jìn)行確定之后才能重新按K12鍵進(jìn)行調(diào)整。此外K2鍵為時鐘暫停鍵,K4鍵為系統(tǒng)清零鍵。時鐘模塊、秒表模塊和鬧鐘模塊對應(yīng)的矩陣鍵盤功能程序流程圖分別如圖3.3、圖3.4、圖3.5所示。 圖3.3 時鐘模塊矩陣鍵盤功能流程圖 圖3.4 秒表模塊矩陣鍵盤功能流程圖圖3.5 鬧鐘模塊矩陣鍵盤功能流程圖3.3 定時功能程序T0用于時鐘定時,定時時間設(shè)為50ms,定時時間到則中斷,在中斷服務(wù)程序中用一個計數(shù)器對50ms計數(shù),計20次則對

15、秒單元加一。秒單元加到60則對分單元加一,同時秒單元清0;分單元加到60則對時單元加一,同時分單元清0;時單元加到24則對時單元清0,標(biāo)志一天時間計滿。T1用于秒表定時,定時時間設(shè)為20ms,定時時間到則中斷,在中斷服務(wù)程序中用一個計數(shù)器對20ms計數(shù),計5次則對秒表的100毫秒單元加一。100毫秒單元加到10則對秒單元加一,同時100毫秒單元清0;秒單元加到1000則自動清0。時鐘的秒顯示為數(shù)碼管第四位管子的DP值閃爍,每次秒加一DP就會閃爍一次。定時器T0功能流程圖如圖3.4所示,定時器T1功能流程圖如圖3.5所示。 圖3.4 定時器T0功能流程圖 圖3.5 定時器T1功能流程圖第4章 調(diào)

16、試4.1 系統(tǒng)調(diào)試方法 先在電腦上使用Proteus仿真軟件進(jìn)行電路的仿真進(jìn)行仿真,編程使用keil、調(diào)試工具并生成可執(zhí)行文件加載到單片機(jī)中,在Proteus中點擊運行,查看運行結(jié)果是否與預(yù)期要求相符,如果仿真成功,便可以到實驗板上進(jìn)行實物實驗。4.2 調(diào)試結(jié)果圖4.1 時鐘顯示調(diào)試圖 圖4.2 秒表顯示調(diào)試圖 圖4.3 鬧鐘顯示調(diào)試圖第5章 總結(jié)與體會附錄附錄A 電路仿真原理圖 附錄B 程序清單20#include"reg52.h"#include"intrins.h"#ifndef _I2C_H_#define _I2C_H_#define uint

17、 unsigned int#define uchar unsigned charuint xdata resultm100;uint xdata resultf100;uchar code duanxuan= 0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x7f,0x83,0xc6,0xa1,0x86,0x8e ,0xff;/共陽極0f數(shù)碼管編碼uchar code duanxuan1= 0xc0-0x80,0xf9-0x80,0xa4-0x80,0xb0-0x80,0x99-0x80,0x92-0x80,0x82-0x80,0xf8-0

18、x80,0x80-0x80,0x90-0x80,0x7f-0x80,0x83-0x80,0xc6-0x80,0xa1-0x80,0x86-0x80,0x8e-0x80 ,0xff-0x80;uchar code weixuan=0xe0,0xd0,0xb0,0x70;uchar flag3;uchar temp,timer0_shi,timer0_fen,timer0_miao;uchar timer1_fm,nao1,nao2,nao3,nao4;uint timer1_zm;uchar timer1_bw, timer1_sw, timer1_gw; uchar c,z,k; sbit b

19、eep =P37 ;sbit scl=P34;sbit sda=P35;uint t0=0,t1=0;/-定義使用的IO口-/sbit I2C_SCL = P34;sbit I2C_SDA = P35;void I2C_Delay10us();void I2C_Start();void I2C_Stop();uchar I2C_SendByte(uchar dat, uchar ack);uchar I2C_ReadByte();void At24c02Write(unsigned char addr,unsigned char dat);unsigned char At24c02Read(u

20、nsigned char addr);#endifvoid init(void)TMOD=0x11;TCON=0x01; TH0=0x3c; /定時50ms TL0=0x0b0; TH1=0xb1;/定時20ms TL1=0xe0; EA=1; EX0=1; ET0=1; ET1=1;void delay(uint x) /12Mhz延時xmsuint i,j;for(i=x;i>0;i-)for(j=20;j>0;j-);void smg_display(uchar dx,uchar wx)/數(shù)碼管位選P0=duanxuandx;P2=weixuanwx-1;delay(1);

21、void smg_display1(uchar dx,uchar wx)/數(shù)碼管位選P0=duanxuan1dx;P2=weixuanwx-1; delay(1); uchar keyscan()uchar temp_keyvalue,temp1_keyvalue;P1=0xf0;delay(1);temp_keyvalue=P1;if(temp_keyvalue!=0xf0)delay(2); temp_keyvalue=P1; if(temp_keyvalue!=0xf0)temp1_keyvalue=temp_keyvalue&0xf0; P1=0x0f; delay(2);te

22、mp_keyvalue=P1;temp1_keyvalue=temp1_keyvalue|temp_keyvalue; while(temp_keyvalue!=0x0f)P1=0x0f;temp_keyvalue=P1; return temp1_keyvalue;void naozhong(uchar s,uchar f) if(s=timer0_shi&&f=timer0_fen) if(timer0_miao<=20) beep=0; if(timer0_miao>20) beep=1;void disposal(void) uchar hour,secon

23、d,timer1_ffm; uchar zt_bw,zt_sw,zt_gw,zt_fm;uchar nao_fen,nao_shi; uchar nao_gsw,nao_ggw,nao_dsw,nao_dgw; uchar key_progress,timer0_gsw,timer0_ggw,flag1,flag2; uchar timer0_dsw,timer0_dgw,s1,s2,f1,f2; key_progress=keyscan(); switch(key_progress)case 0xbe:/ 時鐘暫停TR0=0;timer0_gsw=timer0_shi/10;timer0_g

24、gw=timer0_shi%10;timer0_dsw=timer0_fen/10;timer0_dgw=timer0_fen%10;smg_display(timer0_gsw,1); smg_display1(timer0_ggw,2); smg_display(timer0_dsw,3);smg_display(timer0_dgw,4); break;case 0xee: /清零TR0=0; TR1=0;timer1_zm=0; timer1_fm=0; timer0_shi=0; timer0_fen=0;timer0_dgw=timer0_fen%10;timer0_gsw=tim

25、er0_shi/10;timer0_ggw=timer0_shi%10;timer0_dsw=timer0_fen/10;timer0_dgw=timer0_fen%10;smg_display(timer0_gsw,1); smg_display1(timer0_ggw,2); smg_display(timer0_dsw,3);smg_display(timer0_dgw,4); break; case 0x7e:/時鐘啟動 keyscan(); temp=P1; nao1=At24c02Read(1); nao1=At24c02Read(1); nao2=At24c02Read(2);

26、nao2=At24c02Read(2); while(temp =0xf0) TR0=1; flag3=1; timer0_gsw=timer0_shi/10; timer0_ggw=timer0_shi%10; timer0_dsw=timer0_fen/10; timer0_dgw=timer0_fen%10; smg_display(timer0_gsw,1); delay(30); smg_display1(timer0_ggw,2); delay(30); smg_display(timer0_dsw,3); delay(30); smg_display(timer0_dgw,4);

27、 delay(30); if(nao1|nao2)!=0) naozhong(nao2,nao1); temp=P1; break; case 0xde: / 時鐘調(diào)整 keyscan(); flag3=0; temp=P1; flag2=0; flag1+; if(flag1>2) flag1=2; while(temp =0xf0) s1=timer0_gsw; s2=timer0_ggw;f1=timer0_dsw;f2=timer0_dgw; hour=s2+s1*10; second=f2+f1*10; smg_display(s1,1);delay(50);smg_displ

28、ay1(s2,2);delay(50);smg_display(f1,3);delay(50); smg_display(f2,4);delay(50);temp=P1; break; case 0x7d: /加時鐘 flag3=0; if(flag1=1|flag2=1) second+; if(flag1=2|flag2=2) hour+; if(hour>=24) hour=0; if(second>=60) second=0;keyscan(); temp=P1; while(temp =0xf0) s1=hour/10; s2=hour%10; f1=second/10;

29、f2=second%10; smg_display(s1,1); delay(50); smg_display(s2,2);delay(50);smg_display(f1,3);delay(50);smg_display(f2,4); delay(50);nao1=f2+f1*10; nao2=s2+s1*10;temp=P1;if(keyscan()=0x7e) timer0_fen=f2+f1*10; timer0_shi=s2+s1*10; flag1=0; flag2=0; if(keyscan()=0xdb) nao_fen=f2+f1*10; nao_shi=s2+s1*10;

30、flag1=0; flag2=0; break; case 0xbd: /減時鐘 flag3=0; if(flag1=2|flag2=2) if(hour<=0) hour=24; hour-; if(flag1=1|flag2=1) if(second<=0) second=60; second-; keyscan(); temp=P1; while(temp =0xf0) s1=hour/10; s2=hour%10; f1=second/10;f2=second%10; smg_display(s1,1); delay(50); smg_display(s2,2);delay

31、(50);smg_display(f1,3);delay(50);smg_display(f2,4); delay(50);temp=P1;nao1=f2+f1*10; nao2=s2+s1*10;if(keyscan()=0x7e) timer0_fen=f2+f1*10; timer0_shi=s2+s1*10; flag1=0; flag2=0; if(keyscan()=0xdb) nao_fen=f2+f1*10; nao_shi=s2+s1*10; flag1=0; flag2=0; break; case 0xeb:/ 鬧鐘調(diào)整 keyscan(); flag3=0; temp=

32、P1; flag2+; flag1=0; if(flag2>2) flag2=2; while(temp =0xf0) nao_gsw=nao2/10; nao_ggw=nao2%10; if(flag2=1)nao_dsw=nao1/10;nao_dgw=nao1%10;nao3=nao_ggw+nao_gsw*10; nao4=nao_dgw+nao_dsw*10;smg_display(nao_gsw,1);delay(50); smg_display1(nao_ggw,2);delay(50); smg_display(nao_dsw,3);delay(50);smg_displ

33、ay(nao_dgw,4); delay(50);temp=P1; break;case 0xdb:/鬧鐘確定 flag3=0; keyscan(); temp=P1; while(temp =0xf0) nao_gsw=nao2/10; nao_ggw=nao2%10;nao_dsw=nao1/10;nao_dgw=nao1%10;nao3=nao_ggw+nao_gsw*10; nao4=nao_dgw+nao_dsw*10;smg_display(nao_gsw,1);delay(20); smg_display1(nao_ggw,2);delay(20); smg_display(na

34、o_dsw,3);delay(20);smg_display(nao_dgw,4); delay(20);temp=P1;At24c02Write(1,nao1);At24c02Write(1,nao1);At24c02Write(2,nao2);At24c02Write(2,nao2);break; case 0xdd:/跑表啟動 keyscan(); flag3=0; temp=P1; while(temp =0xf0) TR1=1; timer1_bw=timer1_zm/100; timer1_sw=(timer1_zm/10)%10; timer1_gw=timer1_zm%100%

35、10; timer1_ffm=timer1_fm; smg_display(timer1_bw,1); delay(10); smg_display(timer1_sw,2); delay(10); smg_display1(timer1_gw,3); delay(10); smg_display(timer1_fm,4); delay(10); temp=P1; keyscan();if(keyscan()=0xed) zt_bw=timer1_bw; zt_sw=timer1_sw; zt_gw=timer1_gw; zt_fm=timer1_fm; break; case 0xed:/

36、跑表暫停 flag3=0; smg_display(zt_bw,1); delay(20); smg_display(zt_sw,2); delay(20); smg_display1(zt_gw,3); delay(20); smg_display(zt_fm,4); delay(20); break;case 0x7b:/ 跑表計次數(shù) k+; c=k;z=k;flag3=0; keyscan(); temp=P1;resultfk-1=timer1_fm; resultmk-1=timer1_bw*100+timer1_sw*10+timer1_gw; while(temp =0xf0)

37、TR1=1; timer1_bw=timer1_zm/100; timer1_sw=(timer1_zm/10)%10; timer1_gw=timer1_zm%100%10; timer1_ffm=timer1_fm; smg_display(timer1_bw,1); delay(5); smg_display(timer1_sw,2); delay(5); smg_display1(timer1_gw,3); delay(5); smg_display(timer1_fm,4); delay(5); temp=P1; keyscan();if(keyscan()=0xed) zt_bw=

38、timer1_bw; zt_sw=timer1_sw; zt_gw=timer1_gw; zt_fm=timer1_fm; keyscan();if(keyscan()=0xbb) k=0; break;case 0xbb:/ 跑表回顯 flag3=0; k=0;c-;timer1_ffm=resultfc;timer1_bw=resultmc/100; timer1_sw=(resultmc/10)%10; timer1_gw=resultmc%100%10; keyscan(); temp=P1; while(temp =0xf0) if(c=0) c=z; smg_display(tim

39、er1_bw,1); delay(30); smg_display(timer1_sw,2); delay(30); smg_display1(timer1_gw,3); delay(30); smg_display(timer1_ffm,4); delay(30); temp=P1; break;void main()init();while(1) keyscan(); disposal(); void timer0() interrupt 1 TH0=0x3c; TL0=0x0b0; t0+; if(t0=20) t0=0; timer0_miao+; if(flag3=1) smg_di

40、splay(10,4); delay(25); if(timer0_miao=60) timer0_miao=0; timer0_fen+; if(timer0_fen=60) timer0_fen=0; timer0_shi+; if(timer0_shi=24) timer0_shi=0; void timer1() interrupt 3 TH1=0xb1;/定時20ms TL1=0xe0; t1+; if(t1=5) t1=0; timer1_fm+; if(timer1_fm=10) timer1_fm=0; timer1_zm+; if(timer1_zm>=1000) ti

41、mer1_zm=0; void I2C_Delay10us()uchar a, b;for(b=1; b>0; b-)for(a=2; a>0; a-);void I2C_Start()I2C_SDA = 1;I2C_Delay10us();I2C_SCL = 1;I2C_Delay10us();/建立時間是I2C_SDA保持時間>4.7usI2C_SDA = 0;I2C_Delay10us();/保持時間是>4usI2C_SCL = 0;I2C_Delay10us();void I2C_Stop()I2C_SDA = 0;I2C_Delay10us();I2C_SCL = 1;I2C_Delay10us();/建立時間大于4.7usI2C_SDA = 1;I2

溫馨提示

  • 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. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論