⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 main.lst

📁 本程序是一个液晶时钟程序
💻 LST
📖 第 1 页 / 共 3 页
字号:
 182   1              lcdWriteCommand(FuncDrawOn);
 183   1              lcdWriteCommand(FunctionSetB);
 184   1      }
 185          /***************************************************************/
 186          //功能:向LCD写一个字符串
 187          //输入参数:行x,列y,每一位显示时间speed,显示字符串首地址msg
 188          void lcdword (uchar X, Y, speed, uchar *msg) 
 189          {
 190   1              if (X==0){ X=0x80;}
 191   1              else if (X==1){ X=0x90;}
 192   1              else if (X==2){ X=0x88;}
 193   1              else if (X==3){ X=0x98;}
 194   1              Y = X + Y;
 195   1              lcdWriteCommand(Y);
 196   1              while (*msg)
 197   1              { lcdWriteData(*msg++);delayMs(speed);}
 198   1      }
 199          /***************************************************************/
 200          //DS1302时钟芯片相关的驱动程序
 201          /***************************************************************/
 202          //功能:DS1302写入字节
 203          void clock_out(uchar dd)
 204          {  uchar i,temp;
 205   1              for ( i=8; i>0; i-- )        //循环8次移位
 206   1       {  temp=dd;
 207   2          clock_dat=(bit)(temp&0x01);  //每次传输低字节
 208   2          dd>>=1;                      //右移一位
 209   2          clock_clk=1; clock_clk=0;
 210   2        }
 211   1      }
 212          /***************************************************************/
 213          //功能:DS1302读入字节
 214          uchar clock_in(void)
 215          {  uchar i;     
 216   1         clock_dat=1;
 217   1         for(i=8;i>0;i-- )
 218   1         { ACC>>=1;a7=clock_dat;
 219   2           clock_clk=1; clock_clk=0;
 220   2          }
 221   1              return(ACC); 
 222   1      }
 223          /***************************************************************/
 224          //功能:DS1302读数据
 225          uchar read_clock(uchar ord)
 226          {       uchar dd=0;
 227   1              clock_clk=0;
 228   1              clock_Rst=0;
 229   1              clock_Rst=1;
 230   1              clock_out(ord);
 231   1              dd=clock_in();
 232   1              clock_Rst=0;
 233   1              clock_clk=1;
 234   1              return(dd);
 235   1      }
 236          /***************************************************************/
 237          //功能:DS1302写数据
 238          void write_clock(uchar ord, uchar dd)
 239          {       clock_clk=0;
 240   1              clock_Rst=0;
 241   1              clock_Rst=1;
C51 COMPILER V8.05a   MAIN                                                                 12/17/2007 10:55:25 PAGE 5   

 242   1              clock_out(ord);
 243   1              clock_out(dd);
 244   1              clock_Rst=0;
 245   1              clock_clk=1;
 246   1      }
 247          /***************************************************************/
 248          //功能:年月日星期小时分秒的时钟数据读取
 249          void read_clockS(void)
 250          {       ss = read_clock(0x81);//读取秒数据
 251   1              mm = read_clock(0x83);//读取分钟数据
 252   1              hh = read_clock(0x85);//小时
 253   1              dd = read_clock(0x87);//日
 254   1              mo = read_clock(0x89);//月
 255   1              xq = read_clock(0x8b);//星期
 256   1              yy = read_clock(0x8d);//年
 257   1      }
 258          /***************************************************************/
 259          //功能:设置1302的初始时间(2008年1月1日00时00分00秒星期二)
 260          void Init_1302(void)
 261          { uchar f;
 262   1              if(read_clock(0xc1) != 0xaa)
 263   1              {       write_clock(0x8e,0x00);//允许写操作
 264   2                      write_clock(0x8c,0x08);//年
 265   2                      write_clock(0x8a,0x02);//星期
 266   2                      write_clock(0x88,0x01);//月
 267   2                      write_clock(0x86,0x01);//日
 268   2                      write_clock(0x84,0x00);//小时
 269   2                      write_clock(0x82,0x00);//分钟
 270   2                      write_clock(0x80,0x00);//秒
 271   2                      write_clock(0x90,0xa5);//充电   
 272   2                      write_clock(0xc0,0xaa);//写入初始化标志RAM(第00个RAM位置)
 273   2                      for(f=0;f<60;f=f+2)
 274   2                      { write_clock(0xc2+f,0x00); }//清除闹钟RAM位为0
 275   2                      write_clock(0x8e,0x80);//禁止写操作
 276   2              }
 277   1      }
 278          /***************************************************************/
 279          //功能:公历节日数据库表
 280          void Festival (void) 
 281          {  //在屏幕第一行显示节日
 282   1                      if(mo==0x01&&dd==0x01){lcdword(0,0,1,"  新年快乐"); }//1月
 283   1                      else if( mo == 0x02 && dd == 0x10 ){ lcdword(0,0,1,"国际气象日"); }//2月        
 284   1                      else if( mo == 0x02 && dd == 0x14 ){ lcdword(0,0,1,"今天情人节"); }                             
 285   1                      else if( mo == 0x03 && dd == 0x08 ){ lcdword(0,0,1," 3.8妇女节"); }     //3月   
 286   1                      else if( mo == 0x03 && dd == 0x12 ){ lcdword(0,0,1,"  植树节  "); }                     
 287   1                      else if( mo == 0x03 && dd == 0x15 ){ lcdword(0,0,1,"国际消费日"); }                     
 288   1                      else if( mo == 0x04 && dd == 0x01 ){ lcdword(0,0,1,"  愚人节  "); }//4                  
 289   1                      else if( mo == 0x04 && dd == 0x08 ){ lcdword(0,0,1,"  复活节  "); }             
 290   1                      else if( mo == 0x04 && dd == 0x22 ){ lcdword(0,0,1,"世界地球日"); }                             
 291   1                      else if( mo == 0x05 && dd == 0x01 ){ lcdword(0,0,1,"国际劳动节"); }//5          
 292   1                      else if( mo == 0x05 && dd == 0x04 ){ lcdword(0,0,1,"中国青年节"); }             
 293   1                      else if( mo == 0x05 && dd == 0x08 ){ lcdword(0,0,1,"  红十字日"); }             
 294   1                      else if( mo == 0x05 && dd == 0x12 ){ lcdword(0,0,1,"国际护士节"); }             
 295   1                      else if( mo == 0x05 && dd == 0x05 ){ lcdword(0,0,1,"近日母亲节"); }             
 296   1                      else if( mo == 0x05 && dd == 0x31 ){ lcdword(0,0,1,"世界无烟日"); }                             
 297   1                      else if( mo == 0x06 && dd == 0x01 ){ lcdword(0,0,1,"国际儿童节"); }//6
 298   1                      else if( mo == 0x06 && dd == 0x15 ){ lcdword(0,0,1,"近日父亲节"); }
 299   1                      else if( mo == 0x07 && dd == 0x01 ){ lcdword(0,0,1,"香港回归日"); }//7
 300   1                      else if( mo == 0x07 && dd == 0x07 ){ lcdword(0,0,1,"警!!国耻日"); }
 301   1                      else if( mo == 0x07 && dd == 0x11 ){ lcdword(0,0,1,"世界人口日"); }
 302   1                      else if( mo == 0x08 && dd == 0x01 ){ lcdword(0,0,1,"八一建军节"); }//8
 303   1                      else if( mo == 0x08 && dd == 0x15 ){ lcdword(0,0,1,"战胜日本日"); }
C51 COMPILER V8.05a   MAIN                                                                 12/17/2007 10:55:25 PAGE 6   

 304   1                      else if( mo == 0x09 && dd == 0x08 ){ lcdword(0,0,1,"国际扫盲日"); }//9
 305   1                      else if( mo == 0x09 && dd == 0x10 ){ lcdword(0,0,1,"中国教师节"); }
 306   1                      else if( mo == 0x09 && dd == 0x18 ){ lcdword(0,0,1,"!!9.18记念"); }
 307   1                      else if( mo == 0x09 && dd == 0x17 ){ lcdword(0,0,1,"国际和平日"); }
 308   1                      else if( mo == 0x10 && dd == 0x01 ){ lcdword(0,0,1,"  国庆节  "); }//10
 309   1                      else if( mo == 0x10 && dd == 0x16 ){ lcdword(0,0,1,"世界粮食节"); }
 310   1                      else if( mo == 0x10 && dd == 0x24 ){ lcdword(0,0,1,"  联合国日"); }
 311   1                      else if( mo == 0x11 && dd == 0x10 ){ lcdword(0,0,1,"世界青年节"); }//11
 312   1                      else if( mo == 0x11 && dd == 0x28 ){ lcdword(0,0,1,"    感恩节"); }
 313   1                      else if( mo == 0x12 && dd == 0x01 ){ lcdword(0,0,1,"世界艾滋日"); }//12
 314   1                      else if( mo == 0x12 && dd == 0x24 ){ lcdword(0,0,1,"今晚平安夜"); }
 315   1                      else if( mo == 0x12 && dd == 0x25 ){ lcdword(0,0,1,"  圣诞快乐"); }
 316   1                      else if( mo == 0x12 && dd == 0x31 ){ lcdword(0,0,1,"  明日新年"); }
 317   1                       //非节日时显示时晨信息
 318   1                      else if ( hh >= 0x04 && hh < 0x06 ){ lcdword(0,0,1,"★★▲凌晨"); }
 319   1                      else if ( hh >= 0x06 && hh < 0x08 ){ lcdword(0,0,1,"☆○▲早晨"); }
 320   1                      else if ( hh >= 0x08 && hh < 0x12 ){ lcdword(0,0,1,"●▲▲上午"); }
 321   1                      else if ( hh == 0x12)              { lcdword(0,0,1,"▲●▲中午"); }
 322   1                      else if ( hh >= 0x13 && hh < 0x18 ){ lcdword(0,0,1,"▲▲●下午"); }
 323   1                      else if ( hh >= 0x18 && hh < 0x22 ){ lcdword(0,0,1,"▲●☆晚上"); }
 324   1                      else if ( hh >= 0x22 && hh <=0x23 ){ lcdword(0,0,1,"★☆★夜里"); }
 325   1                      else if ( hh >= 0x00 && hh < 0x04 ){ lcdword(0,0,1,"★★★深夜"); }
 326   1      }
 327          /***************************************************************/
 328          //功能:向LCM中填写年
 329          void lcm_w_yy(void)
 330          {  //if(read_clock(0x8d) != yy)
 331   1              //{     
 332   1              yy=read_clock(0x8d);   //读取年
 333   1                      lcdword(1,0,1,"20");     //显示20
 334   1                      lcdWriteData((yy/16)+0x30);  //显示年十位       
 335   1                      lcdWriteData(yy%16+0x30);         //显示年个位
 336   1         // } 
 337   1      }
 338          /***************************************************************/
 339          //向LCM中填写月
 340          void lcm_w_mo(void)
 341          {
 342   1        //if(read_clock(0x89) != mo)
 343   1                //{ 
 344   1                mo = read_clock(0x89);           //读取月
 345   1                      lcdWriteCommand(0x92);
 346   1                      lcdWriteData(0x16);              //显示“-”
 347   1                              if(mo/16!=0)
 348   1                              {lcdWriteData((mo/16)+0x30);}   //显示十位
 349   1                              else{lcdWriteData(0x20);}   //十位为零则消隐                    
 350   1                      lcdWriteData(mo%16+0x30);       //显示月的个位
 351   1                      lcdWriteData(0x16);                //显示“-”
 352   1             //}      
 353   1      }
 354          /***************************************************************/
 355          //功能:向LCD中填写日数据
 356          void lcm_w_dd(void)
 357          {
 358   1         //if(read_clock(0x87) != dd)
 359   1         //{
 360   1              dd = read_clock(0x87);     //读取日
 361   1              lcdWriteCommand(0x94);
 362   1              if(dd/16!= 0){lcdWriteData((dd/16)+0x30);}      //显示十位
 363   1              else{lcdWriteData(0x20);}                    //十位为零则消隐   
 364   1              lcdWriteData(dd%16+0x30);                               
 365   1         //}  
C51 COMPILER V8.05a   MAIN                                                                 12/17/2007 10:55:25 PAGE 7   

 366   1      }
 367          /***************************************************************/
 368          //功能:星期处理并送入LCD的指定区域
 369          void lcm_w_xq(void)
 370          {
 371   1        unsigned char sel;

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -