您好,欢迎访问三七文档
当前位置:首页 > 临时分类 > 毕业设计--基于单片机的智能数字闹钟程序代码
姚辉虎的毕业设计--基于单片机的智能数字闹钟程序代码程序代码main.c#includereg51.h#includeintrins.h#includeyf.hunsignedcharclock_data[4];sbitspeaker=P2^4;//蜂鸣器sbitbell=P2^2;//铃响bitbell_on=0;bitkey_ok=0;unsignedcharbell_time=0x20;ucharweek_clock_set;#defineFIRST_ADDR0//定义全局变量unsignedcharyy,mo,dd,xq,hh,mm,ss;//定义时间映射全局变量(专用寄存器)ucharj;/****************************************************************************///函数声明externunsignedcharread_clock(unsignedcharord);externvoidlcdwc(unsignedcharcmdcode);externvoidhzkdis(unsignedcharcode*s);externvoidhzkdis2(unsignedchar*s);externcharRead_One_Byte(unsignedcharaddr);externvoidWrite_One_Byte(unsignedcharaddr,unsignedcharthedata);voidlcm_w_ss(void);externvoidlcdreset(void);externvoidInit_DS18B20(void);externchargotkey();externvoidInit_1302(void);externunsignedintReadTemperature(void);externvoidwrite_clock(unsignedcharord,unsignedchardd);externvoiddisp_hz(ucharx,uchar*c_str,ucharw);externvoiddelay(unsignedintt);voidnew_time(void);voidread_clockss(x);//voidlcm_w_temp(void);voidread_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);//年}/*voidSet_time(unsignedcharsel){//根据选择调整的相应项目加1并写入DS1302signedcharaddress,item;signedcharmax,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){address=0x8c;max=99;mini=0;}//年if(sel==4){address=0x8a;max=7;mini=1;}//星期//读取1302某地址上的数值转换成10进制赋给itemitem=((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);//允许写操作write_clock(address,(item/10)*16+item%10);//转换成16进制写入1302write_clock(0x8e,0x80);//写保护,禁止写操作//updata();//刷新数据//lcm_w_mm();//刷新分}*/voidDelayM(unsignedinta){//延时函数1MS/次unsignedchari;while(--a!=0){for(i=0;i125;i++);//一个;表示空语句,CPU空转。}//i从0加到125,CPU大概就耗时1毫秒}/*****************************************************************************///向LCM中填写年数据voidlcm_w_yy(void){//if(read_clock(0x8d)!=yy){unsignedcharstr[2];str[2]=0;yy=read_clock(0x8d);lcdwc(0x83+FIRST_ADDR);hzkdis(20);lcdwc(0x84+FIRST_ADDR);str[0]=(yy/16+0x30);str[1]=(yy%16+0x30);hzkdis2(str);hzkdis2(年);}/*****************************************************************************///向LCM中填写月数据voidlcm_w_mo(void){//if(read_clock(0x89)!=mo){unsignedcharstr[2];str[2]=0;//lcm_w_test(0,0x90);lcdwc(0x90+FIRST_ADDR);if(mo/16!=0){str[0]=mo/16+0x30;}//十位消隐else{str[0]=0x20;}//同上str[1]=mo%16+0x30;hzkdis2(str);lcdwc(0x91+FIRST_ADDR);hzkdis(月);}/*****************************************************************************///星期处理并送入LCM的指定区域voidlcm_w_xq(void){unsignedcharsel;unsignedcharstr[2];str[2]=0;//if(read_clock(0x8b)!=xq){//xq=read_clock(0x8b);sel=(read_clock(0x8b))%16;//字节低4位的BCD码放入sellcdwc(0x97+FIRST_ADDR);//写入指定区域(97H第二行第8个字)if(sel==7){hzkdis(日);}//if(sel==6){hzkdis(六);}//if(sel==5){hzkdis(五);}//if(sel==4){hzkdis(四);}//if(sel==3){str[0]=0xc8;str[1]=0xfd;hzkdis2(str)/*lcm_w_test(1,0xc8);lcm_w_test(1,0xfd)*/;}//此指令等于lcm_w_word(三);因为“三”的内码失效。if(sel==2){hzkdis(二);}//if(sel==1){hzkdis(一);}//星期一lcdwc(0x95+FIRST_ADDR);hzkdis(星期);//}}/*****************************************************************************///向LCM中填写日数据voidlcm_w_dd(void){unsignedcharstr[2];str[2]=0;//if(read_clock(0x87)!=dd){dd=read_clock(0x87);lcdwc(0x92+FIRST_ADDR);if(dd/16!=0){str[0]=(dd/16)+0x30;}//十位消隐else{str[0]=0x20;}//同上str[1]=dd%16+0x30;hzkdis2(str);lcdwc(0x93+FIRST_ADDR);hzkdis(日);}//}/*****************************************************************************///向LCM中填写小时数据voidlcm_w_hh(void){unsignedcharstr[2];str[2]=0;if(read_clock(0x85)!=hh){//hh=read_clock(0x85);if(hh0x07&&hh0x22/*&&w==0*/){//beep=0;led_r=0;DelayM(100);//beep=1;led_r=1;}}lcdwc(0x88+FIRST_ADDR);str[0]=hh/16+0x30;str[1]=hh%16+0x30;hzkdis2(str);}//}/*****************************************************************************///向LCM中填写分钟数据voidlcm_w_mm(void){unsignedcharstr[2];str[2]=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%16+0x30);lcm_w_test(1,0x2e);//.*/lcdwc(0x89+FIRST_ADDR);hzkdis(:);str[0]=(mm/16)+0x30;str[1]=mm%16+0x30;hzkdis2(str);hzkdis(:);}/*****************************************************************************///向LCM中填写秒数据voidlcm_w_ss(void){unsignedcharstr[2];str[2]=0;//if(read_clock(0x81)!=ss)//判断是否需要更新/*ss=read_clock(0x81);//更新数据lcm_w_test(0,0x8b);//秒值在LCM上的写入位置lcm_w_test(1,(ss/16)+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);str[0]=ss/16+0x30;str[1]=ss%16+0x30;hzkdis2(str);}lcm_w_temp(void){//unsignedcharstr1[4];ucharstr[2];unsignedinti=0;unsignedchara=0,b=0,c=0;uchartemp=28;i=ReadTemperature();//读温度并
本文标题:毕业设计--基于单片机的智能数字闹钟程序代码
链接地址:https://www.777doc.com/doc-2365267 .html