12864万年历带闹钟和温度.docx
- 文档编号:7282171
- 上传时间:2023-01-22
- 格式:DOCX
- 页数:18
- 大小:19.17KB
12864万年历带闹钟和温度.docx
《12864万年历带闹钟和温度.docx》由会员分享,可在线阅读,更多相关《12864万年历带闹钟和温度.docx(18页珍藏版)》请在冰豆网上搜索。
12864万年历带闹钟和温度
基于51单片机的设计:
源代码调试通过
主函数部分:
包含头文件,液晶18b20和DS1302的初始化
#include
#include"12864.h"
#include"ds1302.h"
#include"18b20.h"
#defineucharunsignedchar
#defineuintunsignedint
voidmain()
{
uchari;
lcd_init();
b20_init();
ds1302_init();
ds1302_write_time();
while
(1)
{
write_com(0x80);
dis("★★mage心寒★★");
get_temperature();
b20_display();
ds1302_read_time();
for(i=1;i<8;i++)
tempdata[i]=time_buf1[i];
ds1302_display();
}
}
12864控制部分:
#include
#defineucharunsignedchar
#defineuintunsignedint
sbitrs=P2^4;
sbite=P2^6;
sbitrw=P2^5;
uchari,j,num,aa;
voiddelayms(uintz)
{
uintx,y;
for(x=z;x>0;x--)
for(y=110;y>0;y--);
}
voidwrite_com(ucharcom)
{
rs=0;
P0=com;
delayms(5);
e=1;
delayms(5);
e=0;
}
voidwrite_data(uchardate)
{
rs=1;
P0=date;
delayms(5);
e=1;
delayms(5);
e=0;
}
voiddis(unsignedcharcode*s)
{while(*s>0)
{write_data(*s);
s++;
delayms(5);
}
}
voidlcd_init()
{
rw=0;
e=0;
write_com(0x38);
write_com(0x0c);
write_com(0x06);
write_com(0x01);
write_com(0x80);
}
/*lcd_display()
{
write_com(0x80);
dis("12864液晶,,,,");
delayms(100);
write_com(0x90);
dis("安徽建筑工业学院");
delayms(100);
write_com(0x88);
dis("电子创新实验室");
delayms(100);
write_com(0x98);
dis("mage心寒");
delayms(1000);
write_com(0x01);
}*/
DS1302部分:
#include
#include
#defineucharunsignedchar
#defineuintunsignedint
uchartime_buf2[16];
uchartempdata[8];
ucharnum;
sbitsck=P3^6;
sbitsda=P3^4;
sbitrst=P3^5;
#defineds1302_sec_add0x80//秒数据地址
#defineds1302_min_add0x82//分数据地址
#defineds1302_hr_add0x84//时数据地址
#defineds1302_date_add0x86//日数据地址
#defineds1302_month_add0x88//月数据地址
#defineds1302_day_add0x8a//星期数据地址
#defineds1302_year_add0x8c//年数据地址
#defineds1302_control_add0x8e//控制数据地址
#defineds1302_charger_add0x90
#defineds1302_clkburst_add0xbe
unsignedchartime_buf1[]={20,10,8,26,15,57,56,4};//年月日时分秒周
unsignedchartime_buf[16];//空年月日时分秒周
/*向DS1302写入一字节数据*/
voidds1302_write_byte(ucharadd,uchard){
uchari;
rst=1;/*启动DS1302总线*/
/*写入目标地址:
addr*/
add=add&0xfe;/*最低位置零*/
for(i=0;i<8;i++){
if(add&0x01){
sda=1;
}
else{
sda=0;
}
sck=1;
sck=0;
add=add>>1;
}
/*写入数据:
d*/
for(i=0;i<8;i++){
if(d&0x01){
sda=1;
}
else{
sda=0;
}
sck=1;
sck=0;
d=d>>1;
}
rst=0;/*停止DS1302总线*/
}
/*从DS1302读出一字节数据*/
uchards1302_read_byte(ucharadd)
{
uchari;
uchartemp;
rst=1;/*启动DS1302总线*/
/*写入目标地址:
addr*/
add=add|0x01;/*最低位置高*/
for(i=0;i<8;i++){
if(add&0x01){
sda=1;;
}
else{
sda=0;
}
sck=1;
sck=0;
add=add>>1;
}
/*输出数据:
temp*/
for(i=0;i<8;i++){
temp=temp>>1;
if(sda==1){
temp|=0x80;
}
else{
temp&=0x7f;
}
sck=1;
sck=0;
}
rst=0;/*停止DS1302总线*/
returntemp;
}
/*向DS302写入时钟数据*/
voidds1302_write_time()
{
unsignedchari,tmp;
for(i=1;i<8;i++){//BCD处理
tmp=time_buf1[i]/10;
time_buf[i]=time_buf1[i]%10;
time_buf[i]=time_buf[i]+tmp*16;
}
ds1302_write_byte(ds1302_control_add,0x00);//关闭写保护
ds1302_write_byte(ds1302_sec_add,0x80);//暂停
ds1302_write_byte(ds1302_charger_add,0xa9);//涓流充电
ds1302_write_byte(ds1302_year_add,time_buf[1]);//年
ds1302_write_byte(ds1302_month_add,time_buf[2]);//月
ds1302_write_byte(ds1302_date_add,time_buf[3]);//日
ds1302_write_byte(ds1302_hr_add,time_buf[4]);//时
ds1302_write_byte(ds1302_min_add,time_buf[5]);//分
ds1302_write_byte(ds1302_sec_add,time_buf[6]);//秒
ds1302_write_byte(ds1302_day_add,time_buf[7]);//周
ds1302_write_byte(ds1302_control_add,0x80);//打开写保护
}
/*从DS302读出时钟数据*/
voidds1302_read_time()
{
uchari,tmp;
time_buf[1]=ds1302_read_byte(ds1302_year_add);//年
time_buf[2]=ds1302_read_byte(ds1302_month_add);//月
time_buf[3]=ds1302_read_byte(ds1302_date_add);//日
time_buf[4]=ds1302_read_byte(ds1302_hr_add);//时
time_buf[5]=ds1302_read_byte(ds1302_min_add);//分
time_buf[6]=ds1302_read_byte(ds1302_sec_add);//秒
time_buf[7]=ds1302_read_byte(ds1302_day_add);//周
for(i=1;i<8;i++)
{//BCD处理
tmp=time_buf[i]/16;
time_buf1[i]=time_buf[i]%16;
time_buf1[i]=time_buf1[i]+tmp*10;
}
}
/*DS302初始化函数*/
voidds1302_init()
{
rst=0;/*RST脚置低*/
sck=0;/*SCK脚置低*/
}
voidwrite_sfm(uchardate)
{
ucharshi,ge;
shi=date/10;
ge=date%10;
//write_com(0x90+add);
write_data(0x30+shi);
write_data(0x30+ge);
}
voidwrite_nyr(uchardate)
{
ucharshi,ge;
shi=date/10;
ge=date%10;
//write_com(0x90+add);
write_data(0x30+shi);
write_data(0x30+ge);
}
voidwrite_xq(uchardate)
{
//write_com(0x90+add);
switch(date)
{
case1:
write_data('M');break;
case2:
write_data('T');break;
case3:
write_data('W');break;
case4:
write_data('T');break;
case5:
write_data('F');break;
case6:
write_data('S');break;
case7:
write_data('s');break;
}
}
voidds1302_display()
{
write_com(0x88);
//write_nyr(tempdata[1]);
write_nyr(tempdata[2]);
write_data('-');
write_nyr(tempdata[3]);
write_data('');
write_sfm(tempdata[4]);
write_data(':
');
write_sfm(tempdata[5]);
write_data(':
');
write_sfm(tempdata[6]);
write_data('');
write_xq(tempdata[7]);
//if((tempdata[4]==0x13)&&(tempdata[5]==0x38)&&(tempdata[6]==0x00))
//beez=1;
//if((tempdata[4]==0x13)&&(tempdata[5]==0x38)&&(tempdata[6]==0x05))
//beez=0;
write_com(0x98);
if(tempdata[2]==0x01&&tempdata[3]==0x01){dis("HappyNewYear!
!
");}//1月
if(tempdata[2]==0x01&&tempdata[3]==0x1c){dis("世界麻风日");}
if(tempdata[2]==0x02&&tempdata[3]==0x02){dis("世界湿地日");}//2月
if(tempdata[2]==0x02&&tempdata[3]==0x0d){dis("明天情人节了");}
if(tempdata[2]==0x02&&tempdata[3]==0x0e){dis("今天是情人节");}
if(tempdata[2]==0x03&&tempdata[3]==0x01){dis("国际海豹日");}//3月
if(tempdata[2]==0x03&&tempdata[3]==0x03){dis("全国爱耳日");}
if(tempdata[2]==0x03&&tempdata[3]==0x08){dis("3.8妇女节");}
if(tempdata[2]==0x03&&tempdata[3]==0x0c){dis("植树节");}
if(tempdata[2]==0x03&&tempdata[3]==0x0e){dis("国际警察日");}
if(tempdata[2]==0x03&&tempdata[3]==0x0f){dis("消费者权益日");}
if(tempdata[2]==0x03&&tempdata[3]==0x11){dis("国际航海日");}
if(tempdata[2]==0x03&&tempdata[3]==0x15){dis("世界森林日");}
if(tempdata[2]==0x03&&tempdata[3]==0x16){dis("世界水日");}
if(tempdata[2]==0x03&&tempdata[3]==0x17){dis("世界气象日");}
if(tempdata[2]==0x03&&tempdata[3]==0x18){dis("世界防治结核病日");}
if(tempdata[2]==0x04&&tempdata[3]==0x01){dis("愚人节小心上当");}//4
if(tempdata[2]==0x04&&tempdata[3]==0x07){dis("世界卫生日");}
if(tempdata[2]==0x04&&tempdata[3]==0x08){dis("复活节");}
if(tempdata[2]==0x04&&tempdata[3]==0x0d){dis("黑色星期五");}
if(tempdata[2]==0x05&&tempdata[3]==0x01){dis("劳动节放假");}//5
if(tempdata[2]==0x05&&tempdata[3]==0x04){dis("青年节");}
if(tempdata[2]==0x05&&tempdata[3]==0x08){dis("世界红十字日");}
if(tempdata[2]==0x05&&tempdata[3]==0x0c){dis("国际护士节");}
if(tempdata[2]==0x05&&tempdata[3]==0x05){dis("近日注意母亲节");}
if(tempdata[2]==0x05&&tempdata[3]==0x15){dis("国际家庭日");}
if(tempdata[2]==0x05&&tempdata[3]==0x1f){dis("世界无烟日");}
if(tempdata[2]==0x06&&tempdata[3]==0x01){dis("国际儿童节");}//6
if(tempdata[2]==0x06&&tempdata[3]==0x05){dis("世界环境日");}
if(tempdata[2]==0x06&&tempdata[3]==0x1a){dis("国际禁毒日");}
if(tempdata[2]==0x06&&tempdata[3]==0x06){dis("全国爱眼日");}
if(tempdata[2]==0x06&&tempdata[3]==0x0d){dis("近日注意父亲节");}
if(tempdata[2]==0x06&&tempdata[3]==0x0f){dis("近日注意父亲节");}
if(tempdata[2]==0x07&&tempdata[3]==0x01){dis("香港回归记念日");}//7
if(tempdata[2]==0x07&&tempdata[3]==0x07){dis("抗日战争记念日");}
if(tempdata[2]==0x07&&tempdata[3]==0x0b){dis("世界人口日");}
if(tempdata[2]==0x08&&tempdata[3]==0x01){dis("八一建军节");}//8
if(tempdata[2]==0x08&&tempdata[3]==0x08){dis("中国男子节");}
if(tempdata[2]==0x08&&tempdata[3]==0x0f){dis("抗战胜利记念日");}
if(tempdata[2]==0x09&&tempdata[3]==0x10){dis("中国教师节");}//9
if(tempdata[2]==0x09&&tempdata[3]==0x12){dis("九·一八事变记念");}
if(tempdata[2]==0x09&&tempdata[3]==0x14){dis("国际爱牙日");}
if(tempdata[2]==0x09&&tempdata[3]==0x1b){dis("世界旅游日");}
if(tempdata[2]==0x0a&&tempdata[3]==0x01){dis("中国国庆节");}//10
if(tempdata[2]==0x0a&&tempdata[3]==0x04){dis("世界动物日");}
if(tempdata[2]==0x0a&&tempdata[3]==0x18){dis("联合国日");}
if(tempdata[2]==0x0a&&tempdata[3]==0x0c){dis("明天国际教师节");}
if(tempdata[2]==0x0a&&tempdata[3]==0x0d){dis("国际教师节");}
if(tempdata[2]==0x0b&&tempdata[3]==0x0a){dis("世界青年节");}//11
if(tempdata[2]==0x0b&&tempdata[3]==0x11){dis("世界学生节");}
if(tempdata[2]==0x0c&&tempdata[3]==0x01){dis("世界艾滋病日");}//12
if(tempdata[2]==0x0c&&tempdata[3]==0x17){dis("明晚平安夜");}
if(tempdata[2]==0x0c&&tempdata[3]==0x18){dis("今晚平安夜");}
if(tempdata[2]==0x0c&&tempdata[3]==0x19){dis("圣诞快乐");}
if(tempdata[2]==0x0c&&tempdata[3]==0x1f){dis("明日新年");}
else{
if(tempdata[4]>=0x04&&tempdata[4]<0x06){dis("★★__▲▲__凌晨");}
if(tempdata[4]>=0x06&&tempdata[4]<=0x08){dis("☆○__▲△__早晨");}
if(tempdata[4]>=0x08&&tempdata[4]<0x0c){dis("__●__▲▲__上午");}
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 12864 万年历 闹钟 温度