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

📄 lcm_t.lst

📁 电子时钟,显示时间日期,年.节日等包括原码与电路设计
💻 LST
📖 第 1 页 / 共 3 页
字号:
 243   1              for(i=0;i<8;i++){
 244   2                      SID=bbyte&0x80; //取出最高位
 245   2                      SCLK=1;
 246   2                      SCLK=0;
 247   2                      bbyte<<=1; //左移
 248   2              }  
 249   1      }
 250          
 251          /******************************************************************************/
 252          //延时(LCM占用)
 253          void delaynms(unsigned int di) {
 254   1              unsigned int da,db;
 255   1              for(da=0;da<di;da++);
 256   1                      for(db=0;db<10;db++);
 257   1      }
 258                  
 259          /*****************************************************************************/
 260          //清屏函数
 261          void lcm_clr(void){
 262   1              lcm_w_test(0,0x01);
 263   1              delaynms(40); //启动等待,等LCM讲入工作状态
 264   1      
 265   1      }
 266          
 267          /*****************************************************************************/
 268          //向LCM发送一个字符串,长度64字符之内。
 269          //应用:lcm_w_word("您好!"); 
 270          void lcm_w_word(unsigned char *str){
 271   1                      while(*str != '\0'){
 272   2                              lcm_w_test(1,*str++);
 273   2              }
 274   1                      *str = 0;
 275   1      }
 276          /******************************************************************************/
 277          void Delay(int num)//延时函数
 278          {
 279   1              while(num--) ;
 280   1      }       
 281          /******************************************************************************/
 282          void Init_DS18B20(void)//初始化ds1820
 283          {
 284   1              unsigned char x=0;
 285   1              DQ = 1;    //DQ复位
 286   1              Delay(8);  //稍做延时
 287   1              DQ = 0;    //单片机将DQ拉低
 288   1              Delay(80); //精确延时 大于 480us
 289   1              DQ = 1;    //拉高总线
 290   1              Delay(14);
 291   1              x=DQ;      //稍做延时后 如果x=0则初始化成功 x=1则初始化失败
 292   1              Delay(20);
 293   1      }
 294          /******************************************************************************/
 295          unsigned char ReadOneChar(void)//读一个字节
 296          {
 297   1              unsigned char i=0;
 298   1              unsigned char dat = 0;
 299   1              for (i=8;i>0;i--)
 300   1              {
 301   2                      DQ = 0; // 给脉冲信号
 302   2                      dat>>=1;
 303   2                      DQ = 1; // 给脉冲信号
C51 COMPILER V7.08   LCM_T                                                                 01/09/2008 14:33:36 PAGE 6   

 304   2                      if(DQ)
 305   2                      dat|=0x80;
 306   2                      Delay(4);
 307   2              }
 308   1              return(dat);
 309   1      }
 310          
 311          /******************************************************************************/
 312          void WriteOneChar(unsigned char dat)//写一个字节
 313          {
 314   1              unsigned char i=0;
 315   1              for (i=8; i>0; i--)
 316   1              {
 317   2                      DQ = 0;
 318   2                      DQ = dat&0x01;
 319   2                      Delay(5);
 320   2                      DQ = 1;
 321   2                      dat>>=1;
 322   2              }
 323   1      }
 324          /******************************************************************************/
 325          unsigned int ReadTemperature(void)//读取温度
 326          {
 327   1              unsigned char a=0;
 328   1              unsigned char b=0;
 329   1              unsigned int t=0;
 330   1              float tt=0;
 331   1              Init_DS18B20();
 332   1              WriteOneChar(0xCC); // 跳过读序号列号的操作
 333   1              WriteOneChar(0x44); // 启动温度转换
 334   1              Init_DS18B20();
 335   1              WriteOneChar(0xCC); //跳过读序号列号的操作
 336   1              WriteOneChar(0xBE); //读取温度寄存器
 337   1              a=ReadOneChar();  //读低8位
 338   1              b=ReadOneChar(); //读高8位
 339   1              t=b;
 340   1              t<<=8;
 341   1              t=t|a;
 342   1              tt=t*0.0625;
 343   1              t= tt*10+0.5; //放大10倍输出并四舍五入
 344   1              return(t);
 345   1      }
 346          /*****************************************************************************/
 347          //声明
 348          void lcm_w_ss(void);void lcm_w_mm(void);
 349          void lcm_w_hh(void);void lcm_w_dd(void);
 350          void lcm_w_mo(void);void lcm_w_yy(void);void lcm_w_xq(void);
 351          unsigned char clock_in(void);
 352          void clock_out(unsigned char dd);
 353          void Init_1302(void);
 354          unsigned char read_clock(unsigned char ord);
 355          void read_clockS(void);
 356          void Set_time(unsigned char sel);
 357          void write_clock(unsigned char ord, unsigned char dd);
 358          void updata (void);
 359          /*****************************************************************************/
 360          //常用时钟数据读取
 361          void read_clockS(void){
 362   1              ss = read_clock(0x81);//读取秒数据
 363   1              mm = read_clock(0x83);//读取分钟数据
 364   1              hh = read_clock(0x85);//小时
 365   1              dd = read_clock(0x87);//日
C51 COMPILER V7.08   LCM_T                                                                 01/09/2008 14:33:36 PAGE 7   

 366   1              mo = read_clock(0x89);//月
 367   1              xq = read_clock(0x8b);//星期
 368   1              yy = read_clock(0x8d);//年
 369   1      }
 370          /*****************************************************************************/
 371          //调时用加1程序
 372          void Set_time(unsigned char sel){ //根据选择调整的相应项目加1并写入DS1302
 373   1        signed char address,item;
 374   1        signed char max,mini;
 375   1        lcm_w_test(0,0x9a);
 376   1        lcm_w_word("调整");
 377   1        //if(sel==6)  {lcm_w_word("秒钟");address=0x80; max=0;mini=0;}     //秒7
 378   1        if(sel==5)  {lcm_w_word("分钟");address=0x82; max=59;mini=0;}    //分钟6
 379   1        if(sel==4)  {lcm_w_word("小时");address=0x84; max=23;mini=0;}    //小时5
 380   1        if(sel==3)  {lcm_w_word("星期");address=0x8a; max=7;mini=1;}    //星期4  
 381   1        if(sel==2)  {lcm_w_word("日期");address=0x86; max=31;mini=1;}    //日3
 382   1        if(sel==1)  {lcm_w_word("月份");address=0x88; max=12;mini=1;}    //月2
 383   1        if(sel==0)  {lcm_w_word("年份");address=0x8c; max=99; mini=0;}    //年1
 384   1        
 385   1        //读取1302某地址上的数值转换成10进制赋给item 
 386   1        item=((read_clock(address+1))/16)*10 + (read_clock(address+1))%16;
 387   1        if(KEY_2 == 0){
 388   2              item++;//数加 1  
 389   2        }
 390   1        if(KEY_4 == 0){
 391   2              item--;//数减 1 
 392   2        }
 393   1        if(item>max) item=mini;//查看数值有效范围   
 394   1        if(item<mini) item=max;           
 395   1        write_clock(0x8e,0x00);//允许写操作
 396   1        write_clock(address,(item/10)*16+item%10);//转换成16进制写入1302
 397   1        write_clock(0x8e,0x80);//写保护,禁止写操作 
 398   1        updata ();    //刷新数据
 399   1        lcm_w_mm();//刷新 分 
 400   1      }
 401          /*****************************************************************************/
 402          //设置1302的初始时间
 403          void Init_1302(void){//(2007年1月1日00时00分00秒星期一)
 404   1              write_clock(0x8e,0x00);//允许写操作
 405   1      
 406   1              write_clock(0x8c,0x07);//年
 407   1              write_clock(0x8a,0x01);//星期
 408   1              write_clock(0x88,0x01);//月
 409   1              write_clock(0x86,0x01);//日
 410   1              write_clock(0x84,0x00);//小时
 411   1              write_clock(0x82,0x00);//分钟
 412   1              write_clock(0x80,0x00);//秒
 413   1              write_clock(0x90,0xa5);//充电   
 414   1              write_clock(0x8e,0x80);//禁止写操作
 415   1      }
 416          /*****************************************************************************/
 417          //DS1302写数据(底层协议)
 418          void write_clock(unsigned char ord, unsigned char dd){
 419   1              clock_clk=0;
 420   1              clock_Rst=0;
 421   1              clock_Rst=1;
 422   1              clock_out(ord);
 423   1              clock_out(dd);
 424   1              clock_Rst=0;
 425   1              clock_clk=1;
 426   1      }
 427          /*****************************************************************************/
C51 COMPILER V7.08   LCM_T                                                                 01/09/2008 14:33:36 PAGE 8   

 428          //1302驱动程序(底层协议)
 429          void clock_out(unsigned char dd){
 430   1              ACC=dd;
 431   1              clock_dat=a0; clock_clk=1; clock_clk=0;
 432   1              clock_dat=a1; clock_clk=1; clock_clk=0;
 433   1              clock_dat=a2; clock_clk=1; clock_clk=0;
 434   1              clock_dat=a3; clock_clk=1; clock_clk=0;
 435   1              clock_dat=a4; clock_clk=1; clock_clk=0;
 436   1              clock_dat=a5; clock_clk=1; clock_clk=0;
 437   1              clock_dat=a6; clock_clk=1; clock_clk=0;
 438   1              clock_dat=a7; clock_clk=1; clock_clk=0;
 439   1      }
 440          /*****************************************************************************/
 441          //DS1302写入字节(底层协议)
 442          unsigned char clock_in(void){
 443   1              clock_dat=1;
 444   1              a0=clock_dat;
 445   1              clock_clk=1; clock_clk=0; a1=clock_dat;
 446   1              clock_clk=1; clock_clk=0; a2=clock_dat;
 447   1              clock_clk=1; clock_clk=0; a3=clock_dat;
 448   1              clock_clk=1; clock_clk=0; a4=clock_dat;
 449   1              clock_clk=1; clock_clk=0; a5=clock_dat;
 450   1              clock_clk=1; clock_clk=0; a6=clock_dat;
 451   1              clock_clk=1; clock_clk=0; a7=clock_dat;
 452   1              return(ACC);
 453   1      }
 454          /*****************************************************************************/
 455          //DS1302读数据(底层协议)
 456          unsigned char read_clock(unsigned char ord){
 457   1              unsigned char dd=0;
 458   1              clock_clk=0;
 459   1              clock_Rst=0;
 460   1              clock_Rst=1;
 461   1              clock_out(ord);
 462   1              dd=clock_in();
 463   1              clock_Rst=0;
 464   1              clock_clk=1;
 465   1              return(dd);
 466   1      }
 467          /*****************************************************************************/
 468          //向LCM中填写 年 数据
 469          void lcm_w_yy(void){
 470   1              //if(read_clock(0x8d) != yy){
 471   1                      yy = read_clock(0x8d);
 472   1                      lcm_w_test(0,0x83);
 473   1                      lcm_w_word("20");
 474   1                      lcm_w_test(0,0x84);
 475   1                      lcm_w_test(1,(yy/16)+0x30);     
 476   1                      lcm_w_test(1,yy%16+0x30);
 477   1      }       //}
 478          /*****************************************************************************/
 479          //向LCM中填写 月 数据
 480          void lcm_w_mo(void){
 481   1              //if(read_clock(0x89) != mo){
 482   1                      mo = read_clock(0x89);
 483   1                      lcm_w_test(0,0x90);
 484   1                              if(mo/16 != 0){lcm_w_test(1,(mo/16)+0x30);}     //十位消隐
 485   1                              else{lcm_w_test(1,0x20);}//同上                 
 486   1                      lcm_w_test(1,mo%16+0x30);
 487   1                      lcm_w_test(0,0x91);
 488   1                      lcm_w_word("月");
 489   1      }       //}
C51 COMPILER V7.08   LCM_T                                                                 01/09/2008 14:33:36 PAGE 9   

 490          /*****************************************************************************/
 491          //星期处理并送入LCM的指定区域
 492          void lcm_w_xq(void){
 493   1              unsigned char sel;

⌨️ 快捷键说明

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