📄 多功能电子时钟 c程序.c
字号:
void lcm_w_word(uchar *s)
{
while(*s>0)
{
write_data(*s);
s++;
}
}
//写指令或数据(被调用层)
void lcm_w_test(bit i,uchar word)
{
if(i == 0)
{
write_com(word);//写指令或数据(0,指令)
}
else
{
write_data(word);//写指令或数据(1,数据)
}
}
//清屏函数
void lcm_clr(void)
{
lcm_w_test(0,0x01);
}
/*DS18B20驱动程序------------------------------------------------------------*/
//初始化ds1820函数
void Init_DS18B20(void)
{
uchar x=0;
DQ = 1; //DQ复位
Delay(8); //稍做延时
DQ = 0; //单片机将DQ拉低
Delay(80); //精确延时 大于 480us
DQ = 1; //拉高总线
Delay(14);
x=DQ; //稍做延时后 如果x=0则初始化成功 x=1则初始化失败
Delay(20);
}
//读一个字节函数
uchar ReadOneChar(void)
{
uchar i=0;
uchar dat = 0;
for (i=8;i>0;i--)
{
DQ = 0; // 给脉冲信号
dat>>=1;
DQ = 1; // 给脉冲信号
if(DQ)
dat|=0x80;
Delay(4);
}
return(dat);
}
//写一个字节函数
void WriteOneChar(uchar dat)
{
uchar i=0;
for (i=8; i>0; i--)
{
DQ = 0;
DQ = dat&0x01;
Delay(5);
DQ = 1;
dat>>=1;
}
}
//读取温度函数
uint ReadTemperature(void)
{
uchar a=0;
uchar b=0;
uint t=0;
float tt=0;
Init_DS18B20();
WriteOneChar(0xCC); // 跳过读序号列号的操作
WriteOneChar(0x44); // 启动温度转换
Init_DS18B20();
WriteOneChar(0xCC); //跳过读序号列号的操作
WriteOneChar(0xBE); //读取温度寄存器
a=ReadOneChar(); //读低8位
b=ReadOneChar(); //读高8位
t=b;
t<<=8;
t=t|a;
tt=t*0.0625;
t= tt*10+0.5; //放大10倍输出并四舍五入
return(t);
}
// 节假日 提示
void days(void)
{
lcm_w_test(0,0x98);
if ( cen == 0x20 && year == 0x9 && month == 0x0 && date == 0x0 ){ lcm_w_word("Happy birthday!!"); if(hour==0x7 && min==0x0 && sec==0x0){Play(Music_happy,0,3,300);}}
else
{
if ( month_moon == 0x0 && date_moon == 0x0 ) { lcm_w_word("祝你生日快乐!! "); if(hour==0x7 && min==0x0 && sec==0x0){Play(Music_happy,0,3,300);}}
if ( month_moon == 0x0 && date_moon == 0x0 ) { lcm_w_word("妹妹的生日!! "); }
if ( month_moon == 0x0 && date_moon == 0x0 ) { lcm_w_word("弟弟的生日!! "); }
if ( month_moon == 0x0 && date_moon == 0x0 ) { lcm_w_word(" 的生日!! "); }
else
{
if (month_moon== 0x1 && date_moon == 0x1 ){ lcm_w_word(" 今日春节 "); }
if (month_moon== 0x1 && date_moon == 0x15 ){ lcm_w_word(" 元宵节快乐 "); }
if (month_moon== 0x2 && date_moon == 0x2 ){ lcm_w_word(" 青龙节 "); }
if (month_moon== 0x5 && date_moon == 0x5 ){ lcm_w_word(" 端午节 "); }
if (month_moon== 0x7 && date_moon == 0x7 ){ lcm_w_word("七七中国情人节 "); }
if (month_moon== 0x7 && date_moon == 0x15 ){ lcm_w_word(" 中元节 "); }
if (month_moon== 0x8 && date_moon == 0x15 ){ lcm_w_word(" 中秋节快乐 "); }
if (month_moon== 0x9 && date_moon == 0x9 ){ lcm_w_word(" 今日重阳节 "); }
if (month_moon== 0x12 && date_moon == 0x8 ){ lcm_w_word(" 今日腊八节 "); }
if (month_moon== 0x12 && date_moon == 0x15 ){ lcm_w_word(" 过小年 "); }
if (month_moon== 0x12 && date_moon == 0x29 ){ lcm_w_word(" 腊月二十九 "); }
if (month_moon== 0x12 && date_moon == 0x30 ){ lcm_w_word(" 大年三十(^o^) "); }
if ( month == 0x1 && date == 0x1 ){ lcm_w_word(" 元旦快乐 "); }//1月
if ( month == 0x1 && date == 0x28 ){ lcm_w_word(" 世界麻风日 "); }
if ( month == 0x2 && date == 0x2 ){ lcm_w_word(" 世界湿地日 "); }//2月
if ( month == 0x2 && date == 0x13 ){ lcm_w_word(" 明天情人节了 "); }
if ( month == 0x2 && date == 0x14 ){ lcm_w_word(" 今天是情人节 "); }
if ( month == 0x3 && date == 0x1 ){ lcm_w_word(" 国际海豹日 "); }//3月
if ( month == 0x3 && date == 0x3 ){ lcm_w_word(" 全国爱耳日 "); }
if ( month == 0x3 && date == 0x8 ){ lcm_w_word("国际劳动妇女节 "); }
if ( month == 0x3 && date == 0x12 ){ lcm_w_word(" 植树节 "); }
if ( month == 0x3 && date == 0x14 ){ lcm_w_word(" 国际警察日 "); }
if ( month == 0x3 && date == 0x15 ){ lcm_w_word(" 消费者权益日 "); }
if ( month == 0x3 && date == 0x17 ){ lcm_w_word(" 国际航海日 "); }
if ( month == 0x3 && date == 0x21 ){ lcm_w_word(" 世界森林日 "); }
if ( month == 0x3 && date == 0x22 ){ lcm_w_word(" 世界水日 "); }
if ( month == 0x3 && date == 0x23 ){ lcm_w_word(" 世界气象日 "); }
if ( month == 0x3 && date == 0x24 ){ lcm_w_word("世界防治结核病日"); }
if ( month == 0x4 && date == 0x1 ){ lcm_w_word("愚人节 小心上当"); }//4
if ( month == 0x4 && date == 0x7 ){ lcm_w_word(" 世界卫生日 "); }
if ( month == 0x4 && date == 0x8 ){ lcm_w_word(" 复活节 "); }
if ( month == 0x4 && date == 0x13 ){ lcm_w_word(" 黑色星期五 "); }
if ( month == 0x5 && date == 0x1 ){ lcm_w_word("五一国际劳动节 "); }//5
if ( month == 0x5 && date == 0x4 ){ lcm_w_word(" 青年节 "); }
if ( month == 0x5 && date == 0x8 ){ lcm_w_word(" 世界红十字日 "); }
if ( month == 0x5 && date == 0x12 ){ lcm_w_word(" 国际护士节 "); }
if ( month == 0x5 && date == 0x5 ){ lcm_w_word("近日请注意母亲节"); }
if ( month == 0x5 && date == 0x15 ){ lcm_w_word(" 国际家庭日 "); }
if ( month == 0x5 && date == 0x31 ){ lcm_w_word(" 世界无烟日 "); }
if ( month == 0x6 && date == 0x1 ){ lcm_w_word(" 国际儿童节 "); }//6
if ( month == 0x6 && date == 0x5 ){ lcm_w_word(" 世界环境日 "); }
if ( month == 0x6 && date == 0x26 ){ lcm_w_word(" 国际禁毒日 "); }
if ( month == 0x6 && date == 0x6 ){ lcm_w_word(" 全国爱眼日 "); }
if ( month == 0x6 && date == 0x13 ){ lcm_w_word("近日请注意父亲节"); }
if ( month == 0x6 && date == 0x15 ){ lcm_w_word("近日请注意父亲节"); }
if ( month == 0x7 && date == 0x1 ){ lcm_w_word(" 七一党生日 "); }//7
if ( month == 0x7 && date == 0x7 ){ lcm_w_word("抗日战争纪念日 "); }
if ( month == 0x7 && date == 0x11 ){ lcm_w_word(" 世界人口日 "); }
if ( month == 0x8 && date == 0x1 ){ lcm_w_word(" 八一建军节 "); }//8
if ( month == 0x8 && date == 0x8 ){ lcm_w_word(" 中国男子节 "); }
if ( month == 0x8 && date == 0x15 ){ lcm_w_word("抗战胜利纪念日 "); }
if ( month == 0x9 && date == 0x10 ){ lcm_w_word(" 中国教师节 "); }//9
if ( month == 0x9 && date == 0x18 ){ lcm_w_word("九一八事变纪念日"); }
if ( month == 0x9 && date == 0x20 ){ lcm_w_word(" 国际爱牙日 "); }
if ( month == 0x9 && date == 0x27 ){ lcm_w_word(" 世界旅游日 "); }
if ( month == 0x10 && date == 0x1 ){ lcm_w_word(" 中国国庆节 "); }//10
if ( month == 0x10 && date == 0x4 ){ lcm_w_word(" 世界动物日 "); }
if ( month == 0x10 && date == 0x24 ){ lcm_w_word(" 联合国日 "); }
if ( month == 0x10 && date == 0x12 ){ lcm_w_word("明天是国际教师节"); }
if ( month == 0x10 && date == 0x13 ){ lcm_w_word(" 国际教师节 "); }
if ( month == 0x11 && date == 0x10 ){ lcm_w_word(" 世界青年节 "); }//11
if ( month == 0x11 && date == 0x17 ){ lcm_w_word(" 世界学生节 "); }
if ( month == 0x12 && date == 0x1 ){ lcm_w_word(" 世界艾滋病日 "); }//12
if ( month == 0x12 && date == 0x23 ){ lcm_w_word(" 明晚平安夜 "); }
if ( month == 0x12 && date == 0x24 ){ lcm_w_word(" 今晚平安夜 "); }
if ( month == 0x12 && date == 0x25 ){ lcm_w_word(" 圣诞快乐 "); }
if ( month == 0x12 && date == 0x31 ){ lcm_w_word(" 明日新年 "); }
}
}
}
/*电子时钟在液晶屏上显示驱动程序---------------------------------------------*/
//往液晶屏填写 年 数据
void lcm_w_year(void)
{
cen=ds_read(32);
lcm_w_test(0,0x80);//在液晶屏上显示的位置
lcm_w_test(1,(cen/16)+0x30);
lcm_w_test(1,cen%16+0x30);
year=ds_read(9);
lcm_w_test(0,0x81);//在LCM上的写入位置
lcm_w_test(1,(year/16)+0x30);
lcm_w_test(1,year%16+0x30);
lcm_w_test(0,0x82);
lcm_w_word("农");
lcm_w_test(0,0x84);
lcm_w_word("年");
nl();
}
//往液晶屏填写 月 数据
void lcm_w_month(void)
{
month=ds_read(8);
lcm_w_test(0,0x94); //月份在液晶屏上显示的位置
if(month/16 != 0){lcm_w_test(1,(month/16)+0x30);} //十位消隐
else{lcm_w_test(1,0x20);}//十位消隐
lcm_w_test(1,month%16+0x30);
lcm_w_test(0,0x95);//在LCM上的写入位置
lcm_w_word("月");
nl();
}
//将星期处理并送入液晶屏的指定区域显示
void lcm_w_day(void)
{
uchar sel;
day = ds_read(6);
sel = ds_read(6);
lcm_w_test(0,0x90);
lcm_w_word("星期");
lcm_w_test(0,0x92);
if(sel==7) {lcm_w_word("日");}
if(sel==6) {lcm_w_word("六");}
if(sel==5) {lcm_w_word("五");}
if(sel==4) {lcm_w_word("四");}
if(sel==3) {lcm_w_word("三");}
if(sel==2) {lcm_w_word("二");}
if(sel==1) {lcm_w_word("一");}
}
//往液晶屏填写 日 数据
void lcm_w_date(void)
{
date=ds_read(7);
lcm_w_test(0,0x96); //日期在液晶屏上显示的位置
if(date/16 != 0){lcm_w_test(1,(date/16)+0x30);} //十位消隐
else{lcm_w_test(1,0x20);}//十位消隐
lcm_w_test(1,date%16+0x30);
lcm_w_test(0,0x97); //在LCM上的写入位置
lcm_w_word("日");
nl();
}
//往液晶屏填写 小时 数据
void lcm_w_hour(void)
{
hour=ds_read(4);//读取DS12CR887的小时
lcm_w_test(0,0x88); //小时在液晶屏上显示的位置
lcm_w_test(1,(hour/16)+0x30);
lcm_w_test(1,hour%16+0x30);
}
//往液晶屏填写 分钟 数据
void lcm_w_min(void)
{
min=ds_read(2);//读取DS12CR887的分
lcm_w_test(0,0x89); //分钟在液晶屏上显示的位置
lcm_w_test(1,0x3a); //小时与分钟之间显示":"
lcm_w_test(1,(min/16)+0x30);
lcm_w_test(1,min%16+0x30);
lcm_w_test(1,0x3a); //分钟与小时之间显示":"
}
//往液晶屏填写 秒 数据
void lcm_w_sec(void)
{
uint i=0;
uchar a=0,b=0,c=0;
sec=ds_read(0);//读取DS12CR887的秒
lcm_w_test(0,0x8b); //秒钟在液晶屏上显示的位置
lcm_w_test(1,(sec/16)+0x30); //写十位//对10求余分解出十位
lcm_w_test(1,sec%16+0x30); //写个位
write_com(0x8c);
if(r1_of==1 || r2_of==1){lcm_w_test(1,0x0e);}//闹铃开启状态
lcm_w_test(0,0x8d); //温度在液晶屏上显示的位置
i=ReadTemperature();//读温度并送显
a=i/100;
lcm_w_test(1,a+0x30); //显示温度十位
b=i/10-a*10;
lcm_w_test(1,b+0x30); //个位
lcm_w_test(1,0x2e); //"."
c=i-a*100-b*10;
lcm_w_test(1,c+0x30); //小数点位1位
lcm_w_word("℃"); //度C
}
/*调整时间、日期程序---------------------------------------------------------*/
void Set_time(uchar sel)
{
signed char address,item;
signed char max,mini;
lcm_w_test(0,0x98);
lcm_w_word("调整");
if(sel==6) {lcm_w_word("分钟");address=2; max=59;mini=0;}
if(sel==5) {lcm_w_word("小时");address=4; max=23;mini=0;}
if(sel==4) {lcm_w_word("星期");address=6; max=7;mini=1;}
if(sel==3) {lcm_w_word("日期");address=7; max=31; mini=1;}
if(sel==2) {lcm_w_word("月份");address=8; max=12;mini=1;}
if(sel==1) {lcm_w_word("年份");address=9; max=99;mini=0;}
if(sel==0) {lcm_w_word("世纪");address=32; max=20; mini=19;}
//读取DS12CR887某地址上的数值赋给item
item=ds_read(address);
item=(item/16)*10+item%16;
if(K3 == 0)//K3-加
{
item++;//数加 1
}
if(K4 == 0)//K4-减
{
item--;//数减 1
}
if(item>max)
item=mini;//查看数值有效范围
if(item<mini)
item=max;
item=(item/10)*16+item%10;
//将调整好的item值写入DS12CR887
ds_write(address,item);//+
lcm_w_year(); //年
lcm_w_month(); //月
lcm_w_date(); //日
lcm_w_day(); //星期
lcm_w_hour(); //时
lcm_w_min(); //
}
void lcm_ring() //显示闹铃设置
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -