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

📄 5.2.3-1.lst

📁 汽车通讯控制程序 电子屏字符显示器
💻 LST
📖 第 1 页 / 共 3 页
字号:
 216   2                      Wrdata(cbyte);                  /*写输出一字节*/
 217   2                      x++;
 218   2                      col++;
 219   2                      if (col==LCMLIMIT){col=0;row++;row++;};         /*下一列,如果列越界换行*/
 220   2                              if (row>7) row=0;                                       /*如果行越界,返回首行*/
 221   2                      }                                                                       /*上半个字符输出结束*/
 222   1              col = bakerx;                           /*列对齐*/
 223   1              row = bakery+1;                         /*指向下半个字符行*/
 224   1      /*下半个字符输出,8列*/
 225   1              for(i=0;i<8;i++)
 226   1                      {
 227   2                      cbyte = Ezk[x];                 /*取点阵码*/
 228   2                      Wrdata(cbyte);                  /*写输出一字节*/
 229   2                      x++;
 230   2                      col++;
 231   2                      if (col==LCMLIMIT){col=0;row=row+2;};   /*下一列,如果列越界换行*/
 232   2                              if (row>7) row=1;       /*如果行越界,返回首行*/
 233   2                      }                                       /*下半个字符输出结束*/
 234   1              row=bakery;
 235   1              }                                               /*整个字符输出结束*/
 236          
 237          /*********************************全角字符点阵码数据输出********************************/
 238          void Putcdot(Uchar Order)
 239                  {
 240   1              Uchar i,bakerx,bakery;                  /*共定义3个局部变量*/
 241   1              int x;                                          /*偏移量,字符量少的可以定义为UCHAR     */
C51 COMPILER V7.06   5_2_3_1                                                               06/13/2005 17:14:18 PAGE 5   

 242   1              bakerx = col;                           /*暂存x,y坐标,已备下半个字符使用*/
 243   1              bakery = row;
 244   1              x=Order * 0x20;                         /*每个字符32字节*/
 245   1              /*上半个字符输出,16列*/
 246   1              for(i=0;i<16;i++)
 247   1                      {
 248   2                      Wrdata(Hzk[x]);                 /*写输出一字节*/
 249   2                      x++;
 250   2                      col++;
 251   2                      if (col==LCMLIMIT){ col=0;row++;row++;} /*下一列,如果列越界换行*/
 252   2                              if (row>6) row=0;       /*如果行越界,返回首行*/
 253   2                      }                                       /*上半个字符输出结束*/
 254   1              /*下半个字符输出,16列  */
 255   1              col = bakerx;
 256   1              row = bakery+1;
 257   1              for(i=0;i<16;i++)                               /*下半部分*/
 258   1                      {
 259   2                      Wrdata(Hzk[x]);
 260   2                      x++;
 261   2                      col++;
 262   2                      if (col==LCMLIMIT){col=0;row++;row++;}  /*下一列,如果列越界换行*/
 263   2                              if (row>7) row=1;       /*如果行越界,返回首行*/
 264   2                      }                                       /*下半个字符输出结束*/
 265   1              row = bakery;
 266   1              }                                               /*整个字符输出结束*/
 267          
 268          /************************************清屏,全屏幕清零***********************************/
 269          void Lcmcls( void )
 270                  {
 271   1              for(row=0;row<8;row++)
 272   1                      for(col=0;col<LCMLIMIT;col++) Wrdata(0);
 273   1              }
 274          
 275          /***************************从液晶片上读数据,保留在全局变量中***************************/
 276          void Rddata(void)
 277                  {
 278   1                   Locatexy();                        /*坐标定位,返回时保留分区状态不变*/
 279   1                      Datalcm=0xFF;
 280   1                      Dilcm = 1;                              /*数据*/
 281   1                      Rwlcm = 1;                      /*读数据*/
 282   1                      Elcm = 1;                               /*读入到LCM*/
 283   1                      _nop_();
 284   1                      cbyte = Datalcm;                        /*虚读一次*/
 285   1                      Elcm = 0;
 286   1                   Locatexy();                        /*坐标定位,返回时保留分区状态不变*/
 287   1                      Datalcm=0xFF;
 288   1                      _nop_();
 289   1                      Dilcm = 1;                              /*数据*/
 290   1                      Rwlcm = 1;                      /*读数据*/
 291   1                      Elcm = 1;                               /*读入到LCM*/
 292   1                      _nop_();
 293   1                      cbyte = Datalcm;                        /*从数据口读数据,真读*/
 294   1                      Elcm = 0;
 295   1              }
 296          
 297          /*************************************数据写输出/**************************************/
 298          void Wrdata(Uchar X)
 299                  {
 300   1                   Locatexy();                        /*坐标定位,返回时保留分区状态不变*/
 301   1                      Dilcm = 1;                              /*数据输出*/
 302   1                      Rwlcm = 0;                      /*写输出*/
 303   1                      Datalcm = X;                    /*数据输出到数据口*/
C51 COMPILER V7.06   5_2_3_1                                                               06/13/2005 17:14:18 PAGE 6   

 304   1                      Elcm = 1;                               /*读入到LCM*/
 305   1                      _nop_();
 306   1                      Elcm = 0;
 307   1              }
 308          
 309          /*********************************命令输出到左区控制口*********************************/
 310          void WrcmdL(Uchar X)
 311                  {
 312   1                      lcdbusyL();                             /*确定分区,返回时保留分区状态不变*/
 313   1                      Dilcm = 0;                              /*命令操作*/
 314   1                      Rwlcm = 0;                      /*写输出*/
 315   1                      Datalcm = X;                    /*数据输出到数据口*/
 316   1                      Elcm = 1;_nop_();Elcm = 0;      /*读入到LCM*/
 317   1              }
 318          
 319          /********************************命令输出到中区控制口********************************/
 320          void WrcmdM(Uchar X)
 321                  {
 322   1                      lcdbusyM();                     /*确定分区,返回时保留分区状态不变*/
 323   1                      Dilcm = 0;                              /*命令操作*/
 324   1                      Rwlcm = 0;                      /*写输出*/
 325   1                      Datalcm = X;                    /*命令输出到数据口*/
 326   1                      Elcm = 1;_nop_();Elcm = 0;      /*读入到LCM*/
 327   1              }
 328          
 329          /*********************************命令输出到右区控制口********************************/
 330          void WrcmdR(Uchar X)
 331                  {
 332   1                      lcdbusyR();                             /*确定分区,返回时保留分区状态不变*/
 333   1                      Dilcm = 0;                           /*命令操作*/
 334   1                      Rwlcm = 0;                      /*写输出*/
 335   1                      Datalcm = X;                    /*命令输出到数据口*/
 336   1                      Elcm = 1;_nop_();Elcm = 0;      /*读入到LCM*/
 337   1              }
 338          
 339          /************************分区操作允许等待,返回时保留分区选择状态*************************/
 340          void lcdbusyL(void)
 341                  {
 342   1              CSALCM = 0; CSBLCM = 0; /*清零CSA,CSB,选择左区*/
 343   1                 wtcom();                             /*等待使能*/
 344   1              }
 345          void lcdbusyM(void)
 346                  {
 347   1              CSALCM = 0; CSBLCM =1;  /*置CSA为0,CSB为1,选择中区*/
 348   1                 wtcom();                             /*等待使能*/
 349   1              }
 350          void lcdbusyR(void)
 351                  {
 352   1              CSALCM = 1; CSBLCM = 0; /*置CSA为1,CSB为0,选择右区*/
 353   1      wtcom();                                /*等待使能*/
 354   1              }
 355          void wtcom(void)
 356                  {
 357   1                   Dilcm = 0;                         /*清零DI*/
 358   1                   Rwlcm = 1;                 /*置RW为1*/
 359   1                Datalcm = 0xFF;
 360   1                   Elcm = 1;_nop_();  
 361   1              while(Datalcm & Lcdbusy);
 362   1              Elcm = 0;
 363   1              }
 364          
 365          /******************根据设定的坐标数据,定位LCM上的下一个操作单元位置******************/
C51 COMPILER V7.06   5_2_3_1                                                               06/13/2005 17:14:18 PAGE 7   

 366          void Locatexy(void)
 367                  {
 368   1                unsigned char  x,y;
 369   1                switch (col&0xc0)                             /* col与0xC0*/
 370   1                      {                                               /*条件分支执行  */
 371   2                      case 0: {lcdbusyL();break;}     /*左区*/
 372   2                      case 0x40:      {lcdbusyM();break;}     /*中区*/
 373   2                      case 0x80:      {lcdbusyR();break;}     /*右区*/
 374   2                      }
 375   1                x = col&0x3F|SETX;                    /*col.and.0x3f.or.setx*/
 376   1                y = row&0x07|SETY;                    /*row.and.0x07.or.sety*/
 377   1                wtcom();                                              /*等待使能*/
 378   1                Dilcm = 0;                                    /*清零DI        */
 379   1                      Rwlcm = 0;                              /*清零RW*/
 380   1                      Datalcm = y;                            /*MOV   P0,Y    */
 381   1                      Elcm = 1;_nop_();Elcm = 0;
 382   1                      wtcom();                                        /*等待使能*/
 383   1                      Dilcm = 0;                                      /*清零DI*/
 384   1                      Rwlcm = 0;                              /*清零RW*/
 385   1                      Datalcm = x;                            /*MOV   P0,X*/
 386   1                      Elcm = 1;_nop_();Elcm = 0;
 387   1              }
 388          
 389          /*************************************液晶屏初始化**************************************/
 390          void Lcminit(void)
 391                  {
 392   1                      cbyte = DISPOFF;                        /*关闭显示屏*/
 393   1                      WrcmdL(cbyte);
 394   1                      WrcmdM(cbyte);
 395   1                      WrcmdR(cbyte);
 396   1                      cbyte = DISPON;                 /*打开显示屏*/
 397   1                      WrcmdL(cbyte);
 398   1                      WrcmdM(cbyte);
 399   1                      WrcmdR(cbyte);
 400   1                      cbyte = DISPFIRST;                      /*定义显示起始行为零*/
 401   1                      WrcmdL(cbyte);
 402   1                      WrcmdM(cbyte);
 403   1                      WrcmdR(cbyte);
 404   1                      Lcmcls();
 405   1                      col=0;                                  /*清屏*/
 406   1                      row=0;
 407   1                      Locatexy();
 408   1              }
 409          /****************************************延时*******************************************/
 410          void Delay(Uchar MS)
 411                  {
 412   1                      Uchar us,usn;
 413   1                      while(MS!=0)
 414   1                              { usn = 4;
 415   2                                      while(usn!=0)
 416   2                                              {
 417   3                                                      us=0xf0;
 418   3                                                      while (us!=0){us--;};
 419   3                                                      usn--;
 420   3                                              }
 421   2                                      MS--;
 422   2                              }
 423   1              }
 424          
 425          /************************************定义字符串数组*************************************/
 426          Uchar code STR1[]="China Mobile";
 427          Uchar code STR2[]="Communications";
C51 COMPILER V7.06   5_2_3_1                                                               06/13/2005 17:14:18 PAGE 8   

 428          Uchar code STR3[]="Corporation";
 429          Uchar code STR4[]="Welcome you!";
 430          
 431          /************************************定义中文字库***************************************/
 432          Uchar code Hzk[]={
 433          0x00,0xF8,0x08,0x08,0x08,0x08,0x08,0xFF,0x08,0x08,0x08,0x08,0x08,0xFC,0x08,0x00,        /*中*/
 434          0x00, 0x03,0x01,0x01,0x01,0x01,0x01,0xFF,0x01,0x01,0x01,0x01,0x01,0x03,0x00,0x00,
 435          0x00,0xFE,0x02,0x0A,0x8A,0x8A,0x8A,0xFA,0x8A,0xCA,0x8E,0x0A,0x02,0xFF,0x02,0x00,/*国*/
 436          0x00,0xFF,0x40,0x50,0x50,0x50,0x50,0x5F,0x50,0x52,0x54,0x50,0x40,0xFF,0x00,0x00,
 437          0x24,0x24,0xA4,0xFE,0xA3,0x22,0x10,0x88,0x8C,0x57,0xE4,0x24,0x14,0x0C,0x00,0x00,        /*移*/

⌨️ 快捷键说明

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