高級單片機開發(fā)技術(shù)與應用_第1頁
高級單片機開發(fā)技術(shù)與應用_第2頁
高級單片機開發(fā)技術(shù)與應用_第3頁
高級單片機開發(fā)技術(shù)與應用_第4頁
高級單片機開發(fā)技術(shù)與應用_第5頁
已閱讀5頁,還剩10頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、單片機課程設計報告系 部: 自動控制系 專 業(yè): 工業(yè)電氣自動化 班 級: 自044 姓 名: 張元元 學 號: 0431437 日 期 : 2006年12月16日河南機電高等??茖W校封面一. 前言:二. 系統(tǒng)總體設計:三. 硬件設計:四. 軟件設計:五. 總結(jié)與展望:高級單片機項目開發(fā)總結(jié)一前言:項目的意義:隨著電子技術(shù)的迅速發(fā)展,特別是隨著大規(guī)模集成電路的出現(xiàn),給人類生活帶來了根本性的改變。尤其是高級單片機開發(fā)技術(shù)的應用產(chǎn)品已經(jīng)走進了千家萬戶。電子萬年歷的出現(xiàn)給人們的生活帶來了諸多方便。該萬年歷具有時間定時,顯示年月日星期的功能。開機后可以設置年月日星期及顯示定時設置時間和鬧鐘是否開啟,若

2、開啟的話一旦時間到則發(fā)出一陣聲響。本系統(tǒng)以單片機的C語言進行軟件設計,高級單片機開發(fā)的萬年歷控制實現(xiàn)了對時間控制的智能化,擺脫了傳統(tǒng)中由人來控制時間長短的不便,實現(xiàn)了在生活中必不可少的設備。萬年歷能控制鬧鈴啟停的時間、能夠循環(huán)顯示家人的姓名、能夠隨意的調(diào)整時間且星期回隨著日期的變化而變化。使用液晶顯示器來顯示現(xiàn)在的時間,顯示格式為“年月日時分秒”,由LED閃動來作秒計數(shù)表示,具有4個按鍵來作功能設置,可以設增加了程序的可讀性和可移植性,為了便于擴展和更改,軟件的設計采用模塊化結(jié)構(gòu),使程序設計的邏輯關(guān)系更加簡潔明了。系統(tǒng)通過點陣式液晶為載體顯示數(shù)據(jù),所以具有人性化的操作和美觀的頁面效果??梢燥@示

3、時間、日期、星期和家人姓名,并有鬧鈴功能。 二系統(tǒng)總體設計:1.總體功能:多功能數(shù)字萬年歷可以顯示時間、年、日期、星期和家人姓名,并有鬧鈴功能。2.主要軟件設計:時鐘是通過單片機的時間中斷的應用,從而得到一定的時基,然后通過一定的循環(huán)得到一秒,最后得到了一分鐘和一個小時,中間有運用了平、閏年的判斷及星期自動處理程序,自動對年月日的轉(zhuǎn)換。鬧鐘的開啟也是通過另一個中斷開啟的,鍵盤的輸入的同樣是通過外部中斷向程序輸入一定量的數(shù)據(jù)的。3.主要硬件設計:系統(tǒng)應用一個單片機的最小系統(tǒng),加上一些外圍電路組成的,例如小鍵盤,蜂鳴器驅(qū)動電路,電源指示燈,還有一個重要的顯示模塊LCD液晶顯示等等。 三硬件設計:1

4、. 最小系統(tǒng):該最小系統(tǒng)的復位電路是上電復位,復位電路有一個10k的電阻,和一個10Uf的電解電容組成,晶振是11.0592m的,加上兩個30pf的電容,最后CPU選擇了AT89C51,它們在現(xiàn)實的應用生活比較普遍,并且價格低,應用環(huán)境也比較廣,優(yōu)點是很多的,它具有算術(shù)運算功能強,軟件編程靈活,自由度大,可用軟件編程實現(xiàn)各種算符合邏輯控制,并且由于其功耗低,體積小,技術(shù)成熟和成本低等優(yōu)點,使其在各個領域應用廣泛,所以選擇這些阻件。2. 顯示部分:顯示部分我選擇了LCD1602液晶,它具有相對成本低,如果用數(shù)碼管的話成本要高點,它還具有輕薄短小,地耗電量,無輻射危險,平面直角顯示以及影像不閃爍等

5、優(yōu)勢可視面積大,畫面效果好,分辨率高,接線簡單,抗干擾強等等的優(yōu)點。這可是數(shù)碼管所不可比擬的,從現(xiàn)在看來,它(液晶顯示)可能成為以后主流的顯示設備。因此選擇了LCD1602液晶顯示,對我們以后掌握其他元件有很大的幫助。下面就是對其的介紹:這里介紹的字符型液晶模塊是一種用5x7點陣圖形來顯示字符的液晶顯示器,根據(jù)顯示的容量可以分為1行16個字、2行16個字、2行20個字等等,這里以常用的2行16個字的1602液晶模塊來介紹它的編程方法。  1602采用標準的16腳接口,其中:第1腳:VSS為地電源,第2腳:VDD接5V正電源,第3腳:V0為液晶顯示器對比度調(diào)整端,接正電源時對

6、比度最弱,接地使用時可以通過一電源時對比度最高,對比度過高時會產(chǎn)生“鬼影”,個10K的電位器調(diào)整對比度,第4腳:RS為寄存器選擇,高電平時選擇數(shù)據(jù)寄存器、低電平時選擇指令寄存器。,第5腳:RW為讀寫信號線,高電平時進行讀操作,低電平時進行寫操作。當RS和RW共同為低電平時可以寫入指令或者顯示地址,當RS為低電平RW為高電平時可以讀忙信號,當RS為高電平RW為低電平時可以寫入數(shù)據(jù)。第6腳:E端為使能端,當E端由高電平跳變成低電平時,液晶模塊執(zhí)行命令。第714腳:D0D7為8位雙向數(shù)據(jù)線。第1516腳:空腳1602液晶模塊內(nèi)部的字符發(fā)生存儲器(CGROM)已經(jīng)存儲了160個不同的點陣字符圖形,如表

7、1所示,這些字符有:阿拉伯數(shù)字、英文字母的大小寫、常用的符號、和日文假名等,每一個字符都有一個固定的代碼,     1602液晶模塊內(nèi)部的控制器共有11條控制指令,如表2所示,    它的讀寫操作、屏幕和光標的操作都是通過指令編程來實現(xiàn)的。(說明:1為高電平、0為低電平) ,指令1:清顯示,指令碼01H,光標復位到地址00H位置,指令2:光標復位,光標返回到地址00H ,指令4:顯示開關(guān)控制。 D:控制整體顯示的開與關(guān),高電平表示開顯示,低電平表示關(guān)顯示 C:控制光標的開與關(guān),高電平表示有光標,低電平表示無光標 B

8、:控制光標是否閃爍,高電平閃爍,低電平不閃爍 ,指令5:光標或顯示移位 S/C:高電平時移動顯示的文字,低電平時移動光標,指令6:功能設置命令 DL:高電平時為4位總線,低電平時為8位總線 N:低電平時為單行顯示,高電平時雙行顯示 F: 低電平時顯示5x7的點陣字符,高電平時顯示5x10的點陣字符 (有些模塊是 DL:高電平時為8位總線,低電平時為4位總線),指令7:字符發(fā)生器RAM地址設置 指令8:DDRAM地址設置 ,指令9:讀忙信號和光標地址 BF:為忙標志位,高電平表示忙,此時模塊不能接收命令或者數(shù)據(jù),如果為低電平表示不忙。 指令10:寫數(shù)據(jù),指令11:讀數(shù)據(jù)。   

9、;  DM-162液晶顯示模塊可以和單片機AT89C51直接接口,電路如圖1所示。 液晶顯示模塊是一個慢顯示器件,所以在執(zhí)行每條指令之前一定要確認模塊的忙標志為低電平,表示不忙,否則此指令失效。要顯示字符時要先輸入顯示字符地址,也就是告訴模塊在哪里顯示字符,表3是DM-162的內(nèi)部顯示地址.M-162的內(nèi)部顯示地址.    比如第二行第一個字符的地址是40H,那么是否直接寫入40H就可以將光標定位在第二行第一個字符的位置呢?這樣不行,因為寫入顯示地址時要求最高位D7恒定為高電平1所以實際寫入的數(shù)據(jù)應該是01000000B(40H)+1

10、0000000B(80H)=11000000B(C0H)3. 驅(qū)動部分:驅(qū)動電壓我們應用了比較容易從電腦USB接口采集的5伏電壓,其他部分沒有什么驅(qū)動芯片。4. 獨立式鍵盤:鍵盤使用,獨立式鍵盤是指直接用I/O 口線加上幾個上拉電阻構(gòu)成的單個按鍵電路。它的配置靈活,軟件結(jié)構(gòu)簡單。因此該萬年歷系統(tǒng)有結(jié)構(gòu)簡單,成本低,用廣的優(yōu)點。5. 原理圖:四軟件設計:#include <reg51.h>#include <intrins.h>unsigned char code dis_week="SUN,MON,TUE,WED,THU,FRI,SAT"unsign

11、ed char code para_month13=0,0,3,3,6,1,4,6,2,5,0,3,5; /星期月參變數(shù)unsigned char data dis_buf116; /lcd 上排顯示緩沖區(qū)unsigned char data dis_buf216; /lcd 下排顯示緩沖區(qū)unsigned char data year,month,date,week;/年、月、日、星期unsigned char data armhour,armmin,armsec;/鬧鐘時、分、秒unsigned char data hour,min,sec,sec100; /時、分、秒、百分之一秒unsi

12、gned char data flag,vkey,skey;/設置狀態(tài)計數(shù)標志、按鍵先前值、按鍵當前值unsigned int s=0;bit alarm; /標識是否啟用鬧鐘,1-啟用,0-關(guān)閉sbit rs = P20; /LCD 數(shù)據(jù)/命令選擇端(H/L)sbit rw = P21; /LCD 讀/寫選擇端(H/L)sbit ep = P22; /LCD 使能控制sbit PRE = P11; /調(diào)整鍵(k3)sbit SET = P12; /調(diào)整鍵(k4)sbit SPK = P13;void delayms(unsigned char ms); /延時程序bit lcd_busy()

13、; /測試LCD 忙碌狀態(tài)程序void lcd_wcmd(char cmd); /寫入指令到LCD 程序void lcd_wdat(char dat); /寫入數(shù)據(jù)到LCD 程序void lcd_pos(char pos); /LCD 數(shù)據(jù)指針位置程序void lcd_init(); /LCD 初始化設定程序void pro_timedate(); /時間日期處理程序void pro_display(); /顯示處理程序void pro_key(); /按鍵處理程序void time_alarm(); /定時鬧鈴功能(鬧鐘)unsigned char scan_key(); /按鍵掃描程序un

14、signed char week_proc(); /星期自動計算與顯示函數(shù)bit leap_year(); /判斷是否為閏年void lcd_sef_chr(); /LCD 自定義字符程序void update_disbuf(unsigned char t1,unsigned char t2,unsigned char dis_h,unsigned char dis_m,unsigned char dis_s);/更新顯示緩沖區(qū)函數(shù)/ 延時程序void delay(unsigned char ms) while(ms-) unsigned char i;for(i = 0; i< 250

15、; i+)_nop_(); /執(zhí)行一條_nop_()指令為一個機器周期_nop_();_nop_();_nop_();/測試LCD 忙碌狀態(tài)bit lcd_busy()bit result;rs = 0;rw = 1;ep = 1;_nop_();_nop_();_nop_();_nop_();result =(bit)(P0&0x80); /LCD 的D0-D7 中,D7=1 為忙碌,D7=0 為空閑ep = 0;return result;/寫入指令到LCDvoid lcd_wcmd(char cmd)while(lcd_busy(); /當lcd_busy為1 時,再次檢測LCD

16、忙碌狀態(tài),lcd-busy 為0 時,開始寫指令rs = 0;rw = 0;ep = 0;_nop_();_nop_();P0 = cmd;_nop_();_nop_();_nop_();_nop_();ep = 1;_nop_();_nop_();_nop_();_nop_();ep = 0;/寫入數(shù)據(jù)到LCDvoid lcd_wdat(char dat)while(lcd_busy(); /當lcd_busy為1 時,再次檢測LCD忙碌狀態(tài),lcd-busy 為0 時,開始寫數(shù)據(jù)rs = 1;rw = 0;ep = 0;P0 = dat;_nop_();_nop_();_nop_();_n

17、op_();ep = 1;_nop_();_nop_();_nop_();_nop_();ep = 0;/LCD 數(shù)據(jù)指針位置程序void lcd_pos(char pos)lcd_wcmd(pos|0x80); /數(shù)據(jù)指針=80+地址碼(00H27H,40H67H)/設定二個自定義字符,(注意:LCD1602 中自定義字符的地址為0x00-0x07,即可定義8個字符)/這里我們設定把一個自定義字符放在0x00 位置(000),另一個放在0x01 位子(001)void lcd_sef_chr() /第一個自定義字符lcd_wcmd(0x40); /"01 000 000"

18、 第1 行地址(D7D6 為地址設定命令形式D5D4D3 為字符存放位置(0-7),D2D1D0 為字符行地址(0-7))lcd_wdat(0x1f); /"XXX 11111" 第1 行數(shù)據(jù)(D7D6D5為XXX,表示為任意數(shù)(一般用000),D4D3D2D1D0 為字符行數(shù)據(jù)(1-點亮,0-熄滅)lcd_wcmd(0x41); /"01 000 001" 第2行地址lcd_wdat(0x11); /"XXX 10001" 第2 行數(shù)據(jù)lcd_wcmd(0x42); /"01 000 010" 第3行地址lcd_

19、wdat(0x15); /"XXX 10101" 第3 行數(shù)據(jù)lcd_wcmd(0x43); /"01 000 011" 第4行地址lcd_wdat(0x11); /"XXX 10001" 第4 行數(shù)據(jù)lcd_wcmd(0x44); /"01 000 100" 第5行地址lcd_wdat(0x1f); /"XXX 11111" 第5 行數(shù)據(jù)lcd_wcmd(0x45); /"01 000 101" 第6行地址lcd_wdat(0x0a); /"XXX 01010&q

20、uot; 第6 行數(shù)據(jù)lcd_wcmd(0x46); /"01 000 110" 第7行地址lcd_wdat(0x1f); /"XXX 11111" 第7 行數(shù)據(jù)lcd_wcmd(0x47); /"01 000 111" 第8行地址lcd_wdat(0x00); /"XXX 00000" 第8 行數(shù)據(jù)/第二個自定義字符lcd_wcmd(0x48); /"01 001 000" 第1行地址lcd_wdat(0x01); /"XXX 00001" 第1 行數(shù)據(jù)lcd_wcmd(0

21、x49); /"01 001 001" 第2行地址lcd_wdat(0x1b); /"XXX 11011" 第2 行數(shù)據(jù)lcd_wcmd(0x4a); /"01 001 010" 第3行地址lcd_wdat(0x1d); /"XXX 11101" 第3 行數(shù)據(jù)lcd_wcmd(0x4b); /"01 001 011" 第4行地址lcd_wdat(0x19); /"XXX 11001" 第4 行數(shù)據(jù)lcd_wcmd(0x4c); /"01 001 100"

22、第5行地址lcd_wdat(0x1d); /"XXX 11101" 第5 行數(shù)據(jù)lcd_wcmd(0x4d); /"01 001 101" 第6行地址lcd_wdat(0x1b); /"XXX 11011" 第6 行數(shù)據(jù)lcd_wcmd(0x4e); /"01 001 110" 第7行地址lcd_wdat(0x01); /"XXX 00001" 第7 行數(shù)據(jù)lcd_wcmd(0x4f); /"01 001 111" 第8行地址lcd_wdat(0x00); /"XX

23、X 00000" 第8 行數(shù)據(jù)/LCD 初始化設定void lcd_init()lcd_wcmd(0x38); /設置LCD 為16X2 顯示,5X7 點陣,八位數(shù)據(jù)借口delay(1);lcd_wcmd(0x0c); /LCD 開顯示及光標設置(光標不閃爍,不顯示"-")delay(1);lcd_wcmd(0x06); /LCD 顯示光標移動設置(光標地址指針加1,整屏顯示不移動)delay(1);lcd_wcmd(0x01); /清除LCD 的顯示內(nèi)容delay(1);/閏年的計算bit leap_year()bit leap;if(year%4=0&

24、&year%100!=0)|year%400=0)/閏年的條件leap=1;elseleap=0;return leap;/星期的自動運算和處理unsigned char week_proc() unsigned char num_leap;unsigned char c;num_leap=year/4-year/100+year/400;/自00 年起到y(tǒng)ear 所經(jīng)歷的閏年數(shù)if( leap_year()&& month<=2 ) /既是閏年且是1 月和2月c=5;elsec=6;week=(year+para_monthmonth+date+num_leap

25、+c)%7;/計算對應的星期return week;/更新顯示緩沖區(qū)void update_disbuf(unsigned char t1,unsigned char t2,unsigned char dis_h,unsigned char dis_m,unsigned char dis_s) dis_buf10=t1; /dis_buf11=0x20; /空格dis_buf12=50; /'2'dis_buf13=48; /'0'dis_buf14=year/10+48;dis_buf15=year%10+48;dis_buf16=0x2d;dis_buf17

26、=month/10+48;dis_buf18=month%10+48;dis_buf19=0x2d; /'-'dis_buf110=date/10+48;dis_buf111=date%10+48;dis_buf112=0x20;dis_buf113=dis_week4*week;dis_buf114=dis_week4*week+1;dis_buf115=dis_week4*week+2;dis_buf20=t20;dis_buf21=t21;dis_buf22=t22;dis_buf23=t23;dis_buf24=t24;dis_buf25=t25;dis_buf26=0

27、x20; /空格if (alarm)dis_buf27=0x01; /alarm=1,顯示鬧鐘啟用標致(第二個自定義字符)elsedis_buf27=0x20; /alarm=0,不顯示鬧鐘啟用標致dis_buf28=dis_h/10+48;dis_buf29=dis_h%10+48;dis_buf210=0x3a; /':'dis_buf211=dis_m/10+48;dis_buf212=dis_m%10+48;dis_buf213=0x3a;dis_buf214=dis_s/10+48;dis_buf215=dis_s%10+48;/時間和日期處理程序void pro_t

28、imedate()sec+;if(sec > 59)sec = 0;min+;if(min>59)min=0;hour+;if(hour>23)hour=0;date+;if (month=1|month=3|month=5|month=7|month=8|month=10|month=12)if (date>31) date=1;month+; /大月31 天if (month=4|month=6|month=9|month=11)if (date>30) date=1;month+; /小月30 天if (month=2)if( leap_year() /閏年

29、的條件if (date>29) date=1;month+; /閏年2 月為29 天elseif (date>28) date=1;month+; /平年2 月為28 天if (month>12) month=1;year+;if (year>99) year=0;week_proc();if (sec=armsec && min=armmin && hour=armhour)if (alarm)TR1=1; /鬧鐘啟用時,鬧鈴時間到,啟動Timer1/顯示處理程序void pro_display() unsigned char i;lc

30、d_pos(0x00);for (i=0;i<=15;i+)lcd_wdat(dis_buf1i);lcd_pos(0x40);for (i=0;i<=15;i+)lcd_wdat(dis_buf2i);/Timer0 中斷處理程序,秒的產(chǎn)生void timer0() interrupt 1TH0=0xdc; /Timer0 置10ms 定時初值dc00H(216=65536D,dc00H=56320D)TL0=0x00; /定時時間=(65536-56320)*(1/11.0592)*12=10ms (f0=11.0592Mhz)sec100+;if(sec100 >= 1

31、00) /1 秒時間(100*10ms=1000ms=1s)sec100 = 0;switch(s)case 0: update_disbuf(0x00," pei ",hour,min,sec); break;/0x00 表示顯示00 位置的自定義字符case 1: update_disbuf(0x00," lu ",hour,min,sec); break;case 2: update_disbuf(0x00," yuan ",hour,min,sec); break;default : break; s+; /每秒輪流顯示我們的

32、姓名pro_timedate();/調(diào)用時間和日期處理程序if (s=3) s=0 ;pro_display(); /調(diào)用顯示處理函數(shù)/按鍵掃描程序unsigned char scan_key()skey=0x00; /給變量vkey置初值skey|=PRE; /讀取PRE 鍵的狀態(tài)skey=skey<<1; /將PRE 鍵的狀態(tài)存于skey 的B1 位skey|=SET; /讀取SET 鍵的狀態(tài),并存于skey 的B0 位return skey; /返回skey的鍵值(即PRE,SET 的狀態(tài))/外部中斷INT0 中斷處理程序void int0() interrupt 0TR0=

33、0; /禁止Timer0IE=0; /禁止中斷l(xiāng)cd_wcmd(0x0e); /顯示光標"_",整個光標不閃爍alarm=1;update_disbuf(0x50,"alarm:",armhour,armmin,armsec); /更新顯示數(shù)據(jù),0x50 表示要顯示"P"pro_display(); /調(diào)用顯示處理程序lcd_pos(0x47); /使光標位于第一個調(diào)整項下flag=0;vkey=0x03;while(flag0x0a)skey = scan_key(); /掃描按鍵狀態(tài)if (skeyvkey) /若skey與vke

34、y相同,跳出循環(huán),相異執(zhí)行循環(huán)體 delay(10); /去按鍵抖動skey = scan_key(); /轉(zhuǎn)回掃描按鍵狀態(tài)if (skeyvkey) /若skey與vkey相同,跳出循環(huán),相異執(zhí)行循環(huán)體 vkey=skey; /將skey的值付給vkeyif (skey=0x01) /PRE 鍵按下 flag+; /調(diào)整標志位加1switch (flag) /將光標置于相應調(diào)整位置case 1: lcd_pos(0x49);break; /光標置小時鬧鈴設置位置case 2: lcd_pos(0x4c);break; /光標置分鐘鬧鈴設置位置case 3: lcd_pos(0x4f);bre

35、ak; /光標置秒時鬧鈴設置位置case 4: update_disbuf(0x50,"time: ",hour,min,sec);pro_display();lcd_pos(0x05);break; /光標置年調(diào)整位置case 5: lcd_pos(0x08);break; /光標置月調(diào)整位置case 6: lcd_pos(0x0b);break; /光標置日調(diào)整位置case 7: lcd_pos(0x49);break; /光標置時調(diào)整位置case 8: lcd_pos(0x4c);break; /光標置分調(diào)整位置case 9: lcd_pos(0x4f);break;

36、 /光標置秒調(diào)整位置default:break;if (skey=0x02) /SET 鍵按下 pro_key(); /轉(zhuǎn)設置按鍵處理程序lcd_wcmd(0x0c); /設置LCD 開顯示及光標不閃爍,不顯示"-"lcd_wcmd(0x01); /清除LCD 的顯示內(nèi)容IE=0x8f; /CPU 開中斷,INT0,INT1,開中斷TR0=1; /Timer0 啟動/主程序,初始化及初值設定void main()lcd_init(); /初始化LCDlcd_sef_chr(); /寫入自定義字符號hour=10;min=0;sec=0; /開機時的時,分,秒顯示armhou

37、r=10;armmin=0;armsec=0; /開機時的時,分,秒鬧鈴初值year= 6; month=12;date=14; /開機時的年,月,日,星期顯示week_proc();alarm=1; /初始開機,啟用鬧鐘IE = 0x8f; /CPU 開中斷,INT0,INT1,Timer0,Timer1 開中斷IP = 0x04; /設置INT0 為中斷最高優(yōu)先級IT0=0;IT1=0; /外部INT0,INT1 設置為電平觸發(fā)方式(注意,觸發(fā)不要選邊沿方式)TMOD = 0x11; /Timer0,Timer1 工作于模式1, 16 位定時方式TH0 = 0xdc;TL0 = 0x00;

38、 /Timer0 置10ms 定時初值TH1 = 0xff;TL1 = 0x00; /Timer1 置初值TR0 = 1; /Timer0 啟動TR1 = 0;while(1);/設置按鍵處理程序void pro_key()switch (flag)case 0:alarm=!alarm; /啟用或關(guān)閉鬧鐘(alarm=1:啟用,alarm=0:關(guān)閉)update_disbuf(0x50,"alarm:",armhour,armmin,armsec); /更新顯示數(shù)據(jù)pro_display(); /調(diào)用顯示處理lcd_pos(0x47);break; /光標回到原調(diào)整位置c

39、ase 1:armhour+;if (armhour>23) armhour=0;update_disbuf(0x50,"alarm:",armhour,armmin,armsec); /更新顯示數(shù)據(jù)pro_display(); /調(diào)用顯示處理lcd_pos(0x49);break; /光標回到原調(diào)整位置case 2:armmin+;if (armmin>59) armmin=0;update_disbuf(0x50,"alarm:",armhour,armmin,armsec);pro_display();lcd_pos(0x4c);bre

40、ak;case 3:armsec+;if (armsec>59) armsec=0;update_disbuf(0x50,"alarm:",armhour,armmin,armsec);pro_display();lcd_pos(0x4f);break;case 4:year+;if (year> 99) year= 0;week_proc(); /星期自動運算update_disbuf(0x50,"time: ",hour,min,sec);pro_display();lcd_pos(0x05);break;case 5:month+;if

41、 (month>12) month=1;week_proc(); /星期自動運算update_disbuf(0x50,"time: ",hour,min,sec);pro_display();lcd_pos(0x08);break;case 6:date+;if (month=1|month=3|month=5|month=7|month=8|month=10|month=12)if (date>31) date=1; /大月31 天if (month=4|month=6|month=9|month=11)if (date>30) date=1; /小月30 天if (month=2)if(leap_year() /閏年的條件if (date>29) date=1; /閏年2 月為29 天elseif (date&

溫馨提示

  • 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. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論