毕业设计论文基于单片机的智能数字闹钟程序代码.doc

上传人:sccc 文档编号:4872261 上传时间:2023-05-20 格式:DOC 页数:30 大小:136.02KB
返回 下载 相关 举报
毕业设计论文基于单片机的智能数字闹钟程序代码.doc_第1页
第1页 / 共30页
毕业设计论文基于单片机的智能数字闹钟程序代码.doc_第2页
第2页 / 共30页
毕业设计论文基于单片机的智能数字闹钟程序代码.doc_第3页
第3页 / 共30页
毕业设计论文基于单片机的智能数字闹钟程序代码.doc_第4页
第4页 / 共30页
毕业设计论文基于单片机的智能数字闹钟程序代码.doc_第5页
第5页 / 共30页
点击查看更多>>
资源描述

《毕业设计论文基于单片机的智能数字闹钟程序代码.doc》由会员分享,可在线阅读,更多相关《毕业设计论文基于单片机的智能数字闹钟程序代码.doc(30页珍藏版)》请在三一办公上搜索。

1、姚辉虎的毕业设计-基于单片机的智能数字闹钟程序代码程序代码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、/函数声明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);/读取秒数据mm = read_clock(0x83);/读取分钟数据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) /根据选择调整的相应项目加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某地址上的数值转换成10进制赋给item item=(read_clock(address+1)/16)*10 + (read_clock(address+1)%16; if(KEY_Y = 0) item+;/数加 1 if(KEY_N= 0) item-;/数减 1 if(itemmax) item=mini;/查看数值有效范围 if(itemmini) item=max; write_clock(0x8e,0x00);/允许写

7、操作 write_clock(address,(item/10)*16+item%10);/转换成16进制写入1302 write_clock(0x8e,0x80);/写保护,禁止写操作/ updata ();/刷新数据/ lcm_w_mm();/刷新 分 */void DelayM(unsigned int a)/延时函数 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中填写 分钟 数据void lcm_w_mm(void) unsigned char str2;str2=0;if(read_clock(0x83) != mm)mm = read_clock(0x83);/*if( w = 0)days(); /节日显示updata ();/刷新数据*/*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中填写 秒 数据void lcm_w_ss(void)unsigned char str2 ;str2=0;/if(read_clock(0x81) != ss)/判断是否需要更新/*ss = read_clock(0x81);/更新数据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();/*/刷新数据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(校园打铃系统); 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);/*-*/*/不同按键实现不同功能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;/长按系统初始化; case 10: lcdreset();lcdwc(0x80+FIRST_ADDR); hzkdis(1.设置时间); lcdwc(0x90+FIR

16、ST_ADDR); hzkdis(2.设置闹时);lcdwc(0x88+FIRST_ADDR); hzkdis(3.系统初始化);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就初始化系统 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; /字节低4位的BCD码放入sel lcdwc(0x9c+FIRST_ADDR);/写入指定区域(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) /修改数据标志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) /修改数据标志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 ( (a10) & (key_ok=0)key_ok=1;y=(y/16)*16+a; lcdwc(x+FIRST_ADDR);str0=y/16+0x30;str1=y%16+0x30;hzkdis2(str);return(y);if (a=0x0b) return(y);if(a=10) return(y);if(a=13)goto xs_fl0;if(a=14) lcdwc(x+FIRST_ADDR);str0=y/16+0x30;str1=y%16+0x30;hzkdis2(str); return(y);void xs_pls()clr_xs();lcdwc(0x91+FIRST_ADDR); hzkdis(设置已经保存);delay(10000);void set_clock() w

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 建筑/施工/环境 > 农业报告


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号