您当前的位置:五五电子网电子知识电子制作自动控制-单片机128X64LCD万年历(网友作品) 正文
128X64LCD万年历(网友作品)

128X64LCD万年历(网友作品)

点击数:7851 次   录入时间:03-04 11:52:37   整理:http://www.55dianzi.com   自动控制-单片机
 unsigned char dd=0;
 clock_clk=0;
 clock_Rst=0;
 clock_Rst=1;
 clock_out(ord);
 dd=clock_in();
 clock_Rst=0;
 clock_clk=1;
 return(dd);
}
/*****************************************************************************/
//向LCM中填写 年 数据
void lcm_w_yy(void){
 //if(read_clock(0x8d) != yy){
  yy = read_clock(0x8d);
  lcm_w_test(0,0x83);
  lcm_w_word("20");
  lcm_w_test(0,0x84);
  lcm_w_test(1,(yy/16)+0x30); 
  lcm_w_test(1,yy%16+0x30);
} //}
/*****************************************************************************/
//向LCM中填写 月 数据
void lcm_w_mo(void){
 //if(read_clock(0x89) != mo){
  mo = read_clock(0x89);
  lcm_w_test(0,0x90);
   if(mo/16 != 0){lcm_w_test(1,(mo/16)+0x30);} //十位消隐
   else{lcm_w_test(1,0x20);}//同上   
  lcm_w_test(1,mo%16+0x30);
  lcm_w_test(0,0x91);
  lcm_w_word("月");
} //}
/*****************************************************************************/
//星期处理并送入LCM的指定区域
void lcm_w_xq(void){
 unsigned char sel;

 //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);//调整

上一页  [1] [2] [3] [4] [5]  下一页


本文关键字:万年历  自动控制-单片机电子制作 - 自动控制-单片机

上一篇:电子万年历