📄 ds12cr887mnl.c
字号:
if ( month == 10 && date == 1 ){ lcm_w_word(" 中国国庆节 "); }//10
if ( month == 10 && date == 4 ){ lcm_w_word(" 世界动物日 "); }
if ( month == 10 && date == 24 ){ lcm_w_word(" 联合国日 "); }
if ( month == 10 && date == 12 ){ lcm_w_word("明天是国际教师节"); }
if ( month == 10 && date == 13 ){ lcm_w_word(" 国际教师节 "); }
if ( month == 11 && date == 10 ){ lcm_w_word(" 世界青年节 "); }//11
if ( month == 11 && date == 17 ){ lcm_w_word(" 世界学生节 "); }
if ( month == 12 && date == 1 ){ lcm_w_word(" 世界艾滋病日 "); }//12
if ( month == 12 && date == 23 ){ lcm_w_word(" 明晚平安夜 "); }
if ( month == 12 && date == 24 ){ lcm_w_word(" 今晚平安夜 "); }
if ( month == 12 && date == 25 ){ lcm_w_word(" 圣诞快乐 "); }
if ( month == 12 && date == 31 ){ lcm_w_word(" 明日新年 "); }
else{
if ( hour >= 4 && hour < 6 ){ lcm_w_word("★★__▲▲__凌晨"); }
if ( hour >= 6 && hour < 8 ){ lcm_w_word("☆○__▲△__早晨"); }
if ( hour >= 8 && hour < 12 ){ lcm_w_word("__●__▲▲__上午"); }
if ( hour == 12) { lcm_w_word("____▲●▲__中午"); }
if ( hour >= 13 && hour < 18 ){ lcm_w_word("__▲▲__●__下午"); }
if ( hour >= 18 && hour < 22 ){ lcm_w_word("△▲__●☆__晚上"); }
if ( hour >= 22 && hour <= 23 ){ lcm_w_word("△▲__★☆__夜里"); }
if ( hour >= 0 && hour < 4 ){ lcm_w_word("__★▲▲★__深夜"); }
}
}
/*电子时钟在液晶屏上显示驱动程序---------------------------------------------*/
//往液晶屏填写 年 数据
void lcm_w_year(void)
{
year=ds_read(9);
lcm_w_test(0,0x80);//在液晶屏上显示的位置
lcm_w_word("现在时间是20");
lcm_w_test(0,0x86);//在LCM上的写入位置
lcm_w_test(1,(year/10)+0x30);
lcm_w_test(1,year%10+0x30);
lcm_w_word("年");
}
//往液晶屏填写 月 数据
void lcm_w_month(void)
{
month=ds_read(8);
lcm_w_test(0,0x90); //月份在液晶屏上显示的位置
if(month/10 != 0){lcm_w_test(1,(month/10)+0x30);} //十位消隐
else{lcm_w_test(1,0x20);}//十位消隐
lcm_w_test(1,month%10+0x30);
lcm_w_test(0,0x91);//在LCM上的写入位置
lcm_w_word("月");
}
//将星期处理并送入液晶屏的指定区域显示
void lcm_w_day(void)
{
uchar sel;
day = ds_read(6);
sel = ds_read(6);
lcm_w_test(0,0x97);//写入指定区域(97H 第二行第8个字)在液晶屏上显示的位置
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("一");} //星期一
lcm_w_test(0,0x95); //在LCM上的写入位置
lcm_w_word("星期");
}
//往液晶屏填写 日 数据
void lcm_w_date(void)
{
date=ds_read(7);
lcm_w_test(0,0x92); //日期在液晶屏上显示的位置
if(date/10 != 0){lcm_w_test(1,(date/10)+0x30);} //十位消隐
else{lcm_w_test(1,0x20);}//十位消隐
lcm_w_test(1,date%10+0x30);
lcm_w_test(0,0x93); //在LCM上的写入位置
lcm_w_word("日");
}
//往液晶屏填写 小时 数据
void lcm_w_hour(void)
{
hour=ds_read(4);//读取DS12CR887的小时
lcm_w_test(0,0x88); //小时在液晶屏上显示的位置
lcm_w_test(1,(hour/10)+0x30);
lcm_w_test(1,hour%10+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/10)+0x30);
lcm_w_test(1,min%10+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/10)+0x30); //写十位//对10求余分解出十位
lcm_w_test(1,sec%10+0x30); //写个位
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,0x9a);
lcm_w_word("调整");
if(sel==5) {lcm_w_word("分钟");address=2; max=59;mini=0;} //分钟2
if(sel==4) {lcm_w_word("小时");address=4; max=23;mini=0;} //小时4
if(sel==3) {lcm_w_word("星期");address=6; max=7; mini=1;} //星期6
if(sel==2) {lcm_w_word("日期");address=7; max=31;mini=1;} //日期7
if(sel==1) {lcm_w_word("月份");address=8; max=12;mini=1;} //月份8
if(sel==0) {lcm_w_word("年份");address=9; max=99; mini=0;} //年份9
//读取DS12CR887某地址上的数值赋给item
item=ds_read(address);
if(K3 == 0)//K3-加
{
item++;//数加 1
}
if(K4 == 0)//K4-减
{
item--;//数减 1
}
if(item>max)
item=mini;//查看数值有效范围
if(item<mini)
item=max;
//将调整好的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 welcome(void)
{
write_com(0x81);//第一行(如果是地址是:80H,即LCD的第一行的第一个位置显示)
lcm_w_word("电子智能时钟");
write_com(0x90);//第二行(如果是地址是:90H,即LCD的第二行的第一个位置显示)
lcm_w_word("DS12887+LCM12864");
write_com(0x88);//第三行(如果是地址是:88H,即LCD的第二行的第一个位置显示)
lcm_w_word("※程序设计: 七品");
write_com(0x98);//第四行(如果是地址是:98H,即LCD的第二行的第一个位置显示)
lcm_w_word("☆2009年02月11日");
}
/*主程序---------------------------------------------------------------------*/
main()
{
uchar e=0;
K1=1;K2=1;K3=1;K4=1;
ds_int(); //初始化DS12CR887
lcm_init(); //初始化液晶显示器
lcm_clr(); //清屏
welcome(); //显示欢迎信息
DelayM(3000); //显示停留3秒
lcm_clr(); //清屏
while(1)
{
if (w == 0) //正常走时
{
lcm_w_year(); //显示年
lcm_w_month(); //显示月
lcm_w_date(); //显示日
lcm_w_day(); //显示星期
lcm_w_hour(); //显示时
lcm_w_min(); //显示分
lcm_w_sec(); //显示秒
days(); //显示节日提示
}
else {}//否则启动调时
if (K1 == 0) // 设置时间
{
DelayM(20); //按键消抖
if(K1 == 0 && w == 1) //当是调时状态 本键用于调整下一项
{
e++;
if (e >= 6 )
{
e = 0;
}
Set_time(e);//调整
}
if(K1 == 0 && w == 0) //当是正常状态时就进入调时状态
{
lcm_clr();//清屏
w=1; //进入调时
Set_time(e);//调整
}
while(K1 == 0);//等待键松开
}
if (K2 == 0) // 当在调时状态时就退出调时
{
DelayM(20);//按键消抖
if(K2 == 0 && w == 1)
{
w = 0; //退出调时
e = 0; //"下一项"计数器清0
}
if(K2 == 0 && w == 0)
{
lcm_clr();//清屏
welcome();//显示欢迎字
while(K2 == 0);//等待键松开
}
lcm_clr();//清屏
lcm_w_year(); //年
lcm_w_month(); //月
lcm_w_date(); //日
lcm_w_day(); //星期
lcm_w_hour(); //时
lcm_w_min(); //分
lcm_w_sec(); //秒
days(); //显示节日提示
while(K2 == 0);//等待键松开
}
if (K3 == 0 && w == 1)//加调整
{
DelayM(20);//按键消抖
if(K3 == 0 && w == 1)
{
Set_time(e);//调整
}
while(K3 == 0);//等待键松开
}
if (K4 == 0 && w == 1) //减调整
{
DelayM(20);//按键消抖
if(K4 == 0 && w == 1)
{
Set_time(e);//调整
}
while(K4 == 0);//等待键松开
}
}
}
/*----------------------------文件结束-------------------------*/
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -