#include<reg52.h>#define uint unsigned int#define uchar unsigned charsbit rs=P2^5;sbit rw=P2^6;sbit en=P2^7;sbit s1=P1^4;sbit s2=P1^5;sbit s3=P1^6;//sbit s4=P1^7;sbit s4=P3^2;sbit s5=P3^3;sbit s6=P3^4;sbit key1=P1^0;sbit beep=P2^3;sbit dscs=P2^0;sbit dsas=P2^1;sbit dsrw=P2^2;sbit dsds=P2^4;sbit dsirq=P3^2;uchar code table[]=" 20 - - ";uchar code table1[]=" : : ";uchar miao,shi,fen,day,month,year,week,s1num,flag,flag1;void delay(uint z);void set_time();void set_alarm(uchar,uchar,uchar);void write_ds(uchar,uchar);uchar read_ds(uchar);void write_com(uchar com){rs=0;rw=0;P0=com;delay(5);en=1;delay(5);en=0;}void write_data(uchar date){rs=1;rw=0;P0=date;delay(5);en=1;delay(5);en=0;}void init(){uchar num;en=0;EA=1;EX0=1;IT0=1;set_time();set_alarm(18,50,0);write_ds(0x0B,0x26);read_ds(0x0c);write_com(0x38);write_com(0x0c);write_com(0x06);write_com(0x01);write_com(0x80); for(num=0;num<16;num++) { write_data(table[num]); delay(5); }write_com(0x80+0x40); for(num=0;num<12;num++) { write_data(table1[num]); delay(5); }}void write_nyr(uchar add,uchar date){uchar shi,ge;shi=date/10;ge=date%10;write_com(0x80+add);write_data(0x30+shi);write_data(0x30+ge);}void write_sfm(uchar add,uchar date){uchar shi,ge;shi=date/10;ge=date%10;write_com(0x80+0x40+add);write_data(0x30+shi);write_data(0x30+ge);}void write_week(uchar week){write_com(0x80+13);switch(week) { case 1:write_data('M');delay(5); write_data('O');delay(5); write_data('N'); break; case 2:write_data('T');delay(5); write_data('U');delay(5); write_data('E'); break; case 3:write_data('W');delay(5); write_data('E');delay(5); write_data('D'); break; case 4:write_data('T');delay(5); write_data('H');delay(5); write_data('U'); break; case 5:write_data('F');delay(5); write_data('R');delay(5); write_data('I'); break; case 6:write_data('S');delay(5); write_data('A');delay(5); write_data('T'); break; case 7:write_data('S');delay(5); write_data('U');delay(5); write_data('N'); break; }}void write_ds(uchar add,uchar date){dscs=0;dsas=1;dsds=1;dsrw=1;P0=add;dsas=0;dsrw=0;P0=date;dsrw=1;dsas=1;dscs=1;}uchar read_ds(uchar add){uchar ds_date;dscs=0;dsas=1;dsds=1;dsrw=1;P0=add;dsas=0;dsds=0;P0=0xff;ds_date=P0;dsas=1;dsds=1;dscs=1;return ds_date;}void set_time(){//write_ds(4,11);//write_ds(2,17);write_ds(7,28);write_ds(8,8);write_ds(9,12);write_ds(6,2);}void set_alarm(uchar ashi,uchar afen,uchar amiao){//write_ds(9,ayear);//write_ds(8,amonth);//write_ds(7,aday);write_ds(1,amiao);write_ds(3,afen);write_ds(5,ashi);}void keyscan(){key1=0;if(flag1==1) { if(s2==0) { delay(5); if(s2==0) { while(!s2); flag1=0; } }if(s3==0) { delay(5); if(s3==0) { while(!s3); flag1=0; } } } if(s1==0) { delay(5); if(s1==0) { s1num++; flag=1; flag1=0; while(!s1); if(s1num==1) { write_com(0x80+0x40+10); write_com(0x0f); } if(s1num==2) { write_com(0x80+0x40+7); } if(s1num==3) { write_com(0x80+0x40+4); } if(s1num==4) { write_com(0x80+10); //write_com(0x0f); } if(s1num==5) { write_com(0x80+7); } if(s1num==6) { write_com(0x80+4); } if(s1num==7) { write_com(0x80+13); } if(s1num==8) { s1num=0; write_com(0x0c); flag=0; write_ds(0,miao); write_ds(2,fen); write_ds(4,shi); write_ds(7,day); write_ds(8,month); write_ds(9,year); write_ds(6,week); } } }if(s1num!=0) { if(s2==0) { delay(5); if(s2==0) { while(!s2); if(s1num==1) { miao++; if(miao==60) miao=0; write_sfm(10,miao); write_com(0x80+0x40+10); } if(s1num==2) { fen++; if(fen==60) fen=0; write_sfm(7,fen); write_com(0x80+0x40+7); } if(s1num==3) { shi++; if(shi==24) shi=0; write_sfm(4,shi); write_com(0x80+0x40+4); } if(s1num==4) { day++; if(day==32) day=1; write_nyr(10,day); write_com(0x80+10); } if(s1num==5) { month++; if(month==13) month=1; write_nyr(7,month); write_com(0x80+7); } if(s1num==6) { year++; if(year==99) year=0; write_nyr(4,year); write_com(0x80+4); } if(s1num==7) { week++; if(week==8) week=1; write_week(week); write_com(0x80+13); } } }}if(s1num!=0) { if(s3==0) { delay(5); if(s3==0) { while(!s3); if(s1num==1) { miao--; if(miao==-1) miao=59; write_sfm(10,miao); write_com(0x80+0x40+10); } if(s1num==2) { fen--; if(fen==-1) fen=59; write_sfm(7,fen); write_com(0x80+0x40+7); } if(s1num==3) { shi--; if(shi==-1) shi=23; write_sfm(4,shi); write_com(0x80+0x40+4); } if(s1num==4) { day--; if(day==0) shi=31; write_nyr(10,day); write_com(0x80+10); } if(s1num==5) { month--; if(month==0) month=12; write_nyr(7,month); write_com(0x80+7); } if(s1num==6) { year--; if(year==-1) year=99; write_nyr(4,year); write_com(0x80+4); } if(s1num==7) { week--; if(week==0) week=7; write_week(week); write_com(0x80+13); } } } } }void didi(){beep=0;delay(50);beep=1;delay(100);beep=0;delay(50);beep=1;}void main(){ init();while(1) { keyscan(); if(flag1==1) didi(); if(flag==0) { miao=read_ds(0); fen=read_ds(2); shi=read_ds(4); day=read_ds(7); month=read_ds(8); year=read_ds(9); week=read_ds(6); write_sfm(10,miao); write_sfm(7,fen); write_sfm(4,shi); write_nyr(10,day); write_nyr(7,month); write_nyr(4,year); write_week(week); } }}void delay(uint z){uchar x,y; for(x=z;x>0;x--) for(y=110;y>0;y--);}void exter0() interrupt 0{uchar c;flag1=1;c=read_ds(0x0c);}
导读:目前正在解读《基于单片机高精度数字可调闹钟源程序》的相关信息,《基于单片机高精度数字可调闹钟源程序》是由用户自行发布的知识型内容!下面请观看由(电工技术网 - www.9ddd.net)用户发布《基于单片机高精度数字可调闹钟源程序》的详细说明。
简介:这里给大家分享了一个基于单片机高精度数字可调闹钟源程序。
提醒:《基于单片机高精度数字可调闹钟源程序》最后刷新时间 2024-03-14 01:02:22,本站为公益型个人网站,仅供个人学习和记录信息,不进行任何商业性质的盈利。如果内容、图片资源失效或内容涉及侵权,请反馈至,我们会及时处理。本站只保证内容的可读性,无法保证真实性,《基于单片机高精度数字可调闹钟源程序》该内容的真实性请自行鉴别。