收藏 分销(赏)

实时电子闹钟52单片机源代码.doc

上传人:快乐****生活 文档编号:2669920 上传时间:2024-06-04 格式:DOC 页数:25 大小:881.54KB 下载积分:10 金币
下载 相关 举报
实时电子闹钟52单片机源代码.doc_第1页
第1页 / 共25页
实时电子闹钟52单片机源代码.doc_第2页
第2页 / 共25页


点击查看更多>>
资源描述
实时电子闹钟52单片机源代码 ———————————————————————————————— 作者: ———————————————————————————————— 日期: 25 个人收集整理 勿做商业用途 实时电子闹钟功能:可以在液晶上显示时间星期日期,并按秒实时更新,具有闹钟设定及到时闹钟报警提示功能,闹钟响铃时按任意键可以取消响铃,拓展了四个按键,用于功能选择,数值增大或减小及闹钟查看,每次按键均会有短“滴”声,断电时间不停,再次上电仍将准确显示在液晶上   照片描述:用开发板及自己焊接的部分电路板做的实时电子闹钟 照片描述:用开发板及自己焊接的部分电路板做的实时电子闹钟 照片描述:用开发板及自己焊接的部分电路板做的实时电子闹钟 照片描述:用开发板及自己焊接的部分电路板做的实时电子闹钟 照片描述:用开发板及自己焊接的部分电路板做的实时电子闹钟 照片描述:用开发板及自己焊接的部分电路板做的实时电子闹钟 照片描述:用开发板及自己焊接的部分电路板做的实时电子闹钟 照片描述:用开发板及自己焊接的部分电路板做的实时电子闹钟 实时电子闹钟程序 #include <reg52。h〉 #define uchar unsigned char #define uint  unsigned int //按键 sbit s1=P3^4;     //设置 sbit s2=P3^5;     //减 sbit s3=P3^6;     //增 sbit s4=P3^7;     //闹钟 sbit beep=P2^4;   //蜂鸣器 //1602位声明(实验板) sbit rs1602=P2^5; sbit rw1602=P2^6; sbit en1602=P2^7; /* uchar code table0[9]={”2010—4-13"}; uchar code table1[8]={”11:03:05”}; */ //定义全局变量 uchar shi,fen,miao,nian,yue,ri,week,s1num,num,flag,flag_di,flag1,amiao,afen,ashi; //延时x*1ms void delay(uint x) {  uint a,b;  for(a=0;a<x;a++)   for(b=0;b<63;b++); } //转换函数 uchar Convert(uchar In_Date) {   uchar i,Out_Date=0,temp=0;   for(i=0;i〈8;i++)    {       temp=(In_Date〉>i)&0x01;       Out_Date|=(temp<〈(7-i));    }   return Out_Date; } //1602写操作 //写指令 void write1602com(uchar com) {  rs1602=0;  rw1602=0;  en1602=0;  P0=0xff;  P0=Convert(com);  delay(2);  en1602=1;  delay(2);  en1602=0;  delay(2);  rs1602=1; } //写数据 void write1602data(uchar adata) {  rs1602=1;  rw1602=0;  en1602=0;  P0=0xff;  P0=Convert(adata);  delay(2);  en1602=1;  delay(2);  en1602=0;  delay(2);  rs1602=0; } //1602初始化设置 void init_1602() {  rs1602=0;  rw1602=0;  en1602=0;  write1602com(0x38);  write1602com(0x0c);  write1602com(0x06);  write1602com(0x01);  write1602com(0x80);  //外部中断  EA=1;  EX0=1;  IT0=1; //闹钟标志位  flag1=0;  flag=0;  flag_di=1;  s1num=0; } //在1602中显示时分秒 void lcd_sfm(uchar add,uchar adata) {  uchar shiwei,gewei;  shiwei=adata/10;  gewei=adata%10;  write1602com(0x80+0x40+add);            //在高位停留 // delay(10);  write1602data(shiwei+0x30);  write1602data(gewei+0x30); } //在1602中显示年月日 void lcd_nyr(uchar add,uchar adata) {  uchar shiwei,gewei;  shiwei=adata/10;  gewei=adata%10;  write1602com(0x80+add);            //在高位停留 // delay(10);  write1602data(shiwei+0x30);  write1602data(gewei+0x30); } //1602时钟横杠等字符的显示 void lcd1602showsign() {  lcd_nyr(0,20);  write1602com(0x80+4);  write1602data('—’);  write1602com(0x80+7);  write1602data('-’);  write1602com(0x80+0x40+2);  write1602data(':');  write1602com(0x80+0x40+5);  write1602data(’:'); } //DS12887部分程序 //位申明 sbit ds12887_ds=P2^3; sbit ds12887_rw=P2^2; sbit ds12887_as=P2^1; sbit ds12887_cs=P2^0; sbit ds12887_irq=P3^2; //ds12887写数据及指令操作 void ds12887_write(uchar add,uchar adata) {  ds12887_as=0;  ds12887_ds=1;  ds12887_rw=1;  ds12887_cs=0;  ds12887_as=1;  P1=add;  ds12887_as=0;  ds12887_rw=0;  P1=adata;  ds12887_rw=1;  ds12887_as=1; } //ds12887读数据操作 uchar ds12887_read(uchar add) {  uchar k;  ds12887_ds=1;  ds12887_rw=1;  ds12887_as=1;  ds12887_cs=0;  P1=add;  ds12887_as=0;  ds12887_ds=0;  P1=0xff;  k=P1;  ds12887_ds=1;  ds12887_cs=1;  ds12887_as=1;  return k; } //设置ds12887初始时间 void set_time() {  ds12887_write(0x00,50);  //second  ds12887_write(0x02,59);  //minute  ds12887_write(0x04,23);  //hour  ds12887_write(0x06,3);   //day  ds12887_write(0x07,16);  //date  ds12887_write(0x08,4);   //month  ds12887_write(0x09,10);  //year } //闹钟滴滴响声 void didi() {  beep=0;  delay(100);  beep=1;  delay(100);  beep=0;  delay(100);  beep=1; } //ds12887初始化 void init_ds12887() {  ds12887_write(0x0a,0x20);  ds12887_write(0x0B,0x26);//SET置1还是置0??  set_time(); } //闹钟设定 void set_alarm(uchar hour,uchar minute,uchar second) {  ds12887_write(1,second);  ds12887_write(3,minute);  ds12887_write(5,hour); } //读取闹钟数据 void read_alarm() {  amiao=ds12887_read(1);  afen=ds12887_read(3);  ashi=ds12887_read(5); } //显示星期 void show_week() {  switch(week)  {   case 1:write1602com(0x80+11);       write1602data(’M');       write1602data('O');       write1602data('N’);       break;   case 2:write1602com(0x80+11);       write1602data(’T');       write1602data(’U');       write1602data('S’);       break;   case 3:write1602com(0x80+11);       write1602data(’W’);       write1602data(’E’);       write1602data('N');       break;   case 4:write1602com(0x80+11);       write1602data('T’);       write1602data(’H’);       write1602data('U');       break;   case 5:write1602com(0x80+11);       write1602data(’F');       write1602data('R');       write1602data(’I');       break;   case 6:write1602com(0x80+11);       write1602data(’S’);       write1602data(’A’);       write1602data('T’);       break;   case 7:write1602com(0x80+11);       write1602data('S');       write1602data('U’);       write1602data(’N');       break;  } }本文为互联网收集,请勿用作商业用途文档为个人收集整理,来源于网络 //清除设置星期时的数字型显示 void clearnumofweek() {  write1602com(0x80+14);  write1602data(’ ’);  write1602data(' '); } //按键扫描 void keyscan() {  if(flag_di==0)   {    if((s1==0)||(s2==0)||(s3==0)||(s4==0))     {      delay(5);      if((s1==0)||(s2==0)||(s3==0)||(s4==0))       {        while(!(s1&&s2&&s3&&s4));        didi();        flag_di=1;              }     } //   flag_di=1;   }  if(s1==0)   {    delay(10);    if(s1==0)     {      s1num++;      if(flag1==1)       {        if(s1num==4)         {          s1num=1; //         write1602com(0x80+0x40+7); //         write1602com(0x0f);         }       } //     s1num++;      flag=1;      while(!s1);beep=0;delay(50);beep=1;      switch(s1num)       {        case 1:write1602com(0x80+0x40+7);            write1602com(0x0f);            break;        case 2:write1602com(0x80+0x40+4);            write1602com(0x0f);            break;        case 3:write1602com(0x80+0x40+1);            write1602com(0x0f);            break;            case 4:write1602com(0x80+15);            write1602com(0x0f);            break;        case 5:write1602com(0x80+9);            write1602com(0x0f);            break;        case 6:write1602com(0x80+6);            write1602com(0x0f);            break;        case 7:write1602com(0x80+3);            write1602com(0x0f);            break;        case 8:ds12887_write(0x00,miao);  //second            ds12887_write(0x02,fen);  //minute            ds12887_write(0x04,shi);  //hour               ds12887_write(0x06,week);   //day            ds12887_write(0x07,ri);  //date            ds12887_write(0x08,yue);   //month            ds12887_write(0x09,nian);  //year //           delay(100);            flag=0;            s1num=0;            break;       }          }   }  if(s1num!=0)   {    if(s2==0)     {      delay(5);      if(s2==0)       {        while(!s2);beep=0;delay(50);beep=1;        switch(s1num)         {        case 1:miao++;            if(miao==60)               miao=0;            lcd_sfm(6,miao);                                    write1602com(0x80+0x40+7);            break;        case 2:fen++;            if(fen==60)               fen=0;            lcd_sfm(3,fen);                                    write1602com(0x80+0x40+4);            break;        case 3:shi++;            if(shi==24)               shi=0;            lcd_sfm(0,shi);                                    write1602com(0x80+0x40+1);            break;            case 4:week++;            if(week==8)               week=1;            lcd_nyr(14,week);                                    write1602com(0x80+15);            break;        case 5:ri++;            if(ri==32)               ri=1;            lcd_nyr(8,ri);                                    write1602com(0x80+9);            break;        case 6:yue++;            if(yue==13)               yue=1;            lcd_nyr(5,yue);                                    write1602com(0x80+6);            break;        case 7:nian++;            if(nian==100)               nian=0;            lcd_nyr(2,nian);                                    write1602com(0x80+3);            break;         }       }     }    if(s3==0)     {      delay(5);      if(s3==0)       {        while(!s3);beep=0;delay(50);beep=1;        switch(s1num)         {        case 1:miao--;            if(miao==-1)               miao=59;            lcd_sfm(6,miao);                                    write1602com(0x80+0x40+7);            break;        case 2:fen--;            if(fen==-1)               fen=59;            lcd_sfm(3,fen);                                    write1602com(0x80+0x40+4);            break;        case 3:shi--;            if(shi==—1)               shi=23;            lcd_sfm(0,shi);                                    write1602com(0x80+0x40+1);            break;            case 4:week——;            if(week==0)               week=7;            lcd_nyr(14,week);                                    write1602com(0x80+15);            break;        case 5:ri--;            if(ri==0)               ri=31;            lcd_nyr(8,ri);                                    write1602com(0x80+9);            break;        case 6:yue——;            if(yue==0)               yue=12;            lcd_nyr(5,yue);                                    write1602com(0x80+6);            break;        case 7:nian——;            if(nian==-1)               nian=99;            lcd_nyr(2,nian);                                    write1602com(0x80+3);            break;         }       }     }    if(s4==0)     {      delay(5);      if(s4==0)       { //       while(!s4);beep=0;delay(50);beep=1;        num++;        while(!s4);beep=0;delay(50);beep=1; //       flag1=1; //       flag1=~flag1;        if(num==1) //       if(flag1==1)    //设置闹钟         {          flag1=1;         write1602com(0x80+0x40+7);         write1602com(0x0f);          read_alarm();         miao=amiao;         fen=afen;         shi=ashi;         write1602com(0x80+0x40+9);         write1602data('D’);         write1602data(’i'); //        write1602com(0x80+0x40+7); //        write1602com(0x0f);         lcd_sfm(0,ashi);         lcd_sfm(3,afen);         lcd_sfm(6,amiao);         } //       else  //退出闹钟设置,并把设置的时间输入进DS12C887中   本文为互联网收集,请勿用作商业用途个人收集整理,勿做商业用途        if(num==2)         { //         delay(50);          num=0;         s1num=0;         write1602com(0x80+0x40+9);         write1602data(' ’);         write1602data(' '); //        write1602com(0x0c); //        ds12887_write(1,miao); //        ds12887_write(3,fen); //        ds12887_write(5,shi);         set_alarm(shi,fen,miao);         flag1=0;          flag=0;         }       }     }   } } void main() { /*  uchar i;  init_1602();  for(i=0;i〈9;i++)   {    write1602data(table0[i]);    delay(5);   }    delay(10);   write1602com(0x80+0x40);  for(i=0;i<8;i++)   {    write1602data(table1[i]);    delay(5);   }  while(1); */  init_1602();  lcd1602showsign();  init_ds12887();  while(1)   {    keyscan();    if(flag_di==0)    { //    delay(100);     didi(); //    delay(200); //    flag_di=1;    } //   delay(10);    if((flag==0)&&(flag1==0))    {     keyscan(); //    delay(10);     shi=ds12887_read(0x04);     fen=ds12887_read(0x02);     miao=ds12887_read(0x00);     nian=ds12887_read(0x09);     yue =ds12887_read(0x08);     ri  =ds12887_read(0x07);     week=ds12887_read(0x06);     lcd_sfm(0,shi);     lcd_sfm(3,fen);     lcd_sfm(6,miao);     lcd_nyr(2,nian);     lcd_nyr(5,yue);     lcd_nyr(8,ri); //    lcd_nyr(14,week);     show_week();     clearnumofweek();    }   } } void exter0() interrupt 0 {  uchar c;  flag_di=0;  c=ds12887_read(0x0c); }
展开阅读全文

开通  VIP会员、SVIP会员  优惠大
下载10份以上建议开通VIP会员
下载20份以上建议开通SVIP会员


开通VIP      成为共赢上传

当前位置:首页 > 包罗万象 > 大杂烩

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        抽奖活动

©2010-2025 宁波自信网络信息技术有限公司  版权所有

客服电话:4009-655-100  投诉/维权电话:18658249818

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :微信公众号    抖音    微博    LOFTER 

客服