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

📄 1602液晶按键输入显示.lst

📁 51实例大全
💻 LST
字号:
C51 COMPILER V7.06   1602襙____键蔩入_允_                                                  07/13/2010 13:32:02 PAGE 1   


C51 COMPILER V7.06, COMPILATION OF MODULE 1602襙____键蔩入_允_
OBJECT MODULE PLACED IN .\obj\1602液晶按键输入显示.obj
COMPILER INVOKED BY: d:\Keil\C51\BIN\C51.EXE 1602液晶按键输入显示.c BROWSE DEBUG OBJECTEXTEND PRINT(.\obj\1602液晶按键输
                    -入显示.lst) OBJECT(.\obj\1602液晶按键输入显示.obj)

stmt level    source

   1          /*-----------------------------------------------
   2            名称:LCD1602
   3            论坛:www.doflye.net
   4            编写:shifang
   5            日期:2009.5
   6            修改:无
   7            内容:通过矩阵键盘输入,依次显示0-F16中字符
   8            引脚定义如下:1-VSS 2-VDD 3-V0 4-RS 5-R/W 6-E 7-14 DB0-DB7 15-BLA 16-BLK
   9          ------------------------------------------------*/
  10          #include<reg52.h> //包含头文件,一般情况不需要改动,头文件包含特殊功能寄存器的定义
  11          #include<intrins.h>
  12          
  13          sbit RS = P2^4;   //定义端口 
  14          sbit RW = P2^5;
  15          sbit EN = P2^6;
  16          
  17          #define RS_CLR RS=0 
  18          #define RS_SET RS=1
  19          
  20          #define RW_CLR RW=0 
  21          #define RW_SET RW=1 
  22          
  23          #define EN_CLR EN=0
  24          #define EN_SET EN=1
  25          
  26          #define DataPort P0
  27          #define KeyPort P1
  28          
  29          unsigned char code dofly_code[]={'0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F'};//转换成
             -液晶显示的字符
  30          /*------------------------------------------------
  31           uS延时函数,含有输入参数 unsigned char t,无返回值
  32           unsigned char 是定义无符号字符变量,其值的范围是
  33           0~255 这里使用晶振12M,精确延时请使用汇编,大致延时
  34           长度如下 T=tx2+5 uS 
  35          ------------------------------------------------*/
  36          void DelayUs2x(unsigned char t)
  37          {   
  38   1       while(--t);
  39   1      }
  40          /*------------------------------------------------
  41           mS延时函数,含有输入参数 unsigned char t,无返回值
  42           unsigned char 是定义无符号字符变量,其值的范围是
  43           0~255 这里使用晶振12M,精确延时请使用汇编
  44          ------------------------------------------------*/
  45          void DelayMs(unsigned char t)
  46          {
  47   1           
  48   1       while(t--)
  49   1       {
  50   2           //大致延时1mS
  51   2           DelayUs2x(245);
  52   2               DelayUs2x(245);
  53   2       }
C51 COMPILER V7.06   1602襙____键蔩入_允_                                                  07/13/2010 13:32:02 PAGE 2   

  54   1      }
  55          /*------------------------------------------------
  56                        判忙函数
  57          ------------------------------------------------*/
  58           bit LCD_Check_Busy(void) 
  59           { 
  60   1       DataPort= 0xFF; 
  61   1       RS_CLR; 
  62   1       RW_SET; 
  63   1       EN_CLR; 
  64   1       _nop_(); 
  65   1       EN_SET;
  66   1       return (bit)(DataPort & 0x80);
  67   1       }
  68          /*------------------------------------------------
  69                        写入命令函数
  70          ------------------------------------------------*/
  71           void LCD_Write_Com(unsigned char com) 
  72           {  
  73   1       while(LCD_Check_Busy()); //忙则等待
  74   1       RS_CLR; 
  75   1       RW_CLR; 
  76   1       EN_SET; 
  77   1       DataPort= com; 
  78   1       _nop_(); 
  79   1       EN_CLR;
  80   1       }
  81          /*------------------------------------------------
  82                        写入数据函数
  83          ------------------------------------------------*/
  84           void LCD_Write_Data(unsigned char Data) 
  85           { 
  86   1       while(LCD_Check_Busy()); //忙则等待
  87   1       RS_SET; 
  88   1       RW_CLR; 
  89   1       EN_SET; 
  90   1       DataPort= Data; 
  91   1       _nop_();
  92   1       EN_CLR;
  93   1       }
  94          
  95          /*------------------------------------------------
  96                          清屏函数
  97          ------------------------------------------------*/
  98           void LCD_Clear(void) 
  99           { 
 100   1       LCD_Write_Com(0x01); 
 101   1       DelayMs(5);
 102   1       }
 103          /*------------------------------------------------
 104                        写入字符串函数
 105          ------------------------------------------------*/
 106           void LCD_Write_String(unsigned char x,unsigned char y,unsigned char *s) 
 107           {     
 108   1       if (y == 0) 
 109   1              {     
 110   2               LCD_Write_Com(0x80 + x);     
 111   2              }
 112   1       else 
 113   1              {     
 114   2              LCD_Write_Com(0xC0 + x);     
 115   2              }        
C51 COMPILER V7.06   1602襙____键蔩入_允_                                                  07/13/2010 13:32:02 PAGE 3   

 116   1       while (*s) 
 117   1              {     
 118   2       LCD_Write_Data( *s);     
 119   2       s ++;     
 120   2              }
 121   1       }
 122          /*------------------------------------------------
 123                        写入字符函数
 124          ------------------------------------------------*/
 125           void LCD_Write_Char(unsigned char x,unsigned char y,unsigned char Data) 
 126           {     
 127   1       if (y == 0) 
 128   1              {     
 129   2              LCD_Write_Com(0x80 + x);     
 130   2              }    
 131   1       else 
 132   1              {     
 133   2              LCD_Write_Com(0xC0 + x);     
 134   2              }        
 135   1       LCD_Write_Data( Data);  
 136   1       }
 137          /*------------------------------------------------
 138                        初始化函数
 139          ------------------------------------------------*/
 140           void LCD_Init(void) 
 141           {
 142   1         LCD_Write_Com(0x38);    /*显示模式设置*/ 
 143   1         DelayMs(5); 
 144   1         LCD_Write_Com(0x38); 
 145   1         DelayMs(5); 
 146   1         LCD_Write_Com(0x38); 
 147   1         DelayMs(5); 
 148   1         LCD_Write_Com(0x38);  
 149   1         LCD_Write_Com(0x08);    /*显示关闭*/ 
 150   1         LCD_Write_Com(0x01);    /*显示清屏*/ 
 151   1         LCD_Write_Com(0x06);    /*显示光标移动设置*/ 
 152   1         DelayMs(5); 
 153   1         LCD_Write_Com(0x0C);    /*显示开及光标设置*/
 154   1         }
 155           
 156             /*------------------------------------------------
 157          按键扫描函数,返回扫描键值
 158          ------------------------------------------------*/
 159          unsigned char KeyScan(void)  //键盘扫描函数,使用行列反转扫描法
 160          {
 161   1       unsigned char cord_h,cord_l;//行列值中间变量
 162   1       KeyPort=0x0f;            //行线输出全为0
 163   1       cord_h=KeyPort&0x0f;     //读入列线值
 164   1       if(cord_h!=0x0f)    //先检测有无按键按下
 165   1       {
 166   2        DelayMs(10);        //去抖
 167   2        if((KeyPort&0x0f)!=0x0f)
 168   2        {
 169   3          cord_h=KeyPort&0x0f;  //读入列线值
 170   3          KeyPort=cord_h|0xf0;  //输出当前列线值
 171   3          cord_l=KeyPort&0xf0;  //读入行线值
 172   3      
 173   3          while((KeyPort&0xf0)!=0xf0);//等待松开并输出
 174   3      
 175   3          return(cord_h+cord_l);//键盘最后组合码值
 176   3         }
 177   2        }return(0xff);     //返回该值
C51 COMPILER V7.06   1602襙____键蔩入_允_                                                  07/13/2010 13:32:02 PAGE 4   

 178   1      }
 179          /*------------------------------------------------
 180          按键值处理函数,返回扫键值
 181          ------------------------------------------------*/
 182          unsigned char KeyPro(void)
 183          {
 184   1       switch(KeyScan())
 185   1       {
 186   2        case 0x7e:return 0;break;//0 按下相应的键显示相对应的码值
 187   2        case 0x7d:return 1;break;//1
 188   2        case 0x7b:return 2;break;//2
 189   2        case 0x77:return 3;break;//3
 190   2        case 0xbe:return 4;break;//4
 191   2        case 0xbd:return 5;break;//5
 192   2        case 0xbb:return 6;break;//6
 193   2        case 0xb7:return 7;break;//7
 194   2        case 0xde:return 8;break;//8
 195   2        case 0xdd:return 9;break;//9
 196   2        case 0xdb:return 10;break;//a
 197   2        case 0xd7:return 11;break;//b
 198   2        case 0xee:return 12;break;//c
 199   2        case 0xed:return 13;break;//d
 200   2        case 0xeb:return 14;break;//e
 201   2        case 0xe7:return 15;break;//f
 202   2        default:return 0xff;break;
 203   2       }
 204   1      }
 205          
 206          /*------------------------------------------------
 207                              主函数
 208          ------------------------------------------------*/ 
 209          void main(void) 
 210          { 
 211   1      unsigned char i,j,num; 
 212   1      
 213   1      LCD_Init(); 
 214   1      LCD_Write_Com(0x0F);//光标开,光标闪烁开
 215   1      
 216   1      LCD_Write_String(0,0,"Press the key !");
 217   1      
 218   1      while (1) 
 219   1       {  
 220   2       num=KeyPro();
 221   2       if(num!=0xff)
 222   2         {
 223   3          if((i==0)&&(j==0))//回到第一个字符时清屏
 224   3                  LCD_Clear();//清屏
 225   3          LCD_Write_Char(0+i,0+j,dofly_code[num]);//依次显示输入字符
 226   3              i++;
 227   3              if(i==16)//如果第一行显示满,转到第二行
 228   3                {
 229   4                 i=0;j++;
 230   4                 if(j==2)//如果2行都显示满,清屏后重新从第一行显示
 231   4                 {
 232   5                    j=0;
 233   5                        }
 234   4                }
 235   3         }
 236   2       }
 237   1      }
 238          

C51 COMPILER V7.06   1602襙____键蔩入_允_                                                  07/13/2010 13:32:02 PAGE 5   


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