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

📄 12864lcd显示.lst

📁 LCD12864+18b20+1302串口
💻 LST
📖 第 1 页 / 共 5 页
字号:
 232   3                                 Write_char(1,img[k++]);      //填充对应点阵
 233   3                         }
 234   2                      }
 235   1      
 236   1                      for(i=0;i<32;i++)                       //循环下半屏填充点
 237   1                      { 
 238   2                                      Write_char(0,0x80+i);
 239   2                                      Write_char(0,0x88);
 240   2                         for(j=0;j<16;j++) 
 241   2                         {
C51 COMPILER V7.02b   12864LCD_允_                                                         04/06/2009 00:17:44 PAGE 5   

 242   3                                 Write_char(1,img[k++]);
 243   3                         }
 244   2                      }
 245   1      }
 246                  
 247          
 248          void Clr_Scr(void)                                      //清屏函数
 249          {
 250   1                      Write_char(0,0x01);
 251   1      }
 252          
 253          
 254          void LCD_set_xy( unsigned char x, unsigned char y )     //指定LCD位置X为行Y为列
 255          {       
 256   1          unsigned char address;
 257   1                      switch(x)                               //选择函数
 258   1                      {
 259   2                              case 0: 
 260   2                                      address = 0x80 + y; 
 261   2                                      break;    
 262   2                              case 1: 
 263   2                                      address = 0x80 + y; 
 264   2                                      break; 
 265   2                              case 2: 
 266   2                                      address = 0x90 + y; 
 267   2                                      break; 
 268   2                              case 3: 
 269   2                                      address = 0x88 + y; 
 270   2                                      break;
 271   2                              case 4: 
 272   2                                      address = 0x98 + y; 
 273   2                                      break; 
 274   2                              default:
 275   2                                      address = 0x80 + y; 
 276   2                                      break;
 277   2                      }
 278   1          Write_char(0, address);                             //写指令指定位置
 279   1      }
 280          
 281          
 282          void LCD_Write_string(unsigned char X,unsigned char Y,unsigned char *s)//指定位置写字符串
 283          {       
 284   1          LCD_set_xy( X, Y );
 285   1          
 286   1          while (*s)                                                          //循环写字符串
 287   1          {
 288   2              Write_char( 1, *s );                                            //写数据
 289   2              s ++;                                                           
 290   2              Delaynms(1);
 291   2          }
 292   1      }
 293          
 294          
 295          void LCD_Write_number(unsigned char s)                  //数字显示函数
 296          {       
 297   1                      Write_char(1,num[s]);                   //写数据
 298   1                      Delaynms(1);
 299   1      }
 300          
 301          
 302          void LCD_Write_week(unsigned char s)                    //星期显示
 303          {
C51 COMPILER V7.02b   12864LCD_允_                                                         04/06/2009 00:17:44 PAGE 6   

 304   1                      switch(s)
 305   1                      {
 306   2                              case 1: 
 307   2                                      LCD_Write_string(3,2,yi);
 308   2                                      break;
 309   2                              case 2: 
 310   2                                      LCD_Write_string(3,2,er);
 311   2                                      break;
 312   2                              case 3: 
 313   2                                      LCD_Write_string(3,2,san);
 314   2                                      break;
 315   2                              case 4: 
 316   2                                      LCD_Write_string(3,2,si);
 317   2                                      break;
 318   2                              case 5: 
 319   2                                      LCD_Write_string(3,2,wu);
 320   2                                      break;
 321   2                              case 6: 
 322   2                                      LCD_Write_string(3,2,liu);
 323   2                                      break;
 324   2                              case 7: 
 325   2                                      LCD_Write_string(3,2,ri);
 326   2                                      break;
 327   2                              case 8: 
 328   2                                      LCD_Write_string(3,2,space_c);//显示空格,为调整时间用
 329   2                                      break;
 330   2                              default:
 331   2                                      break;
 332   2                      }
 333   1      }
 334          
 335          
 336          void Delay(int num)                                             //延迟Nu秒函数
 337          {
 338   1                      while(num--);
 339   1      }
 340                  
 341          
 342          void Init_DS18B20(void)                         //初始化温度传感器ds1820
 343          {
 344   1                      unsigned char x=0;
 345   1                      DQ = 1;                         //DQ复位
 346   1                      Delay(8);                       //稍做延时
 347   1                      DQ = 0;                         //单片机将DQ拉低
 348   1                      Delay(80);                      //精确延时 大于 480us
 349   1                      DQ = 1;                         //拉高总线
 350   1                      Delay(14);
 351   1                      x=DQ;                           //稍做延时后 如果x=0则初始化成功 x=1则初始化失败
 352   1                      Delay(20);
 353   1      }
 354          
 355          
 356          unsigned char ReadOneChar(void)                 //读取温度传感器一个字节
 357          {
 358   1                      unsigned char i=0;
 359   1                      unsigned char dat = 0;
 360   1                      for (i=8;i>0;i--)
 361   1                      {
 362   2                              DQ = 0;                 // 给脉冲信号
 363   2                              dat>>=1;
 364   2                              DQ = 1;                 // 给脉冲信号
 365   2                              if(DQ)
C51 COMPILER V7.02b   12864LCD_允_                                                         04/06/2009 00:17:44 PAGE 7   

 366   2                              dat|=0x80;
 367   2                              Delay(4);
 368   2                      }
 369   1                      return(dat);
 370   1      }
 371          
 372          
 373          void WriteOneChar(unsigned char dat)            //发送指令到温度传感器
 374          {
 375   1                      unsigned char i=0;
 376   1                      for (i=8; i>0; i--)
 377   1                      {
 378   2                              DQ = 0;
 379   2                              DQ = dat&0x01;          //低位到高位
 380   2                              Delay(5);
 381   2                              DQ = 1;
 382   2                              dat>>=1;                //右移1位
 383   2                      }
 384   1      }
 385          
 386          
 387          unsigned int ReadTemperature(void)              //读取温度数值
 388          {
 389   1                      unsigned char a=0;
 390   1                      unsigned char b=0;
 391   1                      unsigned int t=0;
 392   1                      float tt=0;
 393   1                      Init_DS18B20();
 394   1                      WriteOneChar(0xCC);             //跳过读序号列号的操作
 395   1                      WriteOneChar(0x44);             //启动温度转换
 396   1                      Init_DS18B20();
 397   1                      WriteOneChar(0xCC);             //跳过读序号列号的操作
 398   1                      WriteOneChar(0xBE);             //读取温度寄存器
 399   1                      a=ReadOneChar();                //读低8位
 400   1                      b=ReadOneChar();                //读高8位
 401   1                      t=b;
 402   1                      t<<=8;
 403   1                      t=t|a;
 404   1                      tt=t*0.0625;
 405   1                      t= tt*10+0.5; //放大10倍输出并四舍五入
 406   1                      return(t);
 407   1      }
 408          
 409          
 410          void clock_out(unsigned char dd)                //1302时钟接收一个字节
 411          {
 412   1                      ACC=dd;
 413   1                      clock_dat=a0; clock_clk=1; clock_clk=0;
 414   1                      clock_dat=a1; clock_clk=1; clock_clk=0;
 415   1                      clock_dat=a2; clock_clk=1; clock_clk=0;
 416   1                      clock_dat=a3; clock_clk=1; clock_clk=0;
 417   1                      clock_dat=a4; clock_clk=1; clock_clk=0;
 418   1                      clock_dat=a5; clock_clk=1; clock_clk=0;
 419   1                      clock_dat=a6; clock_clk=1; clock_clk=0;
 420   1                      clock_dat=a7; clock_clk=1; clock_clk=0;
 421   1      }
 422          
 423          
 424          unsigned char clock_in(void)                    //1302时钟发送一个字节
 425          {
 426   1                      clock_dat=1;
 427   1                      a0=clock_dat;
C51 COMPILER V7.02b   12864LCD_允_                                                         04/06/2009 00:17:44 PAGE 8   

 428   1                      clock_clk=1; clock_clk=0; a1=clock_dat;
 429   1                      clock_clk=1; clock_clk=0; a2=clock_dat;
 430   1                      clock_clk=1; clock_clk=0; a3=clock_dat;
 431   1                      clock_clk=1; clock_clk=0; a4=clock_dat;
 432   1                      clock_clk=1; clock_clk=0; a5=clock_dat;
 433   1                      clock_clk=1; clock_clk=0; a6=clock_dat;
 434   1                      clock_clk=1; clock_clk=0; a7=clock_dat;
 435   1                      return(ACC);                    //还原一个字节
 436   1      }
 437          
 438          
 439          unsigned char read_clock(unsigned char ord)     //读取时钟数据
 440          {
 441   1                      unsigned char dd=0;
 442   1                      clock_clk=0;
 443   1                      clock_Rst=0;
 444   1                      clock_Rst=1;
 445   1                      clock_out(ord);
 446   1                      dd=clock_in();
 447   1                      clock_Rst=0;
 448   1                      clock_clk=1;
 449   1                      return(dd);
 450   1      }
 451          
 452          
 453          void write_clock(unsigned char ord, unsigned char dd)//写入时钟数据
 454          {
 455   1                      clock_clk=0;
 456   1                      clock_Rst=0;
 457   1                      clock_Rst=1;
 458   1                      clock_out(ord);
 459   1                      clock_out(dd);
 460   1                      clock_Rst=0;
 461   1                      clock_clk=1;
 462   1      }
 463          
 464          
 465          void Disp(void)                                 //时间界面光标闪烁
 466          {
 467   1                      unsigned int i=0;
 468   1                      unsigned char a=0,b=0,c=0,f=0;
 469   1      

⌨️ 快捷键说明

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