//if(read_clock(0x8b) != xq){
xq = read_clock(0x8b);
sel = (read_clock(0x8b))%16; //字节低4位的BCD码放入sel
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_test(1,0xc8);lcm_w_test(1,0xfd);} //此指令等于lcm_w_word("三"); 因为“三”的内码失效。
if(sel==2) {lcm_w_word("二");} //
if(sel==1) {lcm_w_word("一");} //星期一
lcm_w_test(0,0x95);
lcm_w_word("星期");
//}
}
/*****************************************************************************/
//向LCM中填写 日 数据
void lcm_w_dd(void){
// if(read_clock(0x87) != dd){
dd = read_clock(0x87);
lcm_w_test(0,0x92);
if(dd/16 != 0){lcm_w_test(1,(dd/16)+0x30);} //十位消隐
else{lcm_w_test(1,0x20);}//同上
lcm_w_test(1,dd%16+0x30);
lcm_w_test(0,0x93);
lcm_w_word("日 ");
} //}
/*****************************************************************************/
//向LCM中填写 小时 数据
void lcm_w_hh(void){
if(read_clock(0x85) != hh){
hh = read_clock(0x85);
if (hh > 0x07 && hh < 0x22 && w == 0){
beep = 0; led_r = 0;
DelayM(100);
beep = 1; led_r = 1;
}
}
lcm_w_test(0,0x88);
lcm_w_test(1,(hh/16)+0x30);
lcm_w_test(1,hh%16+0x30);
} //}
/*****************************************************************************/
//向LCM中填写 分钟 数据
void lcm_w_mm(void){
if(read_clock(0x83) != mm){
mm = read_clock(0x83);
if( w == 0){
days(); //节日显示
updata (); //刷新数据
}
}
lcm_w_test(0,0x89);
lcm_w_test(1,0x3a); //":"
lcm_w_test(1,(mm/16)+0x30);
lcm_w_test(1,mm%16+0x30);
lcm_w_test(1,0x2e); //"."
}
/*****************************************************************************/
//刷新数据
void updata (void){
lcm_w_hh();//刷新 小时
lcm_w_dd();//刷新 日
lcm_w_xq();//更新星期值
lcm_w_mo();//刷新 月
lcm_w_yy();//刷新 年
}
/*****************************************************************************/
//向LCM中填写 秒 数据
void lcm_w_ss(void){
unsigned int i=0;
unsigned char a=0,b=0,c=0;
if(read_clock(0x81) != ss){ //判断是否需要更新
ss = read_clock(0x81); //更新数据
lcm_w_test(0,0x8b); //秒值在LCM上的写入位置
lcm_w_test(1,(ss/16)+0x30); //写十位
lcm_w_test(1,ss%16+0x30); //写个位
led_b = ~led_b; //背光闪烁
lcm_w_mm();//刷新 分
lcm_w_test(0,0x8d); //温度在LCM上的写入位置
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
} }
/*****************************************************************************/
//---主程序---//
main() {
unsigned char e=0;
KEY_I = 0;KEY_1 = 1;KEY_2 = 1;KEY_3 = 1;KEY_4 = 1;//初始键盘
yy=0xff;mo=0xff;dd=0xff;xq=0xff;hh=0xff;mm=0xff;ss=0xff; //各数据刷新
beep = 0;
DelayM(900);
beep = 1;
lcm_init();//初始化液晶显示器
lcm_clr();//清屏
lcm_w_word(" 12864LcdClock Hello !! from DoYoung.net");//显示欢迎字
//----------|-------1-------|-------3-------|-------2-------|-------4-------|-----//标尺
DelayM(3000); //显示等留3秒
//lcm_w_test(0,0x80);
//lcm_w_word("[Dis] [Set]");
while(1){
if (w == 0){ //正常走时
lcm_w_ss();//刷新 秒
}
else { //启动调时
}
//------------------------------------------------------------------
if (KEY_3 == 0) // 设置时间
{
DelayM(20); //去抖
led_g3 = 0;led_r = 1;
if(KEY_3 == 0 && w == 1) //当是调时状态 本键用于调整下一项
{
e++;
if (e >= 6 ){e = 0;}
Set_time(e);//调整
}
if(KEY_3 == 0 && w == 0) //当是正常状态时就进入调时状态
{
led_b = 1;//
lcm_clr();//清屏
//yy=0xff;mo=0xff;dd=0xff;xq=0xff;hh=0xff;mm=0xff;ss=0xff; //各数据刷新
w=1; //进入调时
lcm_w_test(0,0x9e);
lcm_w_word(" [-]");
lcm_w_test(0,0x80);
lcm_w_word("[Esc]");
lcm_w_test(0,0x85);
lcm_w_word("[Next]");
lcm_w_test(0,0x98);
lcm_w_word("[+]");
Set_time(e);//调整
本文关键字:万年历 自动控制-单片机,电子制作 - 自动控制-单片机
上一篇:电子万年历