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

📄 lcmtemp.lst

📁 已经调试通过的利用温度传感器18B20实现温度测量
💻 LST
📖 第 1 页 / 共 2 页
字号:
 238          {
 239   1      LCM1602_DATA=0xFF; 
 240   1      LCM1602_RS=0;
 241   1      LCM1602_RW=1;
C51 COMPILER V8.02   LCMTEMP                                                               08/11/2007 11:03:53 PAGE 5   

 242   1      LCM1602_E=0;
 243   1      LCM1602_E=0;
 244   1      LCM1602_E=1;
 245   1      while(LCM1602_DATA&busy); //检测忙信号
 246   1      }
 247          
 248          /*==============================================================*/
 249          /*                   LCM初始化                                  */
 250          /*==============================================================*/
 251          void initialize_1602(void) 
 252          {
 253   1      write_1602_command(0x38,0); //三次显示模式设置,不检测忙信号
 254   1      delay1602(10); 
 255   1      write_1602_command(0x38,0);
 256   1      delay1602(10); 
 257   1      write_1602_command(0x38,0);
 258   1      delay1602(10); 
 259   1      write_1602_command(0x38,1); //显示模式设置,开始要求每次检测忙信号
 260   1      write_1602_command(0x08,1); //关闭显示
 261   1      write_1602_command(0x01,1); //显示清屏
 262   1      write_1602_command(0x06,1); // 显示光标移动设置
 263   1      write_1602_command(0x0C,1); // 显示开及光标设置
 264   1      }
 265          
 266          /*==================================================================================*/
 267          /*                    按指定位置显示一个字符                                        */
 268          /*==================================================================================*/
 269          void display_1602_onechar(unsigned char x, unsigned char y, unsigned char d)  
 270                                             //x表示列、y 表示行
 271          {
 272   1      y &= 0x1;
 273   1      x &= 0xF;               //限制x不能大于15,y不能大于1
 274   1      if (y) x |= 0x40;       //当要显示第二行时地址码+0x40;
 275   1      x |= 0x80;              // 算出指令码
 276   1      write_1602_command(x,0);  //这里不检测忙信号,发送地址码
 277   1      write_1602_data(d);
 278   1      }
 279          
 280          /*================================================================================*/
 281          /*                      按指定位置显示一串字符                                    */
 282          /*================================================================================*/
 283          void display_1602_listchar(unsigned char x, unsigned char y, unsigned char *d)
 284          {
 285   1      unsigned char ListLength;
 286   1      ListLength=0;
 287   1      y &= 0x1;
 288   1      x &= 0xF;                      //限制x不能大于15,y不能大于1
 289   1      while (d[ListLength]>=0x20&&ListLength<16) //若到达字串尾则退出
 290   1        {
 291   2         if (x <= 0xF)                //x坐标应小于0xF(15)
 292   2          {
 293   3           display_1602_onechar(x, y, d[ListLength]); //显示单个字符
 294   3           x++;
 295   3          }
 296   2          ListLength++;
 297   2        }
 298   1      }
 299          
 300          //===============光标开关==================
 301          /*void cursor_1602(unsigned char work)
 302          {
 303              if(work==1)write_1602_command(0x0f,1);
C51 COMPILER V8.02   LCMTEMP                                                               08/11/2007 11:03:53 PAGE 6   

 304              else if(work==0)write_1602_command(0x0c,1);
 305          }
 306          */
 307          //=========================================
 308          
 309          //================清屏=====================
 310          /*void clear_1602()
 311          {
 312              write_1602_command(0x01,0);
 313          }
 314          */
 315          
 316          //=========================================
 317          
 318          //==============延时=======================
 319          void delay1602(unsigned char t)
 320          {
 321   1          unsigned int i,j;
 322   1          for(i=0;i<t;i++)
 323   1          for(j=0;j<200;j++);
 324   1      }
 325          //=========================================
 326                                                                                  
 327          /*========================================================================================================
             -==============*/
 328          /*                                       在指定的位置显示数字num                                             
             -           */
 329          /*========================================================================================================
             -==============*/
 330          /*void display_1602_num(unsigned char x,unsigned char y,long int num)
 331          {
 332              long int n=num; //复制num以便操作
 333              unsigned char cnum[]={' ',' ',' '}; //字符串cnum用于存放num各位数字的
 334              char i,l;
 335              if(num<0)n=-num;    //若num<0,n取反
 336              while(1)    //计算数字长度l
 337              {
 338                  if(n>0){n/=10;l++;}
 339                  else break;
 340              }
 341              if(num>=0)n=num;
 342              else n=-num;
 343              if(num<0){cnum[x]='-';x++;}    //若num<0,则在x处写入负号,然后在x+1处显示数字
 344              for(i=l-1;i>=0;i--)                 //num各位数存入cnum,最高位放在cnum[x];
 345              {
 346                  cnum[x+i]=n%10+48;
 347                  n/=10;
 348              }
 349              display_1602_listchar(0,y,cnum);    //显示num
 350          } */
 351          /*========================================================================================================
             -===============*/
 352          
 353          
 354          /*===========================================================================*/
 355          /*函数功能:循环左(右)移动屏幕上的所有字符                                    */
 356          /*参数说明:time为每移动一格时所需要的时间,direction为移动方向:0为左移,1为右移*/
 357          /*===========================================================================*/
 358          /*void movesreen_1602_rl(unsigned int time,unsigned char direction)
 359          {
 360              unsigned int i=0;
 361              for(i=0;i<16;i++)
C51 COMPILER V8.02   LCMTEMP                                                               08/11/2007 11:03:53 PAGE 7   

 362              {    
 363                  if(direction==0)   
 364                  write_1602_command(0x18,1);
 365                  else if(direction==1)
 366                  write_1602_command(0x1c,1);
 367                  for(i=0;i<time;i++)
 368                  delay1602(10);
 369              }
 370          }
 371          
 372          /*======================================================================*/
 373          /*            以左移动的方式在第一行显示长于16字节的字符串              */
 374          /*======================================================================*/
 375          /*void movedata_1602_left(unsigned char *d)
 376          {
 377              unsigned int i=0,j=0,k=15,x=0,L=0;
 378              for(;j<15;j++)
 379              {
 380                  for(i=0;i<=j;i++)
 381                  {
 382                      display_1602_onechar(15-j+i,0,d[i]);
 383                  }
 384                  delay1602(100);
 385              }
 386              i=0;
 387              while(d[i+15]>=0x20) //若到达字串尾则退出,后16字符交给下一个循环处理
 388              {
 389                  for(x=0;x<16;x++,L++)
 390                  display_1602_onechar(x, 0, d[L+i]); //显示单个字符      
 391                  delay1602(100);
 392                  L-=16;
 393                  i++;
 394              };
 395              for(i=0;i<16;i++)//处理剩下的16个字符
 396              {    
 397                  write_1602_command(0x18,1);
 398                  delay1602(100);
 399              }
 400          }
 401          
 402          /*=======================================*/
 403          /*      以逐行上移的方式显示文章         */
 404          /*=======================================*/
 405          /*void movedata_1602_up(unsigned char *d)
 406          {
 407              unsigned int i=0,j=0,k=0,work=0;
 408              unsigned char Data1[16],Data2[16];
 409              for(j=0;work==0;j+=16)
 410              {
 411                  for(i=0;i<16;i++)
 412                  {
 413                      Data1[i]=d[i+j];
 414                      Data2[i]=d[i+16+j];
 415                      if(work)Data2[i]=' ';
 416                      if(Data2[i]<0x20){work=1;Data2[i]=' ';}
 417                       //最后一行没有字符的地方填满空格
 418                  }
 419                  
 420                  display_1602_listchar(0,0,Data1);
 421                  display_1602_listchar(0,1,Data2);
 422                  for(k=0;k<5;k++)delay1602(100);
 423              }
C51 COMPILER V8.02   LCMTEMP                                                               08/11/2007 11:03:53 PAGE 8   

 424              display_1602_listchar(0,0,Data2);
 425              display_1602_listchar(0,1,"                ");
 426              for(k=0;k<5;k++)delay1602(100);
 427              write_1602_command(0x01,1);//显示完最后一行后清0
 428          }
 429          
 430          
 431          /*================================================*/
 432          /*              以翻页的方式显示文章              */
 433          /*================================================*/
 434          /*void turnpage_1602(unsigned char *d)
 435          {
 436              unsigned int i=0,j=0,k=0,work=0;
 437              unsigned char Data1[16],Data2[16];
 438              for(j=0;work==0;j+=32)
 439              {
 440                  for(i=0;i<16;i++)
 441                  {
 442                      Data1[i]=d[i+j];
 443                      Data2[i]=d[i+16+j];
 444                      if(work==1)Data2[i]=' ';
 445                      if(work==2)Data1[i]=' ';
 446                      if(Data2[i]<0x20){work=1;Data2[i]=' ';}
 447                      if(Data1[i]<0x20){work=2;Data1[i]=' ';}
 448                  }
 449                  display_1602_listchar(0,0,Data1);
 450                  display_1602_listchar(0,1,Data2);
 451                  for(k=0;k<5;k++)delay1602(100);
 452              }
 453              write_1602_command(0x01,1);//显示完最后一行后清0
 454          }
 455          */
 456          
 457          
 458          
 459          
 460          
 461          
 462          


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =    613    ----
   CONSTANT SIZE    =     30    ----
   XDATA SIZE       =   ----    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =      8       9
   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 + -