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

📄 ps2key.lst

📁 51单片机下的104个按键功能程序!适用遥控器与多功能控制!
💻 LST
📖 第 1 页 / 共 2 页
字号:
C51 COMPILER V8.02   PS2KEY                                                                08/01/2008 02:32:02 PAGE 1   


C51 COMPILER V8.02, COMPILATION OF MODULE PS2KEY
OBJECT MODULE PLACED IN PS2Key.OBJ
COMPILER INVOKED BY: D:\安装程序\UV3\C51\BIN\C51.EXE PS2Key.c BROWSE DEBUG OBJECTEXTEND

line level    source

   1          /*============================================================
   2                  使用1602液晶显示和PS/2键盘的示例             
   3          ==============================================================
   4          SMC1602A(16*2)模拟口线接线方式
   5          连接线图:       
   6                 ---------------------------------------------------
   7                 |LCM-----51   |  LCM-----51   |  LCM------51      |
   8                 --------------------------------------------------|
   9                 |DB0-----P0.0 |  DB4-----P0.4 |  RW-------P2.1    |
  10                 |DB1-----P0.1 |  DB5-----P0.5 |  RS-------P2.0    |
  11                 |DB2-----P0.2 |  DB6-----P0.6 |  E--------P2.2    |
  12                 |DB3-----P0.3 |  DB7-----P0.7 |  VLCD接1K电阻到GND|
  13                 ---------------------------------------------------
  14          Keyboard接线
  15                PS/2--------51
  16                1 DATA------P3.4
  17                3 GND
  18                4 VCC
  19                5 CLK-------P3.3 接在51的外部中断,触发方式为低电平
  20          =============================================================*/
  21          #include <at89x51.h>
  22          #include "scancodes.h"
  23          #include<intrins.h>
  24          
  25          sbit L1602_RS=P2^0;                  //定义1602得RS控制线
  26          sbit L1602_RW=P2^1;                  //定义1602得RW控制线
  27          sbit L1602_E=P2^2;                   //定义1602的E控制线
  28          #define LCM_Data  P0
  29          #define Key_Data P3_4 //定义Keyboard引脚
  30          #define Key_CLK  P3_3
  31          #define Busy    0x80            //用于检测LCM状态字中的Busy标识
  32          #define uchar unsigned char
  33          #define L1602_DB0_DB7 P0             //定义1602的数据总线
  34          void Delay5Ms(void);
  35          void Delay400Ms(void);
  36          void Decode(unsigned char ScanCode);
  37          uchar code Welcome[]={"welcome,you"};
  38          uchar code Welcome1[]={"licansong"};
  39          unsigned char code Cls[] = {"                "};
  40          static unsigned char IntNum = 0; //中断次数计数
  41          static unsigned char KeyV;      //键值
  42          static unsigned char DisNum = 0; //显示用指针
  43          static unsigned char Key_UP=0, Shift = 0;//Key_UP是键松开标识,Shift是Shift键按下标识
  44          static unsigned char BF = 0;    //标识是否有字符被收到
  45          typedef bit BOOL ; 
  46          uchar Key_code;
  47          
  48          /**********************************************************************************************
  49          函数名称:延时函数
  50          函数功能:转换延时和显示延时
  51          说明:LCM1602_Delay()是液晶显示延时,delay()是温度转换延时
  52          **********************************************************************************************/
  53          void delay(unsigned int delay_time) // 延时程序
  54          {
  55   1       while(delay_time--);
C51 COMPILER V8.02   PS2KEY                                                                08/01/2008 02:32:02 PAGE 2   

  56   1      }
  57          
  58          void LCM1602_Delay(uchar count)
  59          {
  60   1              uchar i;
  61   1              while(--count!=0)
  62   1                 {for(i=0;i<250;i++);}
  63   1                      
  64   1      }
  65                                                          /*
  66          //5ms延时       
  67          void Delay5Ms(void)
  68          {
  69                  unsigned int TempCyc = 5552;
  70                  while(TempCyc--);
  71          }                                                                */
  72          
  73          //400ms延时
  74          void Delay400Ms(void)
  75          {
  76   1              unsigned char TempCycA = 5;
  77   1              unsigned int TempCycB;
  78   1              while(TempCycA--)
  79   1                      {
  80   2                              TempCycB=7269;
  81   2                              while(TempCycB--);
  82   2                      };
  83   1      }
  84          
  85          
  86          /**********************************************************************************************
  87          函数名称:初始化函数
  88          函数功能:液晶1602初始化
  89          说明:
  90          **********************************************************************************************/
  91          void  LCM1602_Init(void)
  92          {
  93   1       void LCM1602_WriteData(uchar LCM1602_data);
  94   1       void LCM1602_WriteCMD(uchar LCM1602_command);
  95   1       LCM1602_WriteCMD(0x38);    //显示两行,每个字符为5*7个像素
  96   1       delay(1);
  97   1       LCM1602_WriteCMD(0x06);    //光标移动设置,光标右移
  98   1       delay(1);
  99   1       LCM1602_WriteCMD(0x0c);    //现设开,光标开,闪烁开
 100   1       delay(1);
 101   1       LCM1602_WriteCMD(0x01);    //清屏
 102   1       delay(1);
 103   1      }
 104          
 105          /**********************************************************************************************
 106          函数名称:写入函数
 107          函数功能:在规定位置写入字符或字符串
 108          说明:
 109          **********************************************************************************************/
 110          void  print(uchar a,uchar *str)
 111          {
 112   1       void  LCM1602_WriteData(uchar LCM1602_data);
 113   1       void  LCM1602_WriteCMD(uchar LCM1602_command);
 114   1       LCM1602_WriteCMD(a);
 115   1       while(*str!='\0')
 116   1          {
 117   2          LCM1602_WriteData(*str++);
C51 COMPILER V8.02   PS2KEY                                                                08/01/2008 02:32:02 PAGE 3   

 118   2              }
 119   1       *str=0;
 120   1      }
 121          
 122          void print1(uchar a,uchar t)
 123          {
 124   1       LCM1602_WriteCMD(a);
 125   1       LCM1602_WriteData(t);
 126   1      }
 127          
 128          
 129          
 130          /**********************************************************************************************
 131          函数名称:写命令和写数据函数
 132          函数功能:向LCD写命令和数据
 133          说明:LCM1602_WriteCMD是写命令函数,void LCM1602_WriteData是写数据函数
 134          **********************************************************************************************/
 135          void LCM1602_WriteCMD(uchar LCM1602_command)     //写命令
 136          {
 137   1      BOOL lcd_bz();
 138   1      while(lcd_bz());        //测忙
 139   1      L1602_RS=0;
 140   1      L1602_RW=0;
 141   1      L1602_E=0;
 142   1      _nop_();
 143   1      _nop_();
 144   1      L1602_DB0_DB7=LCM1602_command;
 145   1      _nop_();
 146   1      _nop_();_nop_();
 147   1      L1602_E=1;    //命令总送出
 148   1      _nop_();_nop_();_nop_();
 149   1      L1602_E=0; 
 150   1      }
 151                             
 152          void LCM1602_WriteData(uchar LCM1602_data)         //写数据
 153          {
 154   1      BOOL lcd_bz();
 155   1      while(lcd_bz());        //测忙
 156   1      L1602_RS=1;
 157   1      L1602_RW=0;
 158   1      L1602_E=0;
 159   1      L1602_DB0_DB7=LCM1602_data;
 160   1      _nop_();
 161   1      _nop_();
 162   1      _nop_();
 163   1      _nop_();

⌨️ 快捷键说明

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