畢業(yè)設計-基于單片機的智能數(shù)字鬧鐘程序代碼_第1頁
畢業(yè)設計-基于單片機的智能數(shù)字鬧鐘程序代碼_第2頁
畢業(yè)設計-基于單片機的智能數(shù)字鬧鐘程序代碼_第3頁
畢業(yè)設計-基于單片機的智能數(shù)字鬧鐘程序代碼_第4頁
畢業(yè)設計-基于單片機的智能數(shù)字鬧鐘程序代碼_第5頁
已閱讀5頁,還剩25頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、姚輝虎的畢業(yè)設計-基于單片機的智能數(shù)字鬧鐘程序代碼程序代碼main.c#include #include #include unsigned char clock_data4;sbit speaker = P24;/ 蜂鳴器sbit bell = P22; /鈴響bit bell_on=0;bit key_ok=0;unsigned char bell_time=0x20;uchar week_clock_set;#define FIRST_ADDR 0/定義全局變量unsigned char yy,mo,dd,xq,hh,mm,ss;/ 定義時間映射全局變量(專用寄存器)uchar j;/*

2、/函數(shù)聲明extern unsigned char read_clock(unsigned char ord);extern void lcdwc(unsigned char cmdcode);extern void hzkdis(unsigned char code *s);extern void hzkdis2(unsigned char *s);extern char Read_One_Byte(unsigned char addr);extern void Write_One_Byte(unsigned char addr,unsigned char thedata);void lcm

3、_w_ss(void);extern void lcdreset(void);extern void Init_DS18B20(void);extern char gotkey();extern void Init_1302(void);extern unsigned int ReadTemperature(void);extern void write_clock(unsigned char ord, unsigned char dd);extern void disp_hz(uchar x,uchar *c_str,uchar w);extern void delay(unsigned i

4、nt t);void new_time(void);void read_clockss(x);/void lcm_w_temp(void) ;void read_clockS(void)ss = read_clock(0x81);/讀取秒數(shù)據(jù)mm = read_clock(0x83);/讀取分鐘數(shù)據(jù)hh = read_clock(0x85);/小時dd = read_clock(0x87);/日mo = read_clock(0x89);/月xq = read_clock(0x8b);/星期yy = read_clock(0x8d);/年/*void Set_time(unsigned cha

5、r sel) /根據(jù)選擇調(diào)整的相應項目加1并寫入DS1302 signed char address,item; signed char max,mini; if(sel=7) address=0x80; max=0;mini=0; /秒 if(sel=6) address=0x82; max=59;mini=0; /分鐘 if(sel=5) address=0x84; max=23;mini=0; /小時 if(sel=3) address=0x86; max=31;mini=1; /日 if(sel=2) address=0x88; max=12;mini=1; /月 if(sel=1)

6、address=0x8c; max=99; mini=0; /年 if(sel=4) address=0x8a; max=7;mini=1; /星期 /讀取1302某地址上的數(shù)值轉(zhuǎn)換成10進制賦給item item=(read_clock(address+1)/16)*10 + (read_clock(address+1)%16; if(KEY_Y = 0) item+;/數(shù)加 1 if(KEY_N= 0) item-;/數(shù)減 1 if(itemmax) item=mini;/查看數(shù)值有效范圍 if(itemmini) item=max; write_clock(0x8e,0x00);/允許寫

7、操作 write_clock(address,(item/10)*16+item%10);/轉(zhuǎn)換成16進制寫入1302 write_clock(0x8e,0x80);/寫保護,禁止寫操作/ updata ();/刷新數(shù)據(jù)/ lcm_w_mm();/刷新 分 */void DelayM(unsigned int a)/延時函數(shù) 1MS/次unsigned char i;while( -a != 0)for(i = 0; i 0x07 & hh 0x22 /*& w = 0*/)/beep = 0; led_r = 0;DelayM(100);/beep = 1; led_r = 1;lcdwc(

8、0x88+FIRST_ADDR);str0=hh/16+0x30;str1=hh%16+0x30;hzkdis2(str);/*/向LCM中填寫 分鐘 數(shù)據(jù)void lcm_w_mm(void) unsigned char str2;str2=0;if(read_clock(0x83) != mm)mm = read_clock(0x83);/*if( w = 0)days(); /節(jié)日顯示updata ();/刷新數(shù)據(jù)*/*lcm_w_test(0,0x89);lcm_w_test(1,0x3a); /:lcm_w_test(1,(mm/16)+0x30);lcm_w_test(1,mm%1

9、6+0x30);lcm_w_test(1,0x2e); /.*/lcdwc(0x89+FIRST_ADDR);hzkdis(:);str0=(mm/16)+0x30;str1=mm%16+0x30;hzkdis2(str);hzkdis(:);/*/向LCM中填寫 秒 數(shù)據(jù)void lcm_w_ss(void)unsigned char str2 ;str2=0;/if(read_clock(0x81) != ss)/判斷是否需要更新/*ss = read_clock(0x81);/更新數(shù)據(jù)lcm_w_test(0,0x8b);/秒值在LCM上的寫入位置lcm_w_test(1,(ss/16)

10、+0x30);/寫十位lcm_w_test(1,ss%16+0x30);/寫個位led_b = led_b;/背光閃爍lcm_w_mm();/刷新 分 */ /lcm_w_mm(); ss=read_clock(0x81);lcdwc(0x8b+FIRST_ADDR);str0=ss/16+0x30;str1=ss%16+0x30;hzkdis2(str);lcm_w_temp(void) /unsigned char str14; uchar str2; unsigned int i=0; unsigned char a=0,b=0,c=0; uchar temp=28;i=ReadTemp

11、erature();/讀溫度并送顯/*a=i/100;str13=a+0x30;str12=0x2e;str11=(i/10-a*10)+0x30;str10=(i-a*100-b*10)+0x30;/lcm_w_test(1,c+0x30); /小位1位/lcm_w_word();/度C/str10=(i/100)%10+0x30;/str11=(i%100)/10)+0x30;/str12=(i%10)+0x30;*/ str0=temp/10+0x30; str1=temp%10+0x30; lcdwc(0x8e+FIRST_ADDR);hzkdis2(str);lcdwc(0x8f+F

12、IRST_ADDR); hzkdis();/*/刷新數(shù)據(jù)void updata (void)lcm_w_hh();/刷新 小時lcm_w_dd();/刷新 日lcm_w_xq();/更新星期值lcm_w_mo();/刷新 月lcm_w_yy();/刷新 年 lcm_w_mm();lcm_w_ss();lcm_w_temp();/初始化界面void restlib() lcdwc(0x80+FIRST_ADDR); hzkdis(校園打鈴系統(tǒng)); lcdwc(0x90+FIRST_ADDR); hzkdis(初始化.); lcdwc(0x88+FIRST_ADDR); hzkdis(姚輝虎);

13、lcdwc(0x98+FIRST_ADDR); hzkdis();/*void rj1lib()unsigned char str2;lcdwc(0x80+FIRST_ADDR); str0=yy/10+0x30;str1=yy%10+0x30;hzkdis(20);hzkdis2(str);hzkdis(年); lcdwc(0x90+FIRST_ADDR) ;if(mo/16 != 0)str0=mo/16+0x30;/十位消隱elsestr0=0x20 ;/同上str1=mo%16+0x30;hzkdis2(str);lcdwc(0x91+FIRST_ADDR);hzkdis(月); lc

14、dwc(0x92+FIRST_ADDR);if(dd/16 != 0)str0=(dd/16)+0x30;/十位消隱elsestr0=0x20;/同上str1=dd%16+0x30;hzkdis2(str);lcdwc(0x93+FIRST_ADDR);hzkdis(日);lcdwc(0x88+FIRST_ADDR); str0=hh/16+0x30;str1=hh%16+0x30;hzkdis2(str);lcdwc(0x89+FIRST_ADDR);hzkdis(:);str0=(mm/16)+0x30;str1=mm%16+0x30;hzkdis2(str); lcdwc(0x81+FI

15、RST_ADDR);/*-*/*/不同按鍵實現(xiàn)不同功能void gongneng(int gotkeys) int gn,gn10,gn0 ; gn=gotkeys; switch(gn) case 0: DelayM(2000);gn0=gotkey();if(gn0=0)lcdreset();restlib();Init_DS18B20();Init_1302();DelayM(3000); cxjmlib();break;/長按系統(tǒng)初始化; case 10: lcdreset();lcdwc(0x80+FIRST_ADDR); hzkdis(1.設置時間); lcdwc(0x90+FIR

16、ST_ADDR); hzkdis(2.設置鬧時);lcdwc(0x88+FIRST_ADDR); hzkdis(3.系統(tǒng)初始化);lcdwc(0x79+FIRST_ADDR); hzkdis();tt:gn10=gotkey(); /if (gn10!=16) goto tt;tt1:gn10=gotkey(); /if (gn10=16) goto tt;switch(gn10)case 1:lcdreset(); read_clockS();rj1lib();tt2:gn10=gotkey();if (gn10!=16) goto tt2; tt3:gn10=gotkey();if (gn

17、10=16) goto tt2;switch(gn10)case 0: break;case 1: break;case 2: break;case 3: break;case 4: break;case 5: break;case 6: break;case 7: break;case 8: break;case 9: break;default:goto tt3;break; case 2: lcdreset();read_clockS();naozhonglib();tt4:gn10=gotkey();if (gn10!=16) goto tt4 ;gn10=gotkey();if (g

18、n10=16) goto tt4; break;case 3: lcdreset();rj3lib();tt6:gn10=gotkey();if (gn10!=16) goto tt6;gn10=gotkey();if (gn10=16) goto tt6;if(gn10=10) /鍵值為10就初始化系統(tǒng) lcdreset();restlib();Init_DS18B20();Init_1302();DelayM(3000); cxjmlib(); if(gn10=11) / 鍵值為11取消初始化,返回程序主界面; lcdreset();cxjmlib(); break;tt8:gn10=go

19、tkey();if (gn10!=16) goto tt8 ;gn10=gotkey();if (gn10=16) goto tt8; break; default: goto tt1; */void read_clockss(x)hh=Read_One_Byte(x*4+0x20);mm=Read_One_Byte(x*4+0x21);ss=Read_One_Byte(x*4+0x22);week_clock_set=Read_One_Byte(x*4+0x23);void Write_clockss(x)Write_One_Byte(x*4+0x20,hh);Write_One_Byte(

20、x*4+0x21,mm);Write_One_Byte(x*4+0x22,ss);Write_One_Byte(x*4+0x23,week_clock_set);/* bit cmp_clock() /每分鐘檢測一次unsigned char a1;for (a1=0;a132;a1+)read_clockss(a1);/acc0 = a1*4+0x20 .acc1 .acc2 .acc3if (hh=clock_data0) & (mm=clock_data1) return 1; return 0;*/unsigned char yy,mo,dd,xq,hh,mm,ss;/ 定義時間映射全

21、局變量(專用寄存器)void clr_xs()lcdwc(0x80+FIRST_ADDR); hzkdis(); lcdwc(0x90+FIRST_ADDR); hzkdis();lcdwc(0x88+FIRST_ADDR); hzkdis();lcdwc(0x98+FIRST_ADDR); hzkdis();void disp_set_clock() unsigned char sel;uchar str2;str2=0;lcdwc(0x91+FIRST_ADDR);str0=yy/16+0x30;str1=yy%16+0x30;hzkdis2(str);hzkdis2(年);str0=mo

22、/16+0x30;str1=mo%16+0x30;hzkdis2(str);hzkdis2(月);str0=dd/16+0x30;str1=dd%16+0x30;hzkdis2(str);hzkdis2(日);lcdwc(0x89+FIRST_ADDR);str0=hh/16+0x30;str1=hh%16+0x30;hzkdis2(str);hzkdis2(時);str0=mm/16+0x30;str1=mm%16+0x30;hzkdis2(str);hzkdis2(分);str0=ss/16+0x30;str1=ss%16+0x30;hzkdis2(str);hzkdis2(秒);/lcd

23、wc(0x98+FIRST_ADDR); sel = (read_clock(0x8b)%16; /字節(jié)低4位的BCD碼放入sel lcdwc(0x9c+FIRST_ADDR);/寫入指定區(qū)域(97H 第二行第8個字) if(sel=7) hzkdis(07); / if(sel=6) hzkdis(06); / if(sel=5) hzkdis(05); / if(sel=4) hzkdis(04); / if(sel=3) hzkdis(03); / if(sel=2) hzkdis(02); / if(sel=1) hzkdis(01); /星期一 lcdwc(0x9a+FIRST_AD

24、DR); hzkdis(星期) ;void disp_clock_set()uchar str2;str2=0;lcdwc(0x89+FIRST_ADDR);str0=hh/16+0x30;str1=hh%16+0x30;hzkdis2(str);hzkdis2(時);str0=mm/16+0x30;str1=mm%16+0x30;hzkdis2(str);hzkdis2(分);/*str0=ss/16+0x30;str1=ss%16+0x30;hzkdis2(str);hzkdis2(秒); */week_clock_set/lcdwc(0x98+FIRST_ADDR);/hzkdis2(

25、);/*bit set_xs_1_flicker(uchar x,bit y) /修改數(shù)據(jù)標志uchar a,str2;str1=0x1e;bit flicker=0;key_ok=1;while (gotkey()!=16) xs_fl0:while(1)for (a=0;a20;a+) /delay(500);if (gotkey()!=16) goto xs_fl1;key_ok=0;xs_fl1:lcdwc(x+FIRST_ADDR);if (flicker) hzkdis2(_); else str0=0x31;str1=0x1e;hzkdis2(str);flicker = fli

26、cker;a=gotkey();if ( (a10) & (key_ok=0)key_ok=1; y=a*16+(y%16); goto xs_lf2;if (a=0x0b) return(y);if(a=10)return(y);if(a=13) lcdwc(x+FIRST_ADDR);str0=y/16+0x30;str1=y%16+0x30;hzkdis2(str); return(y);if(a=14) goto xs_lf2; */uchar set_xs_flicker(uchar x,y) /修改數(shù)據(jù)標志uchar a,str2;bit flicker=0;key_ok=1;wh

27、ile (gotkey()!=16) xs_fl0:while(1)for (a=0;a20;a+)delay(500);if (gotkey()!=16) goto xs_fl1;key_ok=0;xs_fl1:lcdwc(x+FIRST_ADDR);if (flicker) hzkdis2(_); else str0=y/16+0x30;str1=y%16+0x30;hzkdis2(str);flicker = flicker;a=gotkey();if ( (a10) & (key_ok=0)key_ok=1; y=a*16+(y%16); goto xs_lf2;if (a=0x0b)

28、 return(y);if(a=10)return(y);if(a=13) lcdwc(x+FIRST_ADDR);str0=y/16+0x30;str1=y%16+0x30;hzkdis2(str); return(y);if(a=14) goto xs_lf2;xs_lf2: while(1)for (a=0;a20;a+)delay(500);if (gotkey()!=16) goto xs_fl3;key_ok=0;xs_fl3:lcdwc(x+FIRST_ADDR);if (flicker)str0=y/16+0x30;str1=0x5f;hzkdis2(str);else str

29、0=y/16+0x30;str1=y%16+0x30;hzkdis2(str);flicker = flicker;a=gotkey();if ( (a32) x=1; while(1)lcdreset();read_clockss(x);/改為要修改的鬧鐘clr_xs();lcdwc(0x82+FIRST_ADDR); hzkdis(鬧鐘設置);lcdwc(0x87+FIRST_ADDR);str0=x/10+0x30;str1=x%10+0x30;hzkdis2(str);disp_clock_set();delay(100);hh=set_xs_flicker(0x89,hh);if(g

30、otkey()=11)read_clockS();return;if(gotkey()=10)Write_clockss(x);xs_pls();return;if(gotkey()=13) Write_clockss(x);x=x-1; goto clkset1;if(gotkey()=14) Write_clockss(x);x=x+1; goto clkset1;mm=set_xs_flicker(0x8b,mm);set1:if(gotkey()=11)read_clockS();return;if(gotkey()=10)Write_clockss(x);xs_pls();retur

31、n;if(gotkey()=13)Write_clockss(x); x=x-1;goto clkset1;if(gotkey()=14) Write_clockss(x);x=x+1; goto clkset1;goto set1;/*ss=set_xs_flicker(0x8d,ss);set2:if(gotkey()=11)read_clockS();return;if(gotkey()=10)Write_clockss(x);xs_pls();return;if(gotkey()=13) Write_clockss(x); x=x-1;goto clkset1;if(gotkey()=14)Write_clockss(x); x=x+1;goto clkset1;goto set2;*/*-*/*/*/main()uchar i; lcdreset(); Init_DS18B20();read_clockS(); while(1) updata(); /主屏幕時間刷新if (ss=0)/鬧鐘打鈴判斷for (i=1;iss)if(bell_on=1)bell=0;speaker=speaker;delay(5000);elsebell=1;speaker=1;bell_on=0;delay(500);i=

溫馨提示

  • 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

提交評論