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

📄 12232.lst

📁 12232 LCD中实现16*16汉字任意行显示的源代码 UV2开发环境
💻 LST
📖 第 1 页 / 共 3 页
字号:
C51 COMPILER V7.09   12232                                                                 03/14/2007 23:21:25 PAGE 1   


C51 COMPILER V7.09, COMPILATION OF MODULE 12232
OBJECT MODULE PLACED IN 12232.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE 12232.c BROWSE DEBUG OBJECTEXTEND

line level    source

   1          /*
   2          2007,3,8拷贝后修改成显示16*16BMP和取模汉字的任意行显示的子程序。
   3          母版为KE文件夹中的12232.C
   4          2007.3.9修改目标为任意行和可以读改写。
   5          */
   6          
   7          #include<reg52.h>
   8          //#include<LCD_code.h>
   9          #include<intrins.h>
  10          
  11          
  12          //
  13          sbit RS=P3^6;
  14          sbit RW=P0^2;
  15          sbit E1=P0^0;
  16          sbit E2=P0^1;
  17          
  18          
  19          #define lcd_data P1
  20          //
  21          #define disp_on 0xAf
  22          #define disp_off 0xAe
  23          #define disp_start_line 0xC0
  24          #define page_addr_set 0xB8  //显示起始地址(后五位表示0~31行)
  25          #define col_addr_set 0x00
  26          #define mode_write 0xEE      //写模式
  27          #define status_busy 0x80
  28          #define dynamic_driver 0xA4 // 动态驱动
  29          #define adc_select 0xA0         //CLOCKWISE
  30          #define clk32 0xA9
  31          #define clk16 0xA8
  32          #define reset 0xE2          //软件复位
  33          
  34          #define u_char unsigned char
  35          #define u_int unsigned int
  36          
  37          void lcd_init(void);
  38          void lcd_clr(void);
  39          void wait_ready(void);
  40          void draw_bmp(u_char col,u_char y,u_char width,u_char *bmp);
  41          
  42          
  43          
  44          //      全局变量及标志位定义
  45          
  46          
  47          /****************************************************************************/
  48          /* 函数名:send_mi                                                          */
  49          /* 功  能:发指令instruction到主窗口                                        */
  50          /* 作  者:spot                                                             */
  51          /* 输  入:instruction                                                      */
  52          /* 输  出:无                                                               */
  53          /*                                                                          */
  54          /* 历史记录:                                                               */
  55          /*  spot          2005-06-28     Creat Inital version. (Version 1.0)        */
C51 COMPILER V7.09   12232                                                                 03/14/2007 23:21:25 PAGE 2   

  56          /****************************************************************************/
  57          void send_mi(u_char instruction)
  58          {
  59   1          E2 = 0;
  60   1          E1 = 1;
  61   1      //      wait_ready();
  62   1          RS = 0;                 /* 指令   */
  63   1          RW = 0;                 /* 写触发 */
  64   1          _nop_();
  65   1          lcd_data = instruction; /* 指令码 */
  66   1          _nop_();
  67   1          E1 = 0;                 /* 关M    */
  68   1          _nop_();
  69   1      }
  70          
  71          /****************************************************************************/
  72          /* 函数名:send_md                                                          */
  73          /* 功  能:发数据data到主窗口                                               */
  74          /* 作  者:spot                                                             */
  75          /* 输  入:c_data                                                           */
  76          /* 输  出:无                                                               */
  77          /*                                                                          */
  78          /* 历史记录:                                                               */
  79          /*  spot          2005-06-28     Creat Inital version. (Version 1.0)        */
  80          /****************************************************************************/
  81          void send_md(u_char c_data)
  82          {
  83   1          E2 = 0;
  84   1          E1 = 1;  
  85   1       //   wait_ready();
  86   1          _nop_();
  87   1          RS = 1;                 /* 数据   */
  88   1          RW = 0;                 /* 写触发 */
  89   1          _nop_();
  90   1          lcd_data = c_data;      /* 数据   */
  91   1          _nop_();
  92   1          E1 = 0;                 /* 关M    */
  93   1          _nop_();
  94   1      }
  95          
  96          /****************************************************************************/
  97          /* 函数名:send_si                                                          */
  98          /* 功  能:发指令instruction到从窗口                                        */
  99          /* 作  者:spot                                                             */
 100          /* 输  入:instruction                                                      */
 101          /* 输  出:无                                                               */
 102          /*                                                                          */
 103          /* 历史记录:                                                               */
 104          /*  spot          2005-06-28     Creat Inital version. (Version 1.0)        */
 105          /****************************************************************************/
 106          void send_si(u_char instruction)
 107          {
 108   1              E1=0;
 109   1          E2 = 1;   
 110   1      //       wait_ready();
 111   1      
 112   1          _nop_();
 113   1          RS = 0;                 /* 指令   */
 114   1          RW = 0;                 /* 写触发 */
 115   1          _nop_();
 116   1          lcd_data=instruction;   /* 指令码 */
 117   1          _nop_();
C51 COMPILER V7.09   12232                                                                 03/14/2007 23:21:25 PAGE 3   

 118   1          E2 = 0;                 /* 关S    */
 119   1          _nop_();
 120   1      }
 121          
 122          /****************************************************************************/
 123          /* 函数名:send_sd                                                          */
 124          /* 功  能:发数据data到从窗口                                               */
 125          /* 作  者:spot                                                             */
 126          /* 输  入:c_data                                                           */
 127          /* 输  出:无                                                               */
 128          /*                                                                          */
 129          /* 历史记录:                                                               */
 130          /*  spot          2005-06-28     Creat Inital version. (Version 1.0)        */
 131          /****************************************************************************/
 132          void send_sd(u_char c_data)
 133          {
 134   1              E1=0;
 135   1          E2 = 1;
 136   1      //       wait_ready();
 137   1          _nop_();
 138   1          RS = 1;                 /* 数据   */
 139   1          RW = 0;                 /* 写触发 */
 140   1          _nop_();
 141   1          lcd_data=c_data;
 142   1          _nop_();
 143   1          E2 = 0;
 144   1          _nop_();
 145   1      }
 146          
 147          /****************************************************************************/
 148          /* 函数名:wait_ready                                                       */
 149          /* 功  能:等待ready:等待LCD内部操作完成                                    */
 150          /* 作  者:spot                                                             */
 151          /* 输  入:无                                                               */
 152          /* 输  出:无                                                               */
 153          /*                                                                          */
 154          /* 历史记录:                                                               */
 155          /*  spot          2005-06-28     Creat Inital version. (Version 1.0)        */
 156          /****************************************************************************/
 157          void wait_ready(void)
 158          {
 159   1          RS = 0;/*指令*/
 160   1          RW = 1;/*读*/
 161   1          _nop_();
 162   1          while(lcd_data & status_busy); /*读入LCD状态,1=忙,一直等待LCD内部操作完成*/
 163   1      }
 164          
 165          
 166          /****************************************************************************/
 167          /* 函数名:lcd_clr                                                          */
 168          /* 功  能:LCD清屏                                                          */
 169          /* 作  者:spot                                                             */
 170          /* 输  入:无                                                               */
 171          /* 输  出:无                                                               */
 172          /*                                                                          */
 173          /* 历史记录:                                                               */
 174          /*  spot          2005-06-28     Creat Inital version. (Version 1.0)        */
 175          /****************************************************************************/
 176          void lcd_clr(void)
 177          {
 178   1          u_char i, page;
 179   1      
C51 COMPILER V7.09   12232                                                                 03/14/2007 23:21:25 PAGE 4   

 180   1          for (page=0; page<4; page++)
 181   1          {
 182   2              send_mi(page_addr_set|page);
 183   2              send_si(page_addr_set|page);
 184   2      
 185   2              send_mi(col_addr_set);  /* 主窗口设置为0列 */
 186   2      
 187   2              for (i=0; i<62; i++)
 188   2              {
 189   3                  send_md(0x00);
 190   3              }
 191   2      
 192   2              send_si(col_addr_set);  /* 从窗口设置为0列 */
 193   2              for (i=0; i<62; i++)
 194   2              {
 195   3                  send_sd(0x00);
 196   3              }
 197   2          }
 198   1      }
 199          
 200          /****************************************************************************/
 201          /* 函数名:lcd_init                                                         */
 202          /* 功  能:122x32LCD初始化,开机后仅调用一次                                 */
 203          /* 作  者:spot                                                             */
 204          /* 输  入:无                                                               */
 205          /* 输  出:无                                                               */
 206          /*                                                                          */
 207          /* 历史记录:                                                               */
 208          /*  spot          2005-06-28     Creat Inital version. (Version 1.0)        */
 209          /****************************************************************************/
 210          void lcd_init(void)
 211          {
 212   1          send_mi(reset);           /* 复位m-left,s-right */
 213   1          send_si(reset);
 214   1      
 215   1          send_mi(disp_off);        /* 关闭显示 */
 216   1          send_si(disp_off);
 217   1      
 218   1          send_mi(dynamic_driver);
 219   1          send_si(dynamic_driver);
 220   1      
 221   1          send_mi(clk32);
 222   1          send_si(clk32);
 223   1      
 224   1          send_mi(adc_select);      /* clockwise */
 225   1          send_si(adc_select);
 226   1      
 227   1          send_mi(mode_write);
 228   1          send_si(mode_write);

⌨️ 快捷键说明

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