新闻中心

EEPW首页 > 嵌入式系统 > 设计应用 > 51单片机+ds1302+ds18b20+1602液晶万年历

51单片机+ds1302+ds18b20+1602液晶万年历

作者: 时间:2016-11-29 来源:网络 收藏
//****************************************************************************************************//<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>//****************************************************************************************************#define WRITE_SECOND 0x80//*****写**秒寄存器地址#define WRITE_MINUTE 0x82//*****写**分寄存器地址#define WRITE_HOUR 0x84//*******写**时寄存器地址#define WRITE_DAY 0x86//********写**天寄存器地址#define WRITE_MONTH 0x88//******写**月寄存器地址#define WRITE_YEAR 0x8c//*******写**年寄存器地址#define WRITE_WEEK 0x8A//*******写**周寄存器地址#define READ_SECOND 0x81//******读**秒寄存器地址#define READ_MINUTE 0x83//******读**分寄存器地址#define READ_HOUR 0x85//********读**时寄存器地址#define READ_DAY 0x87//*********读**天寄存器地址#define READ_MONTH 0x89//*******读**月寄存器地址#define READ_YEAR 0x8d//********读**年寄存器地址#define READ_WEEK 0x8b//********读**周寄存器地址#define WRITE_PROTECT 0x8E//****写保护寄存器sbit ACC_7=ACC^7;sbit CLCK=P2^1;sbit RST=P2^4;sbit IO=P2^0;//****************************************************************************************************void write_1302(uint8 addr,uint8 dat)//向1302写入地址和数据{uint8 i=0;RST=0;CLCK=0;RST=1;for(i=8;i>0;i--){CLCK=0;if((addr&0x01)==1)IO=1;else IO=0;addr>>=1;CLCK=1;}for(i=8;i>0;i--){CLCK=0;if((dat&0x01)==1)IO=1;else IO=0;dat>>=1;CLCK=1;}RST=0;}//****************************************************************************************************uint8 read_1302(uint8 addr)//先向1302写地址,再读数据{ uint8 i=0,dat;RST=0;CLCK=0;RST=1;for(i=8;i>0;i--){CLCK=0;if((addr&0x01)==1)IO=1;else IO=0;addr>>=1;CLCK=1;}for(i=8;i>0;i--){ACC_7=IO;CLCK=1;ACC>>=1;CLCK=0;}dat=ACC;dat=(dat>>4)*10+(dat&0x0f);//有BCD码转换成十进制数return(dat);RST=0;}//*****************************************************************************************************void ds1302_init()//1302初始化{write_1302(WRITE_PROTECT,0x00);//*******取消写保护write_1302(WRITE_SECOND,0x00);//********00秒//NUM_BCD(0)write_1302(WRITE_MINUTE,0x00);//********00分钟//NUM_BCD(0) write_1302(WRITE_HOUR,0x16);//**********16小时//NUM_BCD(0)write_1302(WRITE_DAY,0x21);//***********21天write_1302(WRITE_MONTH,0x11);//*********11月write_1302(WRITE_YEAR,0x12);//**********2012年write_1302(WRITE_WEEK,0x03);//**********星期三 write_1302(WRITE_PROTECT,0x80);//*******打开写保护}//****************************************************************************************************void timer0_init()//几十毫秒的延时{TMOD|=0x01;TMOD&=0xfd;TH0=0x3c;TL0=0xaf;TR0=1;}//****************************************************************************************************void dushu()//从1302读取数据并将其转换成显示函数直接用到的数字{second=read_1302(READ_SECOND);minute=read_1302(READ_MINUTE);hour=read_1302(READ_HOUR);day=read_1302(READ_DAY);month=read_1302(READ_MONTH);year=read_1302(READ_YEAR);week=read_1302(READ_WEEK);}//****************************************************************************************************** void jishi0()//每一段时间会进行一次读取数字{if(TF0==1){TF0=0;TH0=0x3c;TL0=0xaf;counter_1++;}dushu();if(counter_1==2){counter_1=0;get_temp();beginchange();} }//****************************************************************************************************//<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<1602>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>//****************************************************************************************************sbit RS=P1^0;//**************数据命令选择端sbit RW=P1^1;//**************读写选择端sbit ENLCD=P2^5;//***********使能端sbit shang=P2^6;//***********数码管数据输入控制端sbit xia=P2^7;//*************数码管共阴极控制端sbit busy=P0^7;//************判断忙标志

评论


技术专区

关闭