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

📄 12864a-3.lst

📁 12864液晶是市场上很常用的液晶,通过本程序可以测试液晶屏的好坏.
💻 LST
字号:
C51 COMPILER V6.12  12864A_3                                                               03/02/2007 13:44:57 PAGE 1   


C51 COMPILER V6.12, COMPILATION OF MODULE 12864A_3
OBJECT MODULE PLACED IN .\12864A-3.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE .\12864A-3.c DEBUG OBJECTEXTEND

stmt level    source

   1          /*******************************************************************/
   2          /*                                                                 */
   3          /* ME300B单片机开发系统演示程序 - 128*64LCD显示红外遥控器键值显示  */
   4          /*                                                                 */
   5          //;*  LCD型号:TS12864A-3(带汉字库)或兼容型号    控制器ST7920      */
   6          //;*  MCU:AT89S52 ,晶体频率:11.0592MHz                              */
   7          /*                                                                 */
   8          /* 邮箱:  gguoqing@willar.com                                      */
   9          /* 网站: http://www.willar.com                                    */
  10          /* 作者: gguoqing                                                 */
  11          /* 时间: 2006/05/26                                               */
  12          /*                                                                 */                                     
             -                             
  13          /*【版权】Copyright(C)伟纳电子 www.willar.com  All Rights Reserved */
  14          /*【声明】此程序仅用于学习与参考,引用请注明版权和作者信息!       */
  15          /*                                                                 */
  16          /*******************************************************************/
  17          
  18          #include <reg51.h>
  19          #include <intrins.h>
  20          	
  21          #define uchar unsigned char
  22          #define uint  unsigned int
  23          /*TS12864A-3 端口定义*/
  24          #define LCD_data  P0             //数据口
  25          sbit LCD_RS  =  P3^5;            //寄存器选择输入 
  26          sbit LCD_RW  =  P3^6;            //液晶读/写控制
  27          sbit LCD_EN  =  P3^4;            //液晶使能控制
  28          sbit LCD_PSB =  P3^7;            //串/并方式控制
  29          sbit wela    =  P2^6;
  30          sbit dula    =  P2^7;
  31          
  32          uchar code dis1[] = {"天祥电子"};
  33          uchar code dis2[] = {"www.txmcu.com"};
  34          uchar code dis3[] = {"TX-1C 学习板 "};
  35          uchar code dis4[] = {"是您最好的选择! "};
  36          
  37          #define delayNOP(); {_nop_();_nop_();_nop_();_nop_();};
  38          uchar IRDIS[2];
  39          uchar IRCOM[4];
  40          void delay0(uchar x);  //x*0.14MS
  41          void beep();
  42          void  dataconv();
  43          void lcd_pos(uchar X,uchar Y);  //确定显示位置
  44          /*******************************************************************/
  45          /*                                                                 */
  46          /*  延时函数                                                       */
  47          /*                                                                 */
  48          /*******************************************************************/
  49          void delay(int ms)
  50          {
  51   1          while(ms--)
  52   1      	{
  53   2            uchar i;
  54   2      	  for(i=0;i<250;i++)  
C51 COMPILER V6.12  12864A_3                                                               03/02/2007 13:44:57 PAGE 2   

  55   2      	   {
  56   3      	    _nop_();			   
  57   3      		_nop_();
  58   3      		_nop_();
  59   3      		_nop_();
  60   3      	   }
  61   2      	}
  62   1      }		
  63          /*******************************************************************/
  64          /*                                                                 */
  65          /*检查LCD忙状态                                                    */
  66          /*lcd_busy为1时,忙,等待。lcd-busy为0时,闲,可写指令与数据。      */
  67          /*                                                                 */
  68          /*******************************************************************/
  69          bit lcd_busy()
  70           {                          
  71   1          bit result;
  72   1          LCD_RS = 0;
  73   1          LCD_RW = 1;
  74   1          LCD_EN = 1;
  75   1          delayNOP();
  76   1          result = (bit)(P0&0x80);
  77   1          LCD_EN = 0;
  78   1          return(result); 
  79   1       }
  80          /*******************************************************************/
  81          /*                                                                 */
  82          /*写指令数据到LCD                                                  */
  83          /*RS=L,RW=L,E=高脉冲,D0-D7=指令码。                             */
  84          /*                                                                 */
  85          /*******************************************************************/
  86          void lcd_wcmd(uchar cmd)
  87          {                          
  88   1         while(lcd_busy());
  89   1          LCD_RS = 0;
  90   1          LCD_RW = 0;
  91   1          LCD_EN = 0;
  92   1          _nop_();
  93   1          _nop_(); 
  94   1          P0 = cmd;
  95   1          delayNOP();
  96   1          LCD_EN = 1;
  97   1          delayNOP();
  98   1          LCD_EN = 0;  
  99   1      }
 100          /*******************************************************************/
 101          /*                                                                 */
 102          /*写显示数据到LCD                                                  */
 103          /*RS=H,RW=L,E=高脉冲,D0-D7=数据。                               */
 104          /*                                                                 */
 105          /*******************************************************************/
 106          void lcd_wdat(uchar dat)
 107          {                          
 108   1         while(lcd_busy());
 109   1          LCD_RS = 1;
 110   1          LCD_RW = 0;
 111   1          LCD_EN = 0;
 112   1          P0 = dat;
 113   1          delayNOP();
 114   1          LCD_EN = 1;
 115   1          delayNOP();
 116   1          LCD_EN = 0; 
C51 COMPILER V6.12  12864A_3                                                               03/02/2007 13:44:57 PAGE 3   

 117   1      }
 118          /*******************************************************************/
 119          /*                                                                 */
 120          /*  LCD初始化设定                                                  */
 121          /*                                                                 */
 122          /*******************************************************************/
 123          void lcd_init()
 124          { 
 125   1      
 126   1          LCD_PSB = 1;         //并口方式
 127   1          
 128   1          lcd_wcmd(0x34);      //扩充指令操作
 129   1          delay(5);
 130   1          lcd_wcmd(0x30);      //基本指令操作
 131   1          delay(5);
 132   1          lcd_wcmd(0x0C);      //显示开,关光标
 133   1          delay(5);
 134   1          lcd_wcmd(0x01);      //清除LCD的显示内容
 135   1          delay(5);
 136   1      }
 137          /*********************************************************/
 138          /*														 */
 139          /* 主程序           									 */
 140          /*                                                       */
 141          /*********************************************************/
 142            main()
 143           {
 144   1          uchar i;
 145   1          delay(10);                 //延时
 146   1          wela=0;
 147   1      	dula=0; 
 148   1          lcd_init();                //初始化LCD             
 149   1        
 150   1          lcd_pos(0,0);             //设置显示位置为第一行的第1个字符
 151   1           i = 0;
 152   1          while(dis1[i] != '\0')
 153   1           {                         //显示字符
 154   2             lcd_wdat(dis1[i]);
 155   2             i++;
 156   2           }
 157   1          lcd_pos(1,0);             //设置显示位置为第二行的第1个字符
 158   1           i = 0;
 159   1          while(dis2[i] != '\0')
 160   1           {
 161   2             lcd_wdat(dis2[i]);      //显示字符
 162   2             i++;
 163   2           }
 164   1       	 lcd_pos(2,0);             //设置显示位置为第三行的第1个字符
 165   1           i = 0;
 166   1          while(dis3[i] != '\0')
 167   1           {
 168   2             lcd_wdat(dis3[i]);      //显示字符
 169   2             i++;
 170   2           }
 171   1      	 lcd_pos(3,0);             //设置显示位置为第四行的第1个字符
 172   1           i = 0;
 173   1          while(dis4[i] != '\0')
 174   1           {
 175   2             lcd_wdat(dis4[i]);      //显示字符
 176   2             i++;
 177   2           }
 178   1           while(1);
C51 COMPILER V6.12  12864A_3                                                               03/02/2007 13:44:57 PAGE 4   

 179   1      }
 180          
 181          
 182          
 183          /*********************************************************/
 184          /*														 */
 185          /* 延时x*0.14ms子程序									 */
 186          /*                                                       */
 187          /*********************************************************/
 188          
 189          void delay0(uchar x)    //x*0.14MS
 190          {
 191   1        uchar i;
 192   1        while(x--)
 193   1       {
 194   2        for (i = 0; i<13; i++) {}
 195   2       }
 196   1      }
 197          /*********************************************************/
 198          /*                                                       */
 199          /* 设定显示位置                                          */
 200          /*                                                       */
 201          /*********************************************************/
 202          void lcd_pos(uchar X,uchar Y)
 203          {                          
 204   1         uchar  pos;
 205   1         if (X==0)
 206   1           {X=0x80;}
 207   1         else if (X==1)
 208   1           {X=0x90;}
 209   1         else if (X==2)
 210   1           {X=0x88;}
 211   1         else if (X==3)
 212   1           {X=0x98;}
 213   1         pos = X+Y ;  
 214   1         lcd_wcmd(pos);     //显示地址
 215   1      }


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =    310    ----
   CONSTANT SIZE    =     55    ----
   XDATA SIZE       =   ----    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =      6       2
   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 + -