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

📄 12232.lst

📁 12232的一个显示汉字的C语言程序
💻 LST
字号:
C51 COMPILER V6.12  12232                                                                  10/04/2008 14:05:23 PAGE 1   


C51 COMPILER V6.12, COMPILATION OF MODULE 12232
OBJECT MODULE PLACED IN .\12232.OBJ
COMPILER INVOKED BY: D:\KeilC51v612\C51\BIN\C51.EXE .\12232.C BROWSE DEBUG OBJECTEXTEND

stmt level    source

   1          /*-----------------------------------------------------------------*/
   2          /*LCD12232液晶显示驱动实验.                                        */
   3          /*E1:主驱动器使能信号,写操作时低电平有效,读操作时高电平有效,负电压.*/
   4          /*E2:从驱动器使能信号,写操作时低电平有效,读操作时高电平有效.       */
   5          /*RW:读写选择信号,低电平时写,高电平时读.                           */
   6          /*A0:寄存器选择信号.                                               */     
   7          /*各个引脚对应的接线关系如下所示:                                  */                                  
   8          /*          |DB0-----P1.0 | DB4-----P1.4 | E1-------P2.0 |         */
   9          /*          |DB1-----P1.1 | DB5-----P1.5 | E2-------P2.1 |         */
  10          /*          |DB2-----P1.2 | DB6-----P1.6 | RW-------P2.2 |         */
  11          /*          |DB3-----P1.3 | DB7-----P1.7 | A0-------P2.3 |         */  
  12          /*-----------------------------------------------------------------*/
  13          
  14          #include<STC89C51.H>
  15          #include <stdlib.h>
  16          #include <intrins.h>
  17          #include <string.h>
  18          
  19          sbit  E1=P2^0;  /* 定义P2.0端口为E1 */
  20          sbit  E2=P2^1;  /* 定义P2.1端口为E2 */
  21          sbit  RW=P2^2;  /* 定义P2.2端口为RW */
  22          sbit  A0=P2^3;  /* 定义P2.3端口为RS */
  23          
  24          void delay(char k);  /* 延时子程序 */
  25          void lcdinitial(void);  /* 初始化子程序 */
  26          void clrram(void);  /* 复位子程序 */
  27          void writeMI(unsigned char i);  /* 主驱动器发指令 */
  28          void writeSI(unsigned char i);  /* 从驱动器发指令 */
  29          void writeMD(unsigned char i);  /* 主驱动器发数据 */
  30          void writeSD(unsigned char i);  /* 从驱动器发数据 */
  31          void SetPage(unsigned char page1,page2);  /* 设置页地址 */
  32          void display(unsigned char word,unsigned char layer,unsigned char width,unsigned char code *array);
  33          unsigned char code arrayadress1[];  /* 定义数组arrayadress1 */
  34          unsigned char code arrayadress2[];  /* 定义数组arrayadress2 */
  35          unsigned char code arrayadress3[];  /* 定义数组arrayadress3 */
  36          unsigned char code arrayadress4[];  /* 定义数组arrayadress4 */
  37          
  38          /*-----------------主函数-----------------*/
  39          void main(void)
  40          {
  41   1       delay(10);  /* 延时子程序 */
  42   1       lcdinitial();  /* 初始化子程序 */ 
  43   1       delay(10);  /* 延时子程序 */
  44   1       while(1)
  45   1         {
  46   2          delay(400);  /* 延时子程序 */
  47   2          clrram();  /* 复位子程序(清屏子程序) */
  48   2          display(6,0,12,arrayadress1);
  49   2          //display(6,1,96,arrayadress1+16);              
  50   2          //display(5,2,80,arrayadress2);
  51   2          //display(5,3,80,arrayadress2+16);
  52   2          //delay(400);  /* 延时子程序 */
  53   2          //clrram();  /* 复位子程序(清屏子程序) */
  54   2          //display(6,0,96,arrayadress3);
  55   2          //display(6,1,96,arrayadress3+16);
C51 COMPILER V6.12  12232                                                                  10/04/2008 14:05:23 PAGE 2   

  56   2          //display(5,2,114,arrayadress4);
  57   2          //display(5,3,114,arrayadress4+16);
  58   2          //delay(400);  /* 延时子程序 */
  59   2         }
  60   1      }
  61          
  62          /* 初始化子程序 */
  63          void lcdinitial(void)			
  64          {
  65   1       writeMI(0xE2);
  66   1       writeSI(0xE2);  /* 复位指令 */
  67   1       /****************************/
  68   1       writeMI(0xAE);
  69   1       writeSI(0xAE);  /* 关闭显示工作状态 */
  70   1       /****************************/
  71   1       writeMI(0xA4);
  72   1       writeSI(0xA4);  /* 关闭休闲工作状态 */ /* 此指令要在设置显示开关指令以后才能使用 */
  73   1       /****************************/
  74   1       writeMI(0xA9);
  75   1       writeSI(0xA9);  /* 占空比1/32时为0xA9,占空比1/16时为0xA8 */ 
  76   1       /****************************/
  77   1       writeMI(0xA0);
  78   1       writeSI(0xA0);  /* 正向排序设置 */
  79   1       /****************************/
  80   1       writeMI(0xEE);
  81   1       writeSI(0xEE);  /* 结束指令改写方式 */
  82   1       /****************************/
  83   1       writeMI(0x00);
  84   1       writeMI(0xC0);  /* 设置主控制器显示起始行为第一行 */
  85   1       writeSI(0x00);
  86   1       writeSI(0xC0);  /* 设置从控制器显示起始行为第一行 */
  87   1       /****************************/
  88   1       writeMI(0xAF);
  89   1       writeSI(0xAF);  /* 开启显示工作状态 */               
  90   1      }
  91          /*******************以下函数是对内部函数进行的写指令的控制*******************/
  92          /* 主驱动器发指令函数writMI(unsigned char i)是内部函数,从i发指令 */
  93          void writeMI(unsigned char i)
  94          {
  95   1       do 
  96   1        {
  97   2         E1=0;
  98   2         E2=0; 
  99   2         A0=0;
 100   2         RW=1;
 101   2         E1=1;
 102   2         _nop_();
 103   2        }   /* 判断主控制器忙 */
 104   1       while(P1&0x80);  /* 当P1端口为0x80时表示处于忙状态,此时不能进行其他操作 */
 105   1       E1=0;
 106   1       RW=0;
 107   1       A0=0;
 108   1       E1=1;
 109   1       _nop_();
 110   1       P1=i;
 111   1       _nop_();
 112   1       E1=0;/* 低电平时发指令 */
 113   1      } 
 114          
 115          /* 从驱动器发指令函数writSI(unsigned char i)是内部函数,从i发指令 */
 116          void writeSI(unsigned char i)
 117          {
C51 COMPILER V6.12  12232                                                                  10/04/2008 14:05:23 PAGE 3   

 118   1       do
 119   1        {
 120   2         E1=0;
 121   2         E2=0;
 122   2         A0=0;
 123   2         RW=1; 
 124   2         E2=1;
 125   2         _nop_();             
 126   2        }   /* 判断从控制器忙 */
 127   1       while(P1&0x80);  /* 当P1端口为0x80时表示处于忙状态,此时不能进行其他操作 */                  
 128   1       E2=0;
 129   1       RW=0; 
 130   1       A0=0; 
 131   1       E2=1;
 132   1       _nop_();
 133   1       P1=i; 
 134   1       _nop_();
 135   1       E2=0;  /* 低电平时发指令 */
 136   1      }
 137          /****************************************************************************/
 138          
 139          /* 复位子程序(清屏子程序) */
 140          void clrram(void)                       
 141          {
 142   1       unsigned char  line;
 143   1       unsigned char  page;
 144   1       for(page=0;page<4;page++)  /* 页面选择,page为0时为第0页,page为1时为第1页,page为2时为第2页,page为3时为第3

⌨️ 快捷键说明

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