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

📄 12864a-3.lst

📁 51单片机系统中对12864液晶的驱动和测试的程序.
💻 LST
字号:
C51 COMPILER V6.12  12864A_3                                                               01/04/2002 01:54:59 PAGE 1   


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

stmt level    source

   1          /*******************************************************************/
   2          /*                                                                 */
   3          /* 51单片机演示程序 - 128*64LCD显示                                */
   4          /*                                                                 */
   5          /*  LCD型号:带汉字库)或兼容型号    控制器ST7920                  */
   6          /*  MCU:STC89C52 ,晶体频率:11.0592MHz                             */
   7          /*  丫丫设计屋                                                     */
   8          /*  邮箱:  zhaopingyong@yahoo.cn                                   */
   9          /*  网站:                                     */
  10          /*                                                                 */                                     
             -                             
  11          /*                                                                 */
  12          /*******************************************************************/
  13          
  14          #include"AT89x52.h"
  15          #include"intrins.h"
  16          	
  17          #define uchar unsigned char
  18          #define uint  unsigned int
  19          /* 端口定义*/
  20          #define LCD_data  P0             //数据口
  21          sbit LCD_RS  =  P2^4;            //寄存器选择输入 
  22          sbit LCD_RW  =  P2^3;            //液晶读/写控制
  23          sbit LCD_EN  =  P2^2;            //液晶使能控制
  24          sbit LCD_RST =  P2^7;            //液晶复位
  25          sbit LCD_PSB =  P2^5;           //液晶并/串选择
  26          
  27          sbit DUAN=P2^0;     //74HC573的LE端  U5  LED的段选端
  28          sbit WEI=P2^1;      //74HC573的LE端  U4  LED的位选端
  29          
  30          uchar code dis1[] = {"    丫丫设计屋"};
  31          uchar code dis2[] = {"   QQ:794652574"};
  32          uchar code dis3[] = {"多功能--学习板"};
  33          uchar code dis4[] = {"学单片机的好帮手"};
  34          
  35          #define delayNOP(); {_nop_();_nop_();_nop_();_nop_();};
  36          void delay0(uchar x);  //x*0.14MS
  37          void beep();
  38          void  dataconv();
  39          void lcd_pos(uchar X,uchar Y);  //确定显示位置
  40          /*******************************************************************/
  41          /*                                                                 */
  42          /*  数码管位选控制函数                                             */
  43          /*                                                                 */
  44          /*******************************************************************/
  45          void wei_1()
  46          {
  47   1      	WEI=1;
  48   1      	P0=0;
  49   1      	WEI=0;
  50   1      }
  51          /*******************************************************************/
  52          /*                                                                 */
  53          /*  数码管段选控制函数                                             */
  54          /*                                                                 */
C51 COMPILER V6.12  12864A_3                                                               01/04/2002 01:54:59 PAGE 2   

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

 117   1      }
 118          /*******************************************************************/
 119          /*                                                                 */
 120          /*写显示数据到LCD                                                  */
 121          /*RS=H,RW=L,E=高脉冲,D0-D7=数据。                               */
 122          /*                                                                 */
 123          /*******************************************************************/
 124          void lcd_wdat(uchar dat)
 125          {                          
 126   1         while(lcd_busy());
 127   1          LCD_RS = 1;
 128   1          LCD_RW = 0;
 129   1          LCD_EN = 0;
 130   1          P0 = dat;
 131   1          delayNOP();
 132   1          LCD_EN = 1;
 133   1          delayNOP();
 134   1          LCD_EN = 0;
 135   1      }
 136          /*******************************************************************/
 137          /*                                                                 */
 138          /*  LCD初始化设定                                                  */
 139          /*                                                                 */
 140          /*******************************************************************/
 141          void lcd_init()
 142          { 
 143   1      	wei_1();
 144   1      	duan_1();
 145   1      	LCD_RST=0;
 146   1      	delay(1);
 147   1      	LCD_RST=1;
 148   1      	LCD_PSB=1;
 149   1      	delay(10);
 150   1         lcd_wcmd(0x34);      //扩充指令操作
 151   1         delay(5);
 152   1         lcd_wcmd(0x30);      //基本指令操作
 153   1         delay(5);
 154   1         lcd_wcmd(0x0C);      //显示开,关光标
 155   1         delay(5);
 156   1         lcd_wcmd(0x01);      //清除LCD的显示内容
 157   1         delay(5);
 158   1      }
 159          /*********************************************************/
 160          /*														 */
 161          /* 主程序           									 */
 162          /*                                                       */
 163          /*********************************************************/
 164            main()
 165           {
 166   1          uchar i;
 167   1          delay(10);                 //延时
 168   1      
 169   1          lcd_init();                //初始化LCD             
 170   1        
 171   1          lcd_pos(0,0);             //设置显示位置为第一行的第1个字符
 172   1           i = 0;
 173   1          while(dis1[i] != '\0')
 174   1           {                         //显示字符
 175   2             lcd_wdat(dis1[i]);
 176   2             i++;
 177   2           }
 178   1          lcd_pos(1,0);             //设置显示位置为第二行的第1个字符
C51 COMPILER V6.12  12864A_3                                                               01/04/2002 01:54:59 PAGE 4   

 179   1           i = 0;
 180   1          while(dis2[i] != '\0')
 181   1           {
 182   2             lcd_wdat(dis2[i]);      //显示字符
 183   2             i++;
 184   2           }
 185   1       	 lcd_pos(2,0);             //设置显示位置为第三行的第1个字符
 186   1           i = 0;
 187   1          while(dis3[i] != '\0')
 188   1           {
 189   2             lcd_wdat(dis3[i]);      //显示字符
 190   2             i++;
 191   2           }
 192   1      	 lcd_pos(3,0);             //设置显示位置为第四行的第1个字符
 193   1           i = 0;
 194   1          while(dis4[i] != '\0')
 195   1           {
 196   2             lcd_wdat(dis4[i]);      //显示字符
 197   2             i++;
 198   2           }
 199   1           while(1);
 200   1      }
 201          
 202          
 203          
 204          /*********************************************************/
 205          /*														 */
 206          /* 延时x*0.14ms子程序									 */
 207          /*                                                       */
 208          /*********************************************************/
 209          
 210          void delay0(uchar x)    //x*0.14MS
 211          {
 212   1        uchar i;
 213   1        while(x--)
 214   1       {
 215   2        for (i = 0; i<13; i++) {}
 216   2       }
 217   1      }
 218          /*********************************************************/
 219          /*                                                       */
 220          /* 设定显示位置                                          */
 221          /*                                                       */
 222          /*********************************************************/
 223          void lcd_pos(uchar X,uchar Y)
 224          {                          
 225   1         uchar  pos;
 226   1         if (X==0)
 227   1           {X=0x80;}
 228   1         else if (X==1)
 229   1           {X=0x90;}
 230   1         else if (X==2)
 231   1           {X=0x88;}
 232   1         else if (X==3)
 233   1           {X=0x98;}
 234   1         pos = X+Y ;  
 235   1         lcd_wcmd(pos);     //显示地址
 236   1      }


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =    346    ----
C51 COMPILER V6.12  12864A_3                                                               01/04/2002 01:54:59 PAGE 5   

   CONSTANT SIZE    =     63    ----
   XDATA SIZE       =   ----    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =   ----       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 + -