完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
我在网上找了个程序,功能一切正常, 现在闹钟能闹但天天都要调,我想让下面的程序每天在同一时间闹不用去调它,要怎么改,望高手指点,
//端口自己修改一下 用的1602液晶显示 #include #include #define uchar unsigned char #define uint unsigned int ***it wela=P1^6; ***it nz=P1^7;//闹钟 //液晶使能 ***it lcdrs=P1^5; ***it lcdwr=P1^4; ***it lcden=P1^3; //按键 ***it k1=P3^0; ***it k2=P3^1; ***it k3=P3^2; ***it k4=P3^3; ***it ajjd=P0^4; //1302位 ***it clk=P1^2; ***it io=P1^0; ***it rst=P1^1; void naozhongscan();//闹钟 uchar num0,num1,num2,num3,num4; void init(); void delay(uchar); void keyscan(); void didi(); uchar lcd_date_add[7]={0x40+9,0x40+6,0x40+3,0xa,7,0xd,4}; uchar date_write_add[7]={0x80,0x82,0x84,0x86,0x88,0x8a,0x8c};//miao fen shi ri yue zhou nian uchar date_read_add[7]={0x81,0x83,0x85,0x87,0x89,0x8b,0x8d}; uchar date[7]={30,32,16,27,2,7,11}; uchar date1[7]; uchar naozhong[7]={35,32,16,27,2,7,11}; uchar flag,flag1,flag2; uchar code table0[]=" - - "; uchar code table1[]=" : : "; void lcd_com(uchar); void lcd_date(uchar); void lcd_time(uchar,uchar); void write_ds1302(uchar add,uchar date); uchar read_ds1302(uchar add); void read_rtc(); void set_ds1302(uchar add,uchar time); void display(); void init_ds1302(); void main() { nz=1; wela=1; P3=0x0f; // nz=0; wela=0; init(); init_ds1302(); while(1) { if(flag1==1) naozhongscan();//判断闹钟开起没有 read_rtc(); if(flag==0) display(); keyscan(); } } void init() { flag=0; flag1=0; flag2=0; lcden=0; lcdwr=0; num2=0; num3=0; num4=0; lcd_com(0x38);//显示模式设置,16*2显示,5*7点阵,8位数据接口 lcd_com(0x01);//清屏,显示、指针清零 lcd_com(0x0c);//显示开关及光标设置,开显示,显示光标,光标闪烁 lcd_com(0x06);//读写后指针加一光标加一 lcd_com(0x80);//从第一个显示地址开始显示 for(num0=0;num0<16;num0++)//写上一行的位置 lcd_date(table0[num0]); lcd_com(0x80+0x40); for(num0=0;num0<11;num0++)//下一行要写的位置二个数组 lcd_date(table1[num0]); } void init_ds1302() { uchar i,j; uchar flag3; flag3=read_ds1302(0x81);//读1302是否初始发了 if(flag3&0x80)//如果ch=1则进行初始化 { write_ds1302(0x8e,0x00); for(i=0;i<7;i++) { j=date[i]/10; date[i]=date[i]%10; date[i]=date[i]+j*16; write_ds1302(date_write_add[i],date[i]);//在1602相应的地址写上相应的字 } write_ds1302(0x8e,0x80); } } void delay(uchar z) { uchar x,y; for(x=110;x>0;x--) for(y=z;y>0;y--); } void didi() { nz=0; delay(50); nz=1; delay(100); nz=0; delay(50); nz=1; } //1602 void lcd_com(uchar com)//写地址 { lcdrs=0; P2=com; delay(5); lcden=1; delay(5); lcden=0; } void lcd_date(uchar date)//写数据 { lcdrs=1; P2=date; delay(5); lcden=1; delay(5); lcden=0; } void lcd_time(uchar add,uchar Date)//十位个位 { uchar shi,ge; shi=Date/10; ge=Date%10; lcd_com(0x80+add); lcd_date(0x30+shi); lcd_date(0x30+ge); } void keyscan() { ajjd=0; if(num3!=2) { if(k1==0)//选择光标所在的位置开始 { delay(5); if(k1==0) { while(!k1); num2++; if(num2==1) { flag=1; lcd_com(0x80+lcd_date_add[0]); lcd_com(0x0f);//显示开关及光标设置,开显示,显示光标,光标闪烁 } if(num2==2) { lcd_com(0x80+lcd_date_add[1]); } if(num2==3) { lcd_com(0x80+lcd_date_add[2]); } if(num2==4) { lcd_com(0x80+lcd_date_add[3]); } if(num2==5) { lcd_com(0x80+lcd_date_add[4]); } if(num2==6) { lcd_com(0x80+lcd_date_add[5]); } if(num2==7) { lcd_com(0x80+lcd_date_add[6]); } if(num2==8) { lcd_com(0x0c);//关光标 num2=0; flag=0;//选择光标所在的位置结束 } } } if(num2!=0) { if(k2==0) { delay(5); if(k2==0) { while(!k2); if(num2==1)//秒 { date[0]++; if(date[0]==60) date[0]=0; _nop_(); lcd_time(lcd_date_add[0],date[0]);//先转换 lcd_com(0x80+lcd_date_add[0]);//地扯秒 set_ds1302(date_write_add[0],date[0]);//数据 } if(num2==2)//分 { date[1]++; if(date[1]==60) date[1]=0; _nop_(); lcd_time(lcd_date_add[1],date[1]); lcd_com(0x80+lcd_date_add[1]); set_ds1302(date_write_add[1],date[1]); } if(num2==3)//时 { date[2]++; if(date[2]==24) date[2]=0; _nop_(); lcd_time(lcd_date_add[2],date[2]); lcd_com(0x80+lcd_date_add[2]); set_ds1302(date_write_add[2],date[2]); } if(num2==4)//天 { date[3]++; if(date[3]==32) date[3]=1; _nop_(); lcd_time(lcd_date_add[3],date[3]); lcd_com(0x80+lcd_date_add[3]); set_ds1302(date_write_add[3],date[3]); } if(num2==5)//月 { date[4]++; if(date[4]==13) date[4]=1; _nop_(); lcd_time(lcd_date_add[4],date[4]); lcd_com(0x80+lcd_date_add[4]); set_ds1302(date_write_add[4],date[4]); } if(num2==6)//星期 { date[5]++; if(date[5]==8) date[5]=1; _nop_(); lcd_time(lcd_date_add[5],date[5]); lcd_com(0x80+lcd_date_add[5]); set_ds1302(date_write_add[5],date[5]); } if(num2==7)//年 { date[6]++; if(date[6]==99) date[6]=1; _nop_(); lcd_time(lcd_date_add[6],date[6]); lcd_com(0x80+lcd_date_add[6]); set_ds1302(date_write_add[6],date[6]); } } } if(k3==0) { delay(5); if(k3==0) { while(!k3); if(num2==1) { date[0]--; if(date[0]==-1) date[0]=59; _nop_(); lcd_time(lcd_date_add[2],date[0]); lcd_com(0x80+lcd_date_add[0]); set_ds1302(date_write_add[0],date[0]); } if(num2==2) { date[1]--; if(date[1]==-1) date[1]=59; _nop_(); lcd_time(lcd_date_add[1],date[1]); lcd_com(0x80+lcd_date_add[1]); set_ds1302(date_write_add[1],date[1]); } if(num2==3) { date[2]--; if(date[2]==-1) date[2]=23; _nop_(); lcd_time(lcd_date_add[2],date[2]); lcd_com(0x80+lcd_date_add[2]); set_ds1302(date_write_add[2],date[2]); } if(num2==4) { date[3]--; if(date[3]==0) date[3]=31; _nop_(); lcd_time(lcd_date_add[3],date[3]); lcd_com(0x80+lcd_date_add[3]); set_ds1302(date_write_add[3],date[3]); } if(num2==5) { date[4]--; if(date[4]==0) date[4]=12; _nop_(); lcd_time(lcd_date_add[4],date[4]); lcd_com(0x80+lcd_date_add[4]); set_ds1302(date_write_add[4],date[4]); } if(num2==6) { date[5]--; if(date[5]==0) date[5]=7; _nop_(); lcd_time(lcd_date_add[5],date[5]); lcd_com(0x80+lcd_date_add[5]); set_ds1302(date_write_add[5],date[5]); } if(num2==7) { date[6]--; if(date[6]==0) date[6]=99; _nop_(); lcd_time(lcd_date_add[6],date[6]); lcd_com(0x80+lcd_date_add[6]); set_ds1302(date_write_add[6],date[6]); } } } } } if(k4==0) { delay(5); if(k4==0) { while(!k4); num3++; } } if(num3==1) { flag1=1; lcd_com(0x80+1); lcd_date(0x41); } if(num3==2) { ajjd=0; flag1=0; if(num4==0) { for(num0=0;num0<7;num0++) lcd_time(lcd_date_add[num0],naozhong[num0]); lcd_com(0x80+1); lcd_com(0x0c);//关光标 lcd_date(0x42); } //lcd_com(0x0f); flag=1; if(k1==0) { delay(5); if(k1==0) { while(!k1); num4++; if(num4==1) { lcd_com(0x80+lcd_date_add[0]); lcd_com(0x0f);//显示开关及光标设置,开显示,显示光标,光标闪烁 } if(num4==2) { lcd_com(0x80+lcd_date_add[1]); } if(num4==3) { lcd_com(0x80+lcd_date_add[2]); } if(num4==4) { lcd_com(0x80+lcd_date_add[3]); } if(num4==5) { lcd_com(0x80+lcd_date_add[4]); } if(num4==6) { lcd_com(0x80+lcd_date_add[5]); } if(num4==7) { lcd_com(0x80+lcd_date_add[6]); } if(num4==8) { lcd_com(0x0c);//关光标 num4=0; flag=1; } } } if(num4!=0) { if(k2==0) { delay(5); if(k2==0) { while(!k2); if(num4==1) { naozhong[0]++; if(naozhong[0]==60) naozhong[0]=0; _nop_(); lcd_time(lcd_date_add[0],naozhong[0]); lcd_com(0x80+lcd_date_add[0]); } if(num4==2) { naozhong[1]++; if(naozhong[1]==60) naozhong[1]=0; _nop_(); lcd_time(lcd_date_add[1],naozhong[1]); lcd_com(0x80+lcd_date_add[1]); } if(num4==3) { naozhong[2]++; if(naozhong[2]==24) naozhong[2]=0; _nop_(); lcd_time(lcd_date_add[2],naozhong[2]); lcd_com(0x80+lcd_date_add[2]); } if(num4==4) { naozhong[3]++; if(naozhong[3]==32) naozhong[3]=1; _nop_(); lcd_time(lcd_date_add[3],naozhong[3]); lcd_com(0x80+lcd_date_add[3]); } if(num4==5) { naozhong[4]++; if(naozhong[4]==13) naozhong[4]=1; _nop_(); lcd_time(lcd_date_add[4],naozhong[4]); lcd_com(0x80+lcd_date_add[4]); } if(num4==6) { naozhong[5]++; if(naozhong[5]==8) naozhong[5]=1; _nop_(); lcd_time(lcd_date_add[5],naozhong[5]); lcd_com(0x80+lcd_date_add[5]); } if(num4==7) { naozhong[6]++; if(naozhong[6]==99) naozhong[6]=1; _nop_(); lcd_time(lcd_date_add[6],naozhong[6]); lcd_com(0x80+lcd_date_add[6]); } } } if(k3==0) { delay(5); if(k3==0) { while(!k3); if(num4==1) { naozhong[0]--; if(naozhong[0]==-1) naozhong[0]=59; _nop_(); lcd_time(lcd_date_add[2],naozhong[0]); lcd_com(0x80+lcd_date_add[0]); } if(num4==2) { naozhong[1]--; if(naozhong[1]==-1) naozhong[1]=59; _nop_(); lcd_time(lcd_date_add[1],naozhong[1]); lcd_com(0x80+lcd_date_add[1]); } if(num4==3) { naozhong[2]--; if(naozhong[2]==-1) naozhong[2]=23; _nop_(); lcd_time(lcd_date_add[2],naozhong[2]); lcd_com(0x80+lcd_date_add[2]); } if(num4==4) { naozhong[3]--; if(naozhong[3]==0) naozhong[3]=31; _nop_(); lcd_time(lcd_date_add[3],naozhong[3]); lcd_com(0x80+lcd_date_add[3]); } if(num4==5) { naozhong[4]--; if(naozhong[4]==0) naozhong[4]=12; _nop_(); lcd_time(lcd_date_add[4],naozhong[4]); lcd_com(0x80+lcd_date_add[4]); } if(num4==6) { naozhong[5]--; if(naozhong[5]==0) naozhong[5]=7; _nop_(); lcd_time(lcd_date_add[5],naozhong[5]); lcd_com(0x80+lcd_date_add[5]); } if(num4==7) { naozhong[6]--; if(naozhong[6]==0) naozhong[6]=99; _nop_(); lcd_time(lcd_date_add[6],naozhong[6]); lcd_com(0x80+lcd_date_add[6]); } } } } } if(num3==3) { flag=0; flag1=0; lcd_com(0x80+1); lcd_date(20);//让lcd什么都不显示 num3=0; num4=0; } } void write_ds1302(uchar add,uchar date) { uchar i,temp; rst=0; clk=0; _nop_(); rst=1; for(i=0;i<8;i++) { clk=0; temp=add; io=temp&0x01; add>>=1; clk=1; _nop_(); } for(i=0;i<8;i++) { clk=0; temp=date; io=temp&0x01; date>>=1; clk=1; _nop_(); } rst=0; } uchar read_ds1302(uchar add) { uchar i,temp,data1,j; rst=0; clk=0; _nop_();; rst=1; for(i=0;i<8;i++) { clk=0; temp=add; io=temp&0x01; add>>=1; clk=1; _nop_(); } for(i=0;i<8;i++) { data1>>=1; clk=0; if(io) data1=data1|0x80; clk=1; } rst=0; _nop_(); j=data1%16; data1=data1/16; data1=data1*10+j; return(data1); } void set_ds1302(uchar add,uchar time) { uchar j; write_ds1302(0x8e,0x00); j=time/10; time=time%10; time=time+j*16; write_ds1302(add,time); write_ds1302(0x8e,0x80); } void read_rtc() { uchar i; for(i=0;i<7;i++) { date[i]=read_ds1302(date_read_add[i]); } } void display() { uchar i; for(i=0;i<7;i++) { lcd_time(lcd_date_add[i],date[i]); } } void naozhongscan() { uchar i=0; uchar j=0; while((j==0)&&(i<7)) { j=naozhong[i]^date[i]; i++; } if(i==7) didi(); } 这个函数里的 void naozhongscan() { uchar i=0; uchar j=0; while((j==0)&&(i<7)) { j=naozhong[i]^date[i]; i++; } if(i==7) didi(); } 是怎么判闹钟开起的我看不懂 |
|
相关推荐
8 个讨论
|
|
704 浏览 0 评论
嵌入式 学习-飞凌嵌入式ElfBoard ELF 1板卡-shell脚本编写之输入输出重定向
621 浏览 0 评论
求助大佬,多位数码管如何同时亮并间隔一段时间再灭?``` ‸
1651 浏览 1 评论
《DNK210使用指南 -CanMV版 V1.0》第八章 CanMV IDE初体验
2071 浏览 0 评论
过采样提高12位ADC精度在STM32主控上的实现(附电路及代码)
1478 浏览 4 评论
【youyeetoo X1 windows 开发板体验】少儿AI智能STEAM积木平台
11282 浏览 31 评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-9-27 07:39 , Processed in 0.662881 second(s), Total 51, Slave 44 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号