📄 test024.lst
字号:
C51 COMPILER V7.50 TEST024 01/21/2007 14:19:15 PAGE 1
C51 COMPILER V7.50, COMPILATION OF MODULE TEST024
OBJECT MODULE PLACED IN test024.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE test024.c BROWSE DEBUG OBJECTEXTEND
line level source
1 /********************************************************************************************
2 * 文 件 名:test024.c
3 * 功 能:4*4行列式键盘驱动。
4 * 硬件条件:1.CPU型号:AT89S52
5 * 2.晶振:12.000MHz
6 * 3.用跳线帽短接BEEP_P1.3
7 * 4.用杜绑线将4*4行列式键盘模块与开发板的P2口相连,连接关系如下:
8 * ==============================================================
9 * ARMSKY-51Easy教学实验开发板 4*4行列式键盘模块
10 *
11 * P2.7 row1
12 * P2.6 row2
13 * P2.5 row3
14 * P2.4 row4
15 * P2.3 col1
16 * P2.2 col2
17 * P2.1 col3
18 * P2.0 col4
19 * +5V VCC
20 * GND GND
21 * ==============================================================
22 * 注意:用户可根据自己的情况,选择ARMSKY-51Easy教学实验开发板上
23 * 的其他引脚与4*4行列式键盘模块相连。
24 *
25 * 作 者:POWER
26 * 日 期:2006年12月12号
27 * 斯凯科技主页:www.armsky.net
28 * 斯凯科技论坛:www.armsky.net/bbs
29 *********************************************************************************************/
30 #include "reg52.h" // 包含头文件
31
32 /* 与编译器无关的数据类型定义 */
33 /********************************************************************************************/
34 typedef unsigned char uint8; // 无符号8位整型变量
35 typedef signed char int8; // 有符号8位整型变量
36 typedef unsigned short uint16; // 无符号16位整型变量
37 typedef signed short int16; // 有符号16位整型变量
38 typedef unsigned int uint32; // 无符号32位整型变量
39 typedef signed int int32; // 有符号32位整型变量
40 typedef float fp32; // 单精度浮点数(32位长度)
41 typedef double fp64; // 双精度浮点数(64位长度)
42 /********************************************************************************************/
43
44 /* 定义位变量 */
45 sbit P1_3 = P1 ^ 3;
46 sbit row1 = P2 ^ 7;
47 sbit row2 = P2 ^ 6;
48 sbit row3 = P2 ^ 5;
49 sbit row4 = P2 ^ 4;
50 sbit col1 = P2 ^ 3;
51 sbit col2 = P2 ^ 2;
52 sbit col3 = P2 ^ 1;
53 sbit col4 = P2 ^ 0;
54
55 #define BEEP_ON() (P1_3=0) // 定义"BEEP_ON()"为P1.3输出低电平,控制蜂鸣器蜂鸣
C51 COMPILER V7.50 TEST024 01/21/2007 14:19:15 PAGE 2
56 #define BEEP_OFF() (P1_3=1) // 定义"BEEP_OFF()"为P1.3输出高电平,控制蜂鸣器不蜂鸣
57
58
59 /********************************************************************************************
60 * 函数名称:Delay()
61 * 功 能:软件延时
62 * 入口参数:count 延时参数,值越大,延时越长
63 * 出口参数:无
64 *********************************************************************************************/
65 void Delay(uint16 count)
66 {
67 1 uint8 i;
68 1
69 1 while(--count != 0)
70 1 {
71 2 for(i = 0; i < 125; i++); // ";" 表示空语句,CPU空转。
72 2 } // i 从0加到125,在12M晶体下CPU大概耗时1毫秒
73 1 }
74
75
76 /********************************************************************************************
77 * 函数名称:BeepCount()
78 * 功 能:蜂鸣器按指定次数缝鸣
79 * 入口参数:count
80 * 出口参数:无
81 *********************************************************************************************/
82 void BeepCount(uint8 count)
83 {
84 1 for(;count>0;count--)
85 1 {
86 2 BEEP_ON(); Delay(120);
87 2 BEEP_OFF();Delay(120);
88 2 }
89 1 }
90
91
92 /********************************************************************************************
93 * 函数名称:KeyDown()
94 * 功 能:检测键盘是否按下
95 * 入口参数:无
96 * 出口参数:返回1表示键盘按下,返回0表示键盘未按下
97 * 注 意:该函数有消抖功能
98 *********************************************************************************************/
99 uint8 KeyDown(void)
100 {
101 1 col1=0; col2=0; col3=0; col4=0; // 列线全部置低
102 1
103 1 if((row1==0) || (row2==0) || (row3==0) || (row4==0)) // 若有任一行线读回状态为低
104 1 {
105 2 Delay(80); // 延时消抖
106 2 if((row1==0) || (row2==0) || (row3==0) || (row4==0)) // 再次读行线状态,若有任一行线读回状态为低
107 2 return 1; // 返回1,表明有键盘按下
108 2 else
109 2 return 0; // 返回0,表明无键盘按下
110 2 }
111 1 else
112 1 return 0;
113 1 }
114
115 /********************************************************************************************
116 * 函数名称:KeyUp()
117 * 功 能:检测键盘是否弹起
C51 COMPILER V7.50 TEST024 01/21/2007 14:19:15 PAGE 3
118 * 入口参数:无
119 * 出口参数:返回1表示键盘弹起,返回0表示键盘未弹起
120 * 注 意:该函数有消抖功能
121 *********************************************************************************************/
122 uint8 KeyUp(void)
123 {
124 1 col1=0; col2=0; col3=0; col4=0; // 列线全部置低
125 1
126 1 if((row1==1) && (row2==1) && (row3==1) && (row4==1)) // 若全部行线读回状态都为高
127 1 {
128 2 Delay(80); // 延时消抖
129 2 if((row1==1) && (row2==1) && (row3==1) && (row4==1)) // 再次读行线状态,若全部行线读回状态都为高
130 2 return 1; // 返回1,表明所有键盘都处于弹起状态
131 2 else
132 2 return 0; // 返回0,表明有键盘处于按下状态
133 2 }
134 1 else
135 1 return 0;
136 1 }
137
138 /********************************************************************************************
139 * 函数名称:KeyNum()
140 * 功 能:检测用户按下的键盘所对应的键盘号
141 * 入口参数:无
142 * 出口参数:返回0表示没有键盘被按动,返回1~16对应被按动的键盘
143 * 说 明:用户可根据自己的键盘编号修改该函数。
144 *********************************************************************************************/
145 uint8 KeyNum(void)
146 {
147 1
148 1 uint8 KeyTemp;
149 1
150 1 KeyTemp=0;
151 1
152 1 if(KeyDown()==1) // 若键盘被按下
153 1 {
154 2 col1=0; col2=1; col3=1; col4=1; // 将列线1置低,其他列线置高
155 2
156 2 if (row1==0) KeyTemp=1; // 若行线1读回状态为低,则表明按键1被按下
157 2 if (row2==0) KeyTemp=5; // 若行线2读回状态为低,则表明按键5被按下
158 2 if (row3==0) KeyTemp=9; // 若行线3读回状态为低,则表明按键9被按下
159 2 if (row4==0) KeyTemp=13; // 若行线4读回状态为低,则表明按键13被按下
160 2
161 2 col1=1; col2=0; col3=1; col4=1; // 将列线2置低,其他列线置高
162 2
163 2 if (row1==0) KeyTemp=2; // 若行线1读回状态为低,则表明按键2被按下
164 2 if (row2==0) KeyTemp=6; // 若行线2读回状态为低,则表明按键6被按下
165 2 if (row3==0) KeyTemp=10; // 若行线3读回状态为低,则表明按键10被按下
166 2 if (row4==0) KeyTemp=14; // 若行线4读回状态为低,则表明按键14被按下
167 2
168 2 col1=1; col2=1; col3=0; col4=1;
169 2
170 2 if (row1==0) KeyTemp=3;
171 2 if (row2==0) KeyTemp=7;
172 2 if (row3==0) KeyTemp=11;
173 2 if (row4==0) KeyTemp=15;
174 2
175 2 col1=1; col2=1; col3=1; col4=0;
176 2
177 2 if (row1==0) KeyTemp=4;
178 2 if (row2==0) KeyTemp=8;
179 2 if (row3==0) KeyTemp=12;
C51 COMPILER V7.50 TEST024 01/21/2007 14:19:15 PAGE 4
180 2 if (row4==0) KeyTemp=16;
181 2
182 2 while ( KeyUp()!=1); // 等待按下的键盘被释放
183 2
184 2 return KeyTemp; // 返回被按下并被释放的键盘的编号
185 2
186 2 }
187 1 else
188 1 return 0;
189 1 }
190
191
192
193 /********************************************************************************************
194 * 函数名称:main()
195 * 功 能:4*4行列式键盘驱动。当发现用户按下并释放键盘,则检测出相应键盘号,并控制蜂鸣器蜂鸣
196 * 相应次数。
197 *********************************************************************************************/
198 void main (void)
199 {
200 1
201 1 BEEP_OFF(); // 蜂鸣器不蜂鸣
202 1
203 1 while(1) // 死循环
204 1 {
205 2 BeepCount(KeyNum());
206 2 }
207 1 }
208
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 290 ----
CONSTANT SIZE = ---- ----
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 + -