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

📄 pmlcd.lst

📁 最简单的单片机驱动液晶显示屏显示的参考资料
💻 LST
📖 第 1 页 / 共 2 页
字号:
 241          *  功能: 判断LCM的左半屏或右半屏是否处于忙状态          *
C51 COMPILER V8.08   PMLCD                                                                 12/08/2008 21:06:17 PAGE 5   

 242          *        当LCM不忙时函数返回                            *
 243          *  输入: choe1为左半屏选择标志                          *
 244          *        choe2为右半屏选择标志                          *
 245          *********************************************************/
 246          void chk_busy (uchar choe1,uchar choe2)
 247          {
 248   1        if(choe1==1)
 249   1        {
 250   2          lck = 0;//a0=0;
 251   2          P1 = 0x09;//rw=1;
 252   2          lck = 1;//e1=0;
 253   2          while(P0&0x80==1)
 254   2            delay(2);
 255   2          /*cs1=1;
 256   2          cs2=1;
 257   2          cs3=0;
 258   2          e1=1;*/
 259   2          lck = 0;
 260   2          P1 = 0x00;
 261   2          lck = 1;
 262   2        }
 263   1        if(choe2==1)
 264   1        {
 265   2          lck = 0;//a0=0;
 266   2          P1 = 0x0a;//rw=1;
 267   2          lck = 1;//e2=1;
 268   2          while(P0&0x80==1)
 269   2            delay(2);
 270   2          lck = 0; //e2=0;
 271   2          P1 = 0x00;
 272   2          lck = 1;
 273   2        }
 274   1      }
 275          
 276          /********************************************************
 277          *  功能: 根据输入的参数进行延时                         *
 278          *  输入: us为延时多少微秒                               *
 279          *        晶振为11.0592M,执行一条指令的时间约为1us       *
 280          *********************************************************/
 281          void delay (unsigned int us)   //delay time
 282          {
 283   1        while(us--);
 284   1      }
 285          
 286          
 287          /********************************************************
 288          *  功能: 根据输入的参数进行延时                         *
 289          *  输入: us为延时多少毫秒                               *
 290          *        晶振为11.0592M,执行一条指令的时间约为1us       *
 291          *        1ms = 1000 * 1us                               *
 292          *********************************************************/
 293          void delay1 (unsigned int ms)
 294          {
 295   1        unsigned int i,j;
 296   1        for(i=0;i<ms;i++)
 297   1        for(j=0;j<1000;j++)
 298   1        ;
 299   1      }
 300          
 301          
 302          /********************************************************
 303          *  功能: 初始化LCM                                      *
C51 COMPILER V8.08   PMLCD                                                                 12/08/2008 21:06:17 PAGE 6   

 304          *  输入: 无须输入参数                                   *
 305          *********************************************************/
 306          void init_lcd (void)
 307          {
 308   1      
 309   1        wr_lcd (1,1,comm,0xe2);
 310   1        wr_lcd (1,1,comm,0xa4);
 311   1        wr_lcd (1,1,comm,0xa9);
 312   1        wr_lcd (1,1,comm,0xa0);
 313   1        wr_lcd (1,1,comm,0xee);
 314   1        wr_lcd (1,1,comm,0xaf);
 315   1      }
 316          
 317          /********************************************************
 318          *  功能: 向LCM送16*16的汉字                             *
 319          *  输入: *chn为存放汉字点阵的起始地址                   *
 320          *********************************************************/
 321          void disphz (uchar code *chn)
 322          {
 323   1        uchar i,j,k;
 324   1        for(k=0;k<3;k++)
 325   1        {
 326   2          for(j=0;j<4;j++)
 327   2          {
 328   3            wr_lcd (1,0,comm,f_page+j);
 329   3            wr_lcd (1,0,comm,f_row);
 330   3            wr_lcd (1,0,comm,f_line+12+k*16);
 331   3            for(i=0;i<16;i++)
 332   3              wr_lcd (1,0,dat,chn[k*64+j*16+i]);
 333   3          }
 334   2        }
 335   1        for(k=3;k<6;k++)
 336   1        {
 337   2          for(j=0;j<4;j++)
 338   2          {
 339   3            wr_lcd (0,1,comm,f_page+j);
 340   3            wr_lcd (0,1,comm,f_row);
 341   3            wr_lcd (0,1,comm,f_line+k*16-48);
 342   3            for(i=0;i<16;i++)
 343   3              wr_lcd (0,1,dat,chn[k*64+j*16+i]);
 344   3          }
 345   2        }
 346   1      }
 347          
 348          
 349          /********************************************************
 350          *  功能: 向LCM送8*16的字符                              *
 351          *  输入: *img为存放字符点阵的起始地址                   *
 352          *********************************************************/
 353          
 354          void dispzf (uchar code *eng)
 355          {
 356   1        uchar i,j,k;
 357   1        for(k=0;k<7;k++)
 358   1        {
 359   2          for(j=0;j<4;j++)
 360   2          {
 361   3            wr_lcd (1,0,comm,f_page+j);
 362   3            wr_lcd (1,0,comm,f_row);
 363   3            wr_lcd (1,0,comm,f_line+5+k*8);
 364   3            for(i=0;i<8;i++)
 365   3              wr_lcd (1,0,dat,eng[k*32+j*8+i]);
C51 COMPILER V8.08   PMLCD                                                                 12/08/2008 21:06:17 PAGE 7   

 366   3          }
 367   2        }
 368   1        for(k=7;k<14;k++)
 369   1        {
 370   2          for(j=0;j<4;j++)
 371   2          {
 372   3            wr_lcd (0,1,comm,f_page+j);
 373   3            wr_lcd (0,1,comm,f_row);
 374   3            wr_lcd (0,1,comm,f_line+k*8-56);
 375   3            for(i=0;i<8;i++)
 376   3              wr_lcd (0,1,dat,eng[k*32+j*8+i]);
 377   3          }
 378   2        }
 379   1      }
 380          
 381          
 382          
 383          
 384          //************显示一幅图象************
 385          
 386          void disptu (uchar code *img)
 387          {
 388   1        uchar i,j;
 389   1        for(j=0;j<4;j++)
 390   1        {
 391   2          wr_lcd (1,1,comm,f_page+j);
 392   2          wr_lcd (1,1,comm,f_row);
 393   2          wr_lcd (1,1,comm,f_line);
 394   2          for(i=0;i<122;i++)
 395   2          {
 396   3            if(i<61)
 397   3            {wr_lcd (1,0,comm,f_line+i);
 398   4             wr_lcd (1,0,dat,img[j*122+i]);}
 399   3            else
 400   3            {wr_lcd (0,1,comm,f_line+i-61);
 401   4             wr_lcd (0,1,dat,img[j*122+i]);}
 402   3          }
 403   2        }
 404   1      }
 405          
 406          
 407          /********************************************************
 408          *  功能: 向LCM的左半屏和右半屏送点阵数据                *
 409          *  输入: data1,data2为待显示数据                        *
 410          *********************************************************/
 411          void wrlattice (uchar data1,uchar data2)
 412          {
 413   1        uchar i,j;
 414   1        for(j=0;j<4;j++)
 415   1        {
 416   2          wr_lcd (1,1,comm,f_page+j);
 417   2          wr_lcd (1,1,comm,f_row);
 418   2          wr_lcd (1,1,comm,f_line);
 419   2          for(i=0;i<61;i=i+2)
 420   2          {
 421   3            wr_lcd (1,1,dat,data1);
 422   3            wr_lcd (1,1,dat,data2);
 423   3          }
 424   2        }
 425   1      }
 426          
 427          //**************清除数码管显示***********
C51 COMPILER V8.08   PMLCD                                                                 12/08/2008 21:06:17 PAGE 8   

 428          /*void  clr79disp()
 429          { unsigned char i;
 430            cmd8279 = 0xd1;//清除8279
 431            delay(2);
 432            cmd8279 = 0x00;//左边输入 八位字符显示,外部译码键扫描方式,双键互锁
 433            delay(2);
 434            cmd8279 = 0x2A;//10分频,(ALE = 1/6 OSC)
 435            delay(2);
 436            cmd8279 = 0x60;//读8279RAM不自动加1
 437            delay(2);
 438            cmd8279 = 0x90;//写显示RAM自动加1
 439            delay(2);
 440            for(i=0;i<8;i++)
 441              dat8279 = 0x00;//缓冲区内容送数码管显示 
 442            
 443           }
 444          */
 445          //*************主程序*************
 446          
 447          void main ()
 448          {
 449   1        init_lcd (); //初始化LCD
 450   1       // BUZ = 0;//关蜂鸣器
 451   1      /*  clr79disp();//关数码管显示
 452   1        P0 = 0xff;
 453   1        P2=0x00;    
 454   1        ;           
 455   1        P2=0x08; //关跑马灯*/
 456   1        while (1)//主循环
 457   1        {
 458   2          wrlattice (0x00,0x00);
 459   2          disphz (tab1);
 460   2          delay1 (600);
 461   2          wrlattice (0xff,0x00);
 462   2          delay1 (600);
 463   2          wrlattice (0x00,0x00);
 464   2          dispzf (tab2);
 465   2          delay1 (600);
 466   2          wrlattice (0x33,0x33);
 467   2          delay1 (600);
 468   2          disptu (tab3);
 469   2          delay1 (600);
 470   2        }
 471   1      }


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =   1065    ----
   CONSTANT SIZE    =   1320    ----
   XDATA SIZE       =   ----    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =      8      22
   IDATA SIZE       =   ----    ----
   BIT SIZE         =   ----    ----
END OF MODULE INFORMATION.


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

⌨️ 快捷键说明

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