📄 ps2key.lst
字号:
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 + -