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

📄 128.lst

📁 keilc51环境下12864液晶显示
💻 LST
📖 第 1 页 / 共 2 页
字号:
 227   2                      delay(5);
 228   2                      DQ = 1;
 229   2                      dat>>=1;
 230   2              }
 231   1      }
 232          
 233          
 234          ReadTemperature(void)//读取温度
 235          {
 236   1              unsigned char a=0;
 237   1              unsigned char b=0;
 238   1              unsigned int t=0;
 239   1              float tt=0;
 240   1              Init_DS18B20();
 241   1              WriteOneChar(0xCC); // 跳过读序号列号的操作
 242   1              WriteOneChar(0x44); // 启动温度转换
 243   1              Init_DS18B20();
 244   1              WriteOneChar(0xCC); //跳过读序号列号的操作
 245   1              WriteOneChar(0xBE); //读取温度寄存器
 246   1              a=ReadOneChar();
 247   1              b=ReadOneChar();
 248   1              t=b;
 249   1              t<<=8;
 250   1              t=t|a;
 251   1              tt=t*0.0625;
 252   1              t= tt*10+0.5; //放大10倍输出并四舍五入
 253   1              return(t);
 254   1      }
 255          
 256          void clock_out(uchar dd)
 257          {
 258   1              ACC=dd;
 259   1              clock_dat=a0; clock_clk=1; clock_clk=0;
 260   1              clock_dat=a1; clock_clk=1; clock_clk=0;
 261   1              clock_dat=a2; clock_clk=1; clock_clk=0;
 262   1              clock_dat=a3; clock_clk=1; clock_clk=0;
 263   1              clock_dat=a4; clock_clk=1; clock_clk=0;
 264   1              clock_dat=a5; clock_clk=1; clock_clk=0;
 265   1              clock_dat=a6; clock_clk=1; clock_clk=0;
 266   1              clock_dat=a7; clock_clk=1; clock_clk=0;
 267   1      }
 268          
 269          uchar clock_in(void)
 270          {
 271   1              clock_dat=1;
 272   1              a0=clock_dat;
C51 COMPILER V7.06   128                                                                   11/21/2007 13:34:35 PAGE 6   

 273   1              clock_clk=1; clock_clk=0; a1=clock_dat;
 274   1              clock_clk=1; clock_clk=0; a2=clock_dat;
 275   1              clock_clk=1; clock_clk=0; a3=clock_dat;
 276   1              clock_clk=1; clock_clk=0; a4=clock_dat;
 277   1              clock_clk=1; clock_clk=0; a5=clock_dat;
 278   1              clock_clk=1; clock_clk=0; a6=clock_dat;
 279   1              clock_clk=1; clock_clk=0; a7=clock_dat;
 280   1              return(ACC);
 281   1      }
 282          
 283          uchar read_clock(uchar ord)
 284          {
 285   1              uchar dd=0;
 286   1              clock_clk=0;
 287   1              clock_rst=0;
 288   1              clock_rst=1;
 289   1              clock_out(ord);
 290   1              dd=clock_in();
 291   1              clock_rst=0;
 292   1              clock_clk=1;
 293   1              return(dd);
 294   1      }
 295          
 296          void write_clock(uchar ord, uchar dd)
 297          {
 298   1              clock_clk=0;
 299   1              clock_rst=0;
 300   1              clock_rst=1;
 301   1              clock_out(ord);
 302   1              clock_out(dd);
 303   1              clock_rst=0;
 304   1              clock_clk=1;
 305   1      }
 306          
 307          void Serial_Ini()//设置串行口,波特率为4800
 308          {
 309   1              TMOD=0x20;
 310   1              TH1=TL1=0xF3;
 311   1              PCON=0x80;
 312   1              EA=1;
 313   1              ES=1;
 314   1              TR1=1;
 315   1              SCON=0x50;
 316   1      }
 317          
 318          
 319          main()
 320          {
 321   1              unsigned int i=0,k;
 322   1              unsigned char a=0,b=0,c=0,d,e,f=0;
 323   1      
 324   1              lcd_init();//设置液晶显示器
 325   1              Serial_Ini();//初始化串行口
 326   1              EX0=1;
 327   1              //在预定的位置上写入汉字
 328   1              write_chinese(0,4,dang);
 329   1              write_chinese(16,4,qian);
 330   1              write_chinese(32,4,shi);
 331   1              write_chinese(48,4,wen);
 332   1              write_digit(80,4,point);
 333   1              write_chinese(96,4,sheshidu);
 334   1              write_chinese(80,6,tang);
C51 COMPILER V7.06   128                                                                   11/21/2007 13:34:35 PAGE 7   

 335   1              write_chinese(96,6,wen1);
 336   1              write_chinese(112,6,tao);
 337   1              write_digit(72,2,maohao);
 338   1              write_digit(96,2,maohao);
 339   1              write_chinese(0,2,xing);
 340   1              write_chinese(16,2,qi);
 341   1              write_chinese(32,0,nian);
 342   1              //设置时钟的初始值
 343   1      /*
 344   1              write_clock(0x8e,0x00);//protect
 345   1              write_clock(0x8c,0x06);//year
 346   1              write_clock(0x8a,0x02);//day
 347   1              write_clock(0x88,0x08);//month
 348   1              write_clock(0x86,0x22);//date
 349   1              write_clock(0x84,0x14);//hour
 350   1              write_clock(0x82,0x20);//minute
 351   1              write_clock(0x80,0x01);//second
 352   1              write_clock(0x8e,0x80);//protect        
 353   1      */
 354   1              dis=0;
 355   1              while(1)//主循环
 356   1              {
 357   2              EX0= 1; 
 358   2              i=ReadTemperature();//读温度
 359   2              a=i/100;
 360   2              write_digit(64,4,zero+a*16);
 361   2              b=i/10-a*10;
 362   2              write_digit(72,4,zero+b*16);
 363   2              c=i-a*100-b*10;
 364   2              write_digit(88,4,zero+c*16);
 365   2              d=read_clock(0x8d);//读年
 366   2              e=d;
 367   2              d=d>>4;
 368   2              e=e&0xf;
 369   2              write_digit(0,0,two);
 370   2              write_digit(8,0,zero);
 371   2              write_digit(16,0,zero+d*16);
 372   2              write_digit(24,0,zero+e*16);
 373   2              d=read_clock(0x89);//读月
 374   2              e=d;
 375   2              d=d>>4;
 376   2              e=e&0x0f;
 377   2              write_digit(56,0,zero+d*16);
 378   2              write_digit(64,0,zero+e*16);
 379   2              write_chinese(72,0,yue);
 380   2              d=read_clock(0x87);//读日
 381   2              e=d;
 382   2              d=d>>4;
 383   2              e=e&0x0f;
 384   2              write_digit(88,0,zero+d*16);
 385   2              write_digit(96,0,zero+e*16);
 386   2              write_chinese(104,0,ri);
 387   2              d=read_clock(0x8b);//读星期
 388   2              write_chinese(32,2,cone+(d-1)*32);//写入星期的汉字
 389   2              d=read_clock(0x85);//读小时
 390   2              e=d;
 391   2              d=d>>4;
 392   2              e=e&0x0f;
 393   2              write_digit(56,2,zero+d*16);
 394   2              write_digit(64,2,zero+e*16);
 395   2              d=read_clock(0x83);//读分钟
 396   2              e=d;
C51 COMPILER V7.06   128                                                                   11/21/2007 13:34:35 PAGE 8   

 397   2              d=d>>4;
 398   2              e=e&0x0f;
 399   2              write_digit(80,2,zero+d*16);
 400   2              write_digit(88,2,zero+e*16);
 401   2              d=read_clock(0x81);//读秒
 402   2              e=d;
 403   2              d=d>>4;
 404   2              e=e&0x0f;
 405   2              write_digit(104,2,zero+d*16);
 406   2              write_digit(112,2,zero+e*16);
 407   2              if(f==5)//闪烁控制
 408   2              {
 409   3              write_flashcn(80,6,tang);
 410   3              write_flashcn(96,6,wen1);
 411   3              write_flashcn(112,6,tao);
 412   3              m=!m;
 413   3              f=0;
 414   3              }
 415   2              f=f+1;
 416   2              k=100;
 417   2              while(k)//延时
 418   2              {
 419   3                      k--;
 420   3              }
 421   2              if(num==7||num==2)//控制字的格式
 422   2              {
 423   3                      write_clock(0x8e,0x00);//解除ds1302的写保护
 424   3                      if(rec[0]=='1')//用户写年月日
 425   3                      {
 426   4                              a=rec[1]-'0';
 427   4                              b=rec[2]-'0';
 428   4                              b=(a<<4)|b;
 429   4                              write_clock(0x8c,b);//写年
 430   4                              a=rec[3]-'0';
 431   4                              b=rec[4]-'0';
 432   4                              b=(a<<4)|b;
 433   4                              write_clock(0x88,b);//写月
 434   4                              a=rec[5]-'0';
 435   4                              b=rec[6]-'0';
 436   4                              b=(a<<4)|b;
 437   4                              write_clock(0x86,b);//写日
 438   4                      }
 439   3                      else if(rec[0]=='2')
 440   3                      {
 441   4                              a=rec[1]-'0';
 442   4                              b=rec[2]-'0';
 443   4                              b=(a<<4)|b;
 444   4                              write_clock(0x84,b);//写小时
 445   4                              a=rec[3]-'0';
 446   4                              b=rec[4]-'0';
 447   4                              b=(a<<4)|b;
 448   4                              write_clock(0x82,b);//写分钟
 449   4                              a=rec[5]-'0';
 450   4                              b=rec[6]-'0';
 451   4                              b=(a<<4)|b;
 452   4                              write_clock(0x80,b);//写秒
 453   4                      }
 454   3                      else if(rec[0]=='3')
 455   3                      {
 456   4                              a=rec[1]-'0';
 457   4                              write_clock(0x8a,a);//写星期
 458   4                      }
C51 COMPILER V7.06   128                                                                   11/21/2007 13:34:35 PAGE 9   

 459   3                      write_clock(0x8e,0x80);//加入写保护
 460   3              }
 461   2              num=0;//指令序号归零
 462   2         }
 463   1      }
 464          
 465          void serial() interrupt 4//串行口的中断服务函数
 466          {
 467   1              rec[num]=SBUF;
 468   1              num++;
 469   1              RI=0;
 470   1      }
 471          void Int0()interrupt 0 using 1
 472          {       
 473   1              EX0=0;
 474   1              if(display==0)
 475   1              {dis=!dis;} 
 476   1      }


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =   1944    ----
   CONSTANT SIZE    =    800    ----
   XDATA SIZE       =   ----    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =     10      32
   IDATA SIZE       =   ----    ----
   BIT SIZE         =      1    ----
END OF MODULE INFORMATION.


C51 COMPILATION COMPLETE.  0 WARNING(S),  0 ERROR(S)

⌨️ 快捷键说明

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