51单片机电子钟程序设计

您所在的位置:网站首页 51单片机flag 51单片机电子钟程序设计

51单片机电子钟程序设计

#51单片机电子钟程序设计| 来源: 网络整理| 查看: 265

硬件部分   基于51单片机、 ds1302时钟芯片、 ds18b20温度芯片、 以及1602液晶显示的    实时时间   和   实时温度显示 。同时可通过按键 设置 年、月、日、时、分、星期。并且可以设置闹钟  当闹钟时间到时 蜂鸣器持续发出 滴..声 同时led灯不停闪烁   且在一分钟内没有按指定停止按键 闹钟将自动停止  。。。

软件部分#include #define uchar unsigned char #define uint unsigned intsbit spk=P1^7;sbit led=P1^5;sbit DQ=P1^0;sbit RS=P2^4;sbit RW=P2^5;sbit EN=P2^6;sbit key1=P2^0;sbit key2=P2^1;sbit key3=P2^2;sbit key4=P2^3;sbit IO=P3^6;sbit RST=P3^7;sbit SCLK=P3^5;uchar code table[]={0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39}; int nian,xing,yue,ri,shi,fen,miao;uchar num,temp,c,d,time[7],a,b,aa,bb,ns,ng,ys,yg,rs,rg,ss,sg,fs,fg,ms,mg,flag;/*******************1602************************/void delay(int z){ int x,y; for(x=z;x>0;x--)  for(y=100;y>0;y--); }void write_com(uchar com)   //写命令{ RS=0; P0=com; delay(5); EN=1; delay(5); EN=0;}void write_data(uchar date)      //写数据{ RS=1; P0=date; delay(5); EN=1; delay(5); EN=0;}void init()          //初始化{ RW=0; EN=0; write_com(0x38);    //显示模式设置 write_com(0x0c);    //开显示 不显示光标 不闪  write_com(0x06); //写一个字符 地址指针 光标 加一 整屏不移动 write_com(0x01);    //显示清零 write_com(0x80+0x04); write_data('2');       write_com(0x80+0x05); write_data('0');       write_com(0x80+0x00); write_data('c');       write_com(0x80+0x01); write_data('a');  write_com(0x80+0x02); write_data('i');        write_com(0x80+0x4e); write_data(0xdf);      write_com(0x80+0x4f); write_data('C');       write_com(0x80+0x4b); write_data(0x2e);       //显示"。"} /**************DS18B20****************/void delay1(unsigned int t) //延时函数{ while(t--);}void init1()  //初始化{ uchar n=0; DQ=1;      //DQ复位 delay1(8);    DQ=0;      //主机将DQ拉低 delay1(80);     //大于480us的延时 DQ=1; delay1(5);    //延时15~60us  n=DQ; delay1(5);   //若n=0初始成功 n=1初始失败(可设置返回值查看n是否为1) } void write_byte(uchar dat)    //写入一个字节{ uint i; for(i=0;i>=1; } delay1(4);}uchar read_byte()    //读入一个字节{ uint k=0; uchar value=0; for(k=0;k>=1;  DQ=1;  if(DQ)  value|=0x80;  delay1(4); }  return value; }uchar read_temp()    //读取温度函数{ uchar a=0,b=0; init1(); write_byte(0xcc); write_byte(0x44); delay1(200); init1(); write_byte(0xcc); write_byte(0xbe); a=read_byte();   b=read_byte(); c=b; d=a; b4;  return b;}/***********************1302**********************/void wirte_byte1(uchar date)    //写入一个字节{ uchar i; for(i=8;i>0;i--) {   IO=date&0x01;  SCLK=0;  SCLK=1;  date=date>>1;   }}uchar read_byte1()       //读一个字节{ uchar dat,i; for(i=8;i>0;i--) {  dat=dat>>1;  SCLK=0;  if(IO)  dat=dat|0x80;  SCLK=1; } return(dat);}void write_ds1302(uchar add,uchar date)     //将数据写入1302中{ RST=0; SCLK=0; RST=1; wirte_byte1(add); wirte_byte1(date); RST=0; SCLK=1;}uchar read_ds1302(uchar add)  //读出1302中数据{ uchar temp; RST=0; SCLK=0; RST=1; wirte_byte1(add); temp=read_byte1(); RST=0; SCLK=0; return (temp);}uchar huan_BCD(uint z)   //将数据 转换成BCD { uint a,b;  a=z/10;  b=z%10;  a=a&0xff;  b=b&0xff;  a=60)     {      fen=0;     }    }    if(a==3)    {     ri++;     if(ri>=32)     {      ri=1;     }    }    if(a==4)    {     yue++;     if(yue>=12)     {      yue=1;     }    }    if(a==5)    {     nian++;     if(nian>=99)     {      nian=0;     }    }    if(a==6)    {     xing++;     if(xing>=8)     {      xing=1;     }    }   }   if(key3==0)    //key3按键 可将需设置的数 调小   {       if(a==1)    {     shi--;     if(shi



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3