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

📄 lcd2.lst

📁 12864液晶显示屏结合周立功7290按键显示的具体例子
💻 LST
字号:
C51 COMPILER V7.00  LCD2                                                                   08/26/2008 15:15:12 PAGE 1   


C51 COMPILER V7.00, COMPILATION OF MODULE LCD2
OBJECT MODULE PLACED IN lcd2.OBJ
COMPILER INVOKED BY: D:\Keil\C51\BIN\C51.EXE lcd2.c BROWSE DEBUG OBJECTEXTEND

stmt level    source

   1          /*
   2          引脚连接
   3          DATA=P0,RS=P2.0,RW=P2.1,E=P2.2,PSB=P2.3,RES=P2.4
   4          */
   5          
   6          #include <reg51.h>
   7          #include <intrins.h>
   8          #include<lcdb.h>
   9          #include<shuzi.h>
  10          
  11          sbit RS = P2^0;
  12          sbit RW = P2^1;
  13          sbit E = P2^2;
  14          sbit PSB = P2^3;          //串并口选择
  15          sbit RES = P2^4;
  16          
  17          
  18          #define FIRST_ADDR 0      //定义字符/汉字显示起始位置
  19          
  20          
  21          //延时子程序
  22          void delay(unsigned int t)
  23          {  unsigned int i,j;
  24   1         for(i=0;i<t;i++)
  25   1            for(j=0;j<10;j++)
  26   1               ;
  27   1      }
  28          
  29          //测忙
  30          void chk_busy()
  31          {  RS=0;
  32   1         RW=1;
  33   1         E=1;
  34   1         while((P0&0x80)==0x80);
  35   1         E=0;
  36   1      }
  37          
  38          //读数据
  39          unsigned char lcdrd()
  40          {  unsigned char i;
  41   1         P3=0xFB;
  42   1         _nop_();
  43   1         E=1;
  44   1         delay(5);
  45   1         i=P0;
  46   1         _nop_();
  47   1         E=0;
  48   1         return i;
  49   1      }
  50          
  51          //写数据
  52          void lcdwd(unsigned char dispdata)
  53          {  chk_busy();
  54   1         _nop_();
  55   1         RS=1;
C51 COMPILER V7.00  LCD2                                                                   08/26/2008 15:15:12 PAGE 2   

  56   1         RW=0;
  57   1         E=1;
  58   1         P0=dispdata;
  59   1         delay(5);
  60   1         _nop_();
  61   1         E=0;
  62   1         _nop_();
  63   1         P0=0xff;
  64   1      }
  65          
  66          //写指令代码
  67          void lcdwc(unsigned char cmdcode)
  68          {  chk_busy();
  69   1         _nop_();
  70   1         RS=0;
  71   1         RW=0;
  72   1         E=1;
  73   1         P0=cmdcode;
  74   1         delay(5);
  75   1         _nop_();
  76   1         E=0;
  77   1         _nop_();
  78   1         P0=0xff;
  79   1      }
  80          
  81          //初始化
  82          void lcdreset()
  83          {  delay(2000);
  84   1         lcdwc(0x30);       //选择基本指令集
  85   1         lcdwc(0x30);       //选择8bit数据流
  86   1         delay(5);
  87   1         lcdwc(0x0c);       //开显示(无游标、不反白)
  88   1         delay(5);
  89   1         lcdwc(0x01);       //清除显示,并且设定地址指针为00H
  90   1         delay(5);
  91   1         lcdwc(0x06);       //指定在资料的读取及写入时,设定游标的移动方向及指定显示的移位
  92   1      }
  93          
  94          void hzkdis(unsigned char code *s)
  95          {  while(*s>0)
  96   1         {  lcdwd(*s);
  97   2            s++;
  98   2            delay(500);
  99   2         }
 100   1      }
 101          
 102          
 103          
 104          //整屏显示
 105          //当ii=0时显示上面128×32
 106          //当ii=8时显示下面128×32
 107          void lcdfill(unsigned char disdata)
 108          {  unsigned char x,y,ii;
 109   1         for(ii=0;ii<9;ii+=8)
 110   1            for(y=0;y<0x20;y++)
 111   1               for(x=0;x<8;x++)
 112   1               {  lcdwc(0x36);
 113   2                  lcdwc(y+0x80);        //行地址
 114   2                  lcdwc(x+0x80+ii);     //列地址
 115   2                  lcdwc(0x30);
 116   2                  lcdwd(disdata);
 117   2                  lcdwd(disdata);
C51 COMPILER V7.00  LCD2                                                                   08/26/2008 15:15:12 PAGE 3   

 118   2               }
 119   1      }
 120          
 121          //在任意位置显示任意图画 y1,x1,y2,x2为图画坐标,行数0-63,列数0-7, disdata为显示数据 
 122          void xiansi(unsigned char y1,unsigned char x1,unsigned char y2,unsigned char x2,unsigned char *disdata)  
 123          {  unsigned char x,y;
 124   1            for(y=y1;y<=y2;y++)
 125   1               for(x=x1;x<=x2;x++)
 126   1               {  lcdwc(0x36);
 127   2                                 if(y<32)
 128   2                  {  lcdwc(y+0x80);        //行地址
 129   3                     lcdwc(x+0x80);        //列地址
 130   3                                      }
 131   2                                      else                     //显示下半部分
 132   2                                      {
 133   3                                         lcdwc(y-32+0x80);      //行地址
 134   3                                              lcdwc(x+0x80+8);       //列地址
 135   3                                      }
 136   2                  lcdwc(0x30);
 137   2                                      lcdwd(disdata[2*(x2-x1+1)*(y-y1)+2*(x-x1)]);  //
 138   2                  lcdwd(disdata[2*(x2-x1+1)*(y-y1)+2*(x-x1)+1]); //
 139   2      
 140   2                               }
 141   1      }
 142          
 143          //y为显示的行,x为显示的列,x1,x2为显示的数字
 144          void shuzi(unsigned char y,unsigned char x,unsigned char x1,unsigned char x2)   
 145          {
 146   1         lcdwc(0x30);
 147   1         lcdwc(dizhi[y]+x);
 148   1              if(x1<=9)
 149   1         lcdwd(number[x1]); 
 150   1         else lcdwd(32);
 151   1         if(x2<=9)
 152   1         lcdwd(number[x2]);//执行这2个语句DDRAM地址计数器自动加1;
 153   1              else lcdwd(32);
 154   1      }
 155          
 156          //显示任意字符   y为显示的行,x为显示的列,s为显示的字符
 157          void zifu(unsigned char y,unsigned char x,unsigned char code *s)   
 158          {
 159   1         unsigned char i=0;
 160   1         lcdwc(0x30);
 161   1         lcdwc(dizhi[y]+x);
 162   1         x=x*2;
 163   1              while(*s>0)
 164   1         {  lcdwd(*s);
 165   2            s++;
 166   2            x++;
 167   2                      if(x==16)
 168   2            lcdwc(dizhi[y]);
 169   2         }
 170   1      }
 171          
 172          
 173          


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =    592    ----
   CONSTANT SIZE    =   1038    ----
   XDATA SIZE       =   ----    ----
C51 COMPILER V7.00  LCD2                                                                   08/26/2008 15:15:12 PAGE 4   

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