毕业设计(论文)基于单片机的智能数字闹钟程序代码_第1页
毕业设计(论文)基于单片机的智能数字闹钟程序代码_第2页
毕业设计(论文)基于单片机的智能数字闹钟程序代码_第3页
毕业设计(论文)基于单片机的智能数字闹钟程序代码_第4页
毕业设计(论文)基于单片机的智能数字闹钟程序代码_第5页
已阅读5页,还剩25页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

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 ( (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. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论