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

📄 display.lst

📁 PS/2键盘解码完全有单片机程序实现
💻 LST
字号:
C51 COMPILER V7.06   DISPLAY                                                               11/17/2006 17:20:50 PAGE 1   


C51 COMPILER V7.06, COMPILATION OF MODULE DISPLAY
OBJECT MODULE PLACED IN display.OBJ
COMPILER INVOKED BY: E:\Program Files\C51\BIN\C51.EXE display.c BROWSE DEBUG OBJECTEXTEND

stmt level    source

   1          /*****************************************************************/ 
   2          /*                                                               */                                       
             -                         
   3          /*名称:           PS/2解码+LCD12864显示程序                     */                                       
             -                                                                                                                        
             -            
   4          /*功能:       1  解码键盘的串行数据,译出当前按键值             */
   5          /*             2  在LCD12864上显示PS/2键盘上可显示的字符         */
   6          /*             3  实现LCD12864的换行显示,退格等功能             */                                       
             -            
   7          /*难度等级:                   高                                */                                       
             -                              
   8          /* 作者:                  zengrenliang                          */
   9          /* 版权:           http://www.51kaifa.com                       */
  10          /*编写日期:        2006.05.20                                   */                                       
             -                                                                                                                        
             -                                              
  11          /*****************************************************************/
  12          
  13          #include <reg52.h>
  14          #include  <string.h>
  15          #include "tcode.h" //PS/2通码表
  16          #define uchar unsigned char
  17          
  18          /**********引脚定义*********/
  19          sbit lck = P3^5;
  20          sbit Key_CLK = P3^2; //PS/2键盘数时钟线
  21          sbit Key_Data= P1^4; //PS/2键盘数据线
  22          
  23          
  24          /********常用命令及参数定义********/
  25          #define DISPON     0x3f
  26          #define DISPOFF    0x3e
  27          #define DISPFIRST  0xc0
  28          #define SETX       0x40
  29          #define SETY       0xb8
  30          #define LCDBUZY    0x80
  31          #define L          0x00
  32          #define R          0x40
  33          #define LIMIT      0x80
  34          
  35          /**********全局变量************/
  36          bit xy,simple,BF;
  37          uchar cbyte, statu;
  38          uchar IntNum=0; 
  39          uchar KeyV=0,uGetvalue=0; 
  40          static unsigned char Key_UP=0, Shift = 0;
  41          static unsigned char DisNum = 0; //显示用指针
  42          
  43          
  44          /**************函数******************/
  45          void delay3s(void);
  46          void WrL(uchar x);
  47          void WrR(uchar x);
  48          void Lcmcls(void);
C51 COMPILER V7.06   DISPLAY                                                               11/17/2006 17:20:50 PAGE 2   

  49          void wtcom(void);
  50          void Lcminit (void);
  51          void Putpicture(void);
  52          void VtoH8x16change(uchar *hzbuf);
  53          void Puthalf(uchar *strch,uchar row,uchar col);
  54          void Wrdata(uchar x,uchar row,uchar col);
  55          void Locatexy(uchar row,uchar col);
  56          void vWrite8x16Character(uchar *ch,uchar row,uchar col,bit flag);
  57          void vWrite8x16String(uchar  *str,uchar col, uchar row, bit flag);
  58          void Decode(unsigned char ScanCode);
  59          
  60          
  61          extern unsigned char  code  help[];
  62          extern unsigned char  code  char_Table[95][16];
  63          
  64          
  65          /***********主程序***************/
  66          void main(void)
  67          {   
  68   1          P2 = 0xff;
  69   1          EX0 = 1; //允许PS/2中断
  70   1          IT0 = 0; //低电平有效
  71   1          EA = 1;  //开中断
  72   1          Lcminit(); //初始化LCD
  73   1          Putpicture();
  74   1          delay3s();
  75   1          while(!BF);
  76   1          Lcmcls();
  77   1            do
  78   1                      {
  79   2                              if (BF)
  80   2                                      Decode(KeyV);//解码
  81   2                              else
  82   2                                      EA = 1; //开中断
  83   2                      }
  84   1              while(1);
  85   1      }
  86          
  87          
  88          
  89          /***************微秒级延时*****************/
  90          void delay(unsigned int  time)
  91          { unsigned int i;
  92   1          for(i=0;i<time;i++);
  93   1       }
  94          
  95          
  96          /***************约3S延时********************/
  97          void delay3s(void)
  98          {
  99   1          delay(50000);
 100   1          delay(50000);
 101   1          delay(50000);
 102   1          delay(50000);
 103   1          delay(50000);
 104   1          delay(50000);
 105   1      }
 106          
 107          //***********初始化LCD*******************/
 108          
 109          void Lcminit (void)
 110          { 
C51 COMPILER V7.06   DISPLAY                                                               11/17/2006 17:20:50 PAGE 3   

 111   1          cbyte=DISPOFF;
 112   1          WrL(cbyte);
 113   1          WrR(cbyte);
 114   1          cbyte=DISPON;
 115   1          WrL(cbyte);
 116   1          WrR(cbyte);
 117   1          cbyte=DISPFIRST;
 118   1          WrL(cbyte);
 119   1          WrR(cbyte);
 120   1          Lcmcls();
 121   1          Locatexy(0,0);
 122   1      }
 123          
 124          
 125          /***************LCD清屏********************/
 126          void Lcmcls(void)
 127          { uchar  i,j;
 128   1          for(i=0;i<8;i++){
 129   2            delay(6);
 130   2              for(j=0;j<LIMIT;j++){
 131   3                delay(6);
 132   3                Wrdata(0x0,i,j);
 133   3               }
 134   2           }
 135   1      }
 136          
 137          /**************写左区***************/
 138          
 139          void WrL(uchar x)
 140          {
 141   1         
 142   1         P0=0xFF;//P0口送FF,准备读
 143   1         lck = 0;
 144   1         P1 = 0x2a;//ELCD=1

⌨️ 快捷键说明

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