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

📄 1602_display.lst

📁 LCD1602的驱动程序
💻 LST
字号:
C51 COMPILER V8.02   1602_DISPLAY                                                          01/20/2009 21:12:52 PAGE 1   


C51 COMPILER V8.02, COMPILATION OF MODULE 1602_DISPLAY
OBJECT MODULE PLACED IN 1602_display.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE 1602_display.c BROWSE DEBUG OBJECTEXTEND

line level    source

   1          #include <reg52.h>
   2          
   3          #define uchar unsigned char
   4          #define uint unsigned int
   5          
   6          sbit LCDRS = P3^3;
   7          sbit LCDRW = P3^4;
   8          sbit LCDEN = P3^5;
   9          
  10          uchar code NumTable[]="0123456789";
  11          
  12          /*
  13          void snop()
  14          {
  15              ;;
  16          }
  17          */
  18          void delay(uint time)
  19          {
  20   1          uchar i,j;
  21   1          for(i=time;i>0;i--)
  22   1              for(j=110;j>0;j--);
  23   1      }
  24          
  25          void write_com(uchar com) //写命令
  26          {
  27   1          LCDRS = 0;
  28   1          LCDRW = 0;
  29   1          LCDEN = 0;
  30   1          P1 = com;
  31   1          LCDEN = 1;
  32   1          delay(5);
  33   1          LCDEN = 0;
  34   1      }
  35          
  36          void write_data(uchar dat) //写数据
  37          {
  38   1          LCDRS = 1;
  39   1          LCDRW = 0;
  40   1          LCDEN = 0;
  41   1          P1 = dat;
  42   1          LCDEN = 1;
  43   1          delay(5);
  44   1          LCDEN = 0;
  45   1      }
  46          
  47          //以下内容未用,进行屏蔽
  48          /*
  49          void read_com() //读状态
  50          {
  51              LCDRS = 0;
  52              LCDRW = 1;
  53              LCDEN = 1;
  54              snop();
  55              LCDEN = 0;
C51 COMPILER V8.02   1602_DISPLAY                                                          01/20/2009 21:12:52 PAGE 2   

  56          }
  57          
  58          void read_data() //读数据
  59          {
  60              LCDRS = 1;
  61              LCDRW = 1;
  62              LCDEN = 1;
  63              snop();
  64              LCDEN = 0;
  65          }
  66          */
  67          
  68          //以下对读写函数进行测试
  69          
  70          void init()
  71          {
  72   1          //初始化P2口,准备接收矩阵键盘输入
  73   1          P2 = 0xff;
  74   1      
  75   1          //初始化LCD
  76   1          /*
  77   1          delay(15);      //延时15毫秒
  78   1          write_com(0x38);//初始化:设置16X2显示,5X7点阵,8位数据接口
  79   1          delay(5);       //延时5毫秒
  80   1          write_com(0x38);//初始化:设置16X2显示,5X7点阵,8位数据接口
  81   1          delay(5);       //延时5毫秒
  82   1          write_com(0x38);//初始化:设置16X2显示,5X7点阵,8位数据接口
  83   1          delay(5);       //延时5毫秒
  84   1          write_com(0x0f);//开显示,开光标,光标闪烁
  85   1          delay(5);
  86   1          write_com(0x07);//读写后地址指针和光标均加一,整屏显示左移
  87   1          delay(5);
  88   1          write_com(0x80);//数据指针初始化
  89   1          */
  90   1          
  91   1              write_com(0x38);
  92   1              write_com(0x0f);
  93   1              write_com(0x06);
  94   1              write_com(0x01);
  95   1              write_com(0x80);
  96   1      }
  97          
  98          uchar key_scan()
  99          {
 100   1          uchar temp,hor,row;
 101   1          
 102   1          P2 = 0xf0;
 103   1          temp = P2;
 104   1          temp &= 0xf0;
 105   1          if(temp != 0xf0)//扫描到按键动作
 106   1          {
 107   2              delay(5);
 108   2              
 109   2              //开始进行列检查
 110   2              P2 = 0xf0;
 111   2              temp = P2;
 112   2              temp &= 0xf0;
 113   2              if(temp != 0xf0)//确认有按键动作
 114   2              {
 115   3                  temp = ~temp;
 116   3                  temp >>= 4; //列值在temp的低四位
 117   3                  switch(temp)//列值转换,并保存在row中
C51 COMPILER V8.02   1602_DISPLAY                                                          01/20/2009 21:12:52 PAGE 3   

 118   3                  {
 119   4                      case 1 : row = 1; break;
 120   4                      case 2 : row = 2; break;
 121   4                      case 4 : row = 3; break;
 122   4                      case 8 : row = 4; break;
 123   4                      default: break;
 124   4                  }
 125   3                  //列检查结束
 126   3      
 127   3                  //开始进行行检查
 128   3                  P2 = 0x0f;
 129   3                  temp = P2;
 130   3                  temp = ~temp;
 131   3                  temp &= 0x0f;//行值在temp的低四位
 132   3                  switch(temp)//行值转换,并保存在hor中
 133   3                  {
 134   4                      case 1 : hor = 1; break;
 135   4                      case 2 : hor = 2; break;
 136   4                      case 4 : hor = 3; break;
 137   4                      case 8 : hor = 4; break;
 138   4                      default: break;
 139   4                  }
 140   3                  //行检查结束
 141   3      
 142   3                  //检查按键动作是否结束,否则程序在此等待
 143   3                  P2 = 0xf0;
 144   3                  temp = P2;
 145   3                  temp &= 0xf0;
 146   3                  while(temp != 0xf0)
 147   3                  {
 148   4                      P2 = 0xf0;
 149   4                      temp = P2;
 150   4                      temp &= 0xf0;
 151   4                  }
 152   3                  //按键动作结束,程序往下进行
 153   3                  
 154   3                  //计算键值并返回
 155   3                  return ((hor-1)*4 + row);
 156   3      
 157   3              }
 158   2          }
 159   1          //没有按键动作,返回0;
 160   1          return 0;   
 161   1      }
 162          
 163          void main()
 164          {
 165   1          uchar key,char_seat,shi,ge;
 166   1          init();
 167   1          while(1)
 168   1          {
 169   2              key = key_scan();
 170   2              if(key != 0)
 171   2              {
 172   3                  shi = key/10;
 173   3                  ge = key%10;
 174   3                  if(char_seat==16) //第一行显示满格,进入第二行显示
 175   3                  {
 176   4                      write_com(0x80+0x40);                
 177   4                  }
 178   3                  if(char_seat==32) //第二行显示满格,进行清屏,从第一行开始显示
 179   3                  {
C51 COMPILER V8.02   1602_DISPLAY                                                          01/20/2009 21:12:52 PAGE 4   

 180   4                      char_seat=0;
 181   4                      write_com(0x01);
 182   4                      write_com(0x80);
 183   4                  }
 184   3                  if(shi!=0)
 185   3                  {
 186   4                      write_data(NumTable[shi]);
 187   4                      char_seat++;
 188   4                  }            
 189   3                  write_data(NumTable[ge]);
 190   3                  char_seat++;
 191   3                  
 192   3      
 193   3                  
 194   3              }
 195   2          }
 196   1      }
 197          //测试结束


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =    275    ----
   CONSTANT SIZE    =     11    ----
   XDATA SIZE       =   ----    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =   ----    ----
   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 + -