📄 keycheck.lst
字号:
C51 COMPILER V7.20 KEYCHECK 03/23/2007 23:36:36 PAGE 1
C51 COMPILER V7.20, COMPILATION OF MODULE KEYCHECK
OBJECT MODULE PLACED IN KEYCHECK.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE KEYCHECK.C BROWSE DEBUG OBJECTEXTEND
line level source
1 /*****************************************************************************
2 MCU8051学习板演示程序
3
4 (c) Copyright 2007-2007,广州恒芯电子
5 All Rights Reserved
6 *****************************************************************************/
7
8 /*****************************************************************************
9 程序说明
10 名称: MCU8051学习板演示程序(键盘检测)
11 功能: 实现键盘检测并在七段数码管里显示
12 版本:2007-03-01
13 *****************************************************************************/
14
15 /*****************************************************************************
16 硬件说明
17 单片机: 兼容MCS-51单片机/STC89C51
18 晶振频率: 12MHz
19 *****************************************************************************/
20
21 #include "regx52.h"
22
23 /****************************************************************************
24 说明: 程序预定义
25 *****************************************************************************/
26 #define LED7A_CTRL P1_0/*数码管第一位控制引脚(0为有效,1为无效)*/
27 #define LED7B_CTRL P1_1/*数码管第二位控制引脚(0为有效,1为无效)*/
28 #define LED7C_CTRL P1_2/*数码管第三位控制引脚(0为有效,1为无效)*/
29 #define LED7D_CTRL P1_3/*数码管第四位控制引脚(0为有效,1为无效)*/
30
31 #define LED7_STATUS P0/*数码管状态引脚(0为有效,1为无效)*/
32 #define KEY_STATUS P2/*键盘引脚*/
33
34 /****************************************************************************
35 说明: 变量定义
36 *****************************************************************************/
37 code unsigned char m_ucLedTab[]=
38 {
39 0xc0, 0xf9, 0xa4, 0xb0, 0x99, 0x92, 0x82, 0xf8, 0x80, 0x90,
40 0x88, 0x83, 0xC6, 0xa1 ,0x86 ,0x8e, 0xff
41 };/*数码管十六进制编码表*/
42
43 unsigned char code m_ucKeyTab[]=
44 {
45 0x7e, 0xe7, 0xd7, 0xb7, 0x77, 0xeb, 0xdb, 0xbb, 0x7b, 0xed,
46 0xdd, 0xbd, 0x7d, 0xee, 0xde, 0xbe
47 };/*键盘十六进制编码表*/
48
49 unsigned char m_ucLedBuf[4];/*数码管显示值缓存*/
50
51 /****************************************************************************
52 名称: KeyCheck()
53 说明: 键盘检测
54 参数: 无
55 返回: 键盘码值,若无键按下则返回16
C51 COMPILER V7.20 KEYCHECK 03/23/2007 23:36:36 PAGE 2
56 *****************************************************************************/
57 unsigned char KeyCheck();
58
59 /****************************************************************************
60 名称: Led7Scan()
61 说明: 数码管动态扫描处理程序
62 参数: 无
63 返回: 无
64 *****************************************************************************/
65 void Led7Scan();
66
67 /*****************************************************************************
68 程序开始
69 *****************************************************************************/
70 void main()
71 {
72 1 unsigned char ucKey;
73 1
74 1 /*T0中断设定*/
75 1 TMOD=0x01; /*使用T0:GATE=0,C/T=0(定时),M1 M0=01(工作方式1)*/
76 1 TH0=0xec; /*定时时间为5毫秒*/
77 1 TL0=0x78;
78 1 ET0=1; /*允许T0中断*/
79 1 TR0=1; /*使T0工作*/
80 1 EA=1; /*总中断开启*/
81 1
82 1 while(1)
83 1 {
84 2 ucKey=KeyCheck(); /*获得键盘值*/
85 2 if(ucKey!=16) /*判断是否有键按下,若有则将它在数码管显示出来*/
86 2 {
87 3 m_ucLedBuf[0]=ucKey;/*在数码管显示键盘值*/
88 3 m_ucLedBuf[1]=ucKey;
89 3 m_ucLedBuf[2]=ucKey;
90 3 m_ucLedBuf[3]=ucKey;
91 3 }
92 2 }
93 1 }
94
95 /*****************************************************************************
96 名称: Interrupt1Handler
97 说明: T0中断入口
98 参数: 无
99 返回 :无
100 *****************************************************************************/
101 void Interrupt1Handler() interrupt 1
102 {
103 1 Led7Scan(); /*数码管动态扫描*/
104 1 TH0=0xec; /*重新设置T0定时值*/
105 1 TL0=0x78;
106 1 }
107
108 /****************************************************************************
109 名称: Led7Scan()
110 说明: 数码管动态扫描处理程序
111 参数: 无
112 返回: 无
113 *****************************************************************************/
114 void Led7Scan()
115 {
116 1 static unsigned char a=0;
117 1
C51 COMPILER V7.20 KEYCHECK 03/23/2007 23:36:36 PAGE 3
118 1 switch(a) /*判断数码管动态扫描值*/
119 1 {
120 2 case 0: /*处理数码管第一位*/
121 2 LED7D_CTRL=1; /*设置数码管第四位为无效*/
122 2 LED7A_CTRL=0; /*设置数码管第一位位有效*/
123 2 break;
124 2
125 2 case 1: /*处理数码管第二位*/
126 2 LED7A_CTRL=1; /*设置数码管第一位为无效*/
127 2 LED7B_CTRL=0; /*设置数码管第二位位有效*/
128 2 break;
129 2
130 2 case 2: /*处理数码管第三位*/
131 2 LED7B_CTRL=1; /*设置数码管第二位为无效*/
132 2 LED7C_CTRL=0; /*设置数码管第三位位有效*/
133 2 break;
134 2
135 2 case 3: /*处理数码管第四位*/
136 2 LED7C_CTRL=1; /*设置数码管第三位为无效*/
137 2 LED7D_CTRL=0; /*设置数码管第四位位有效*/
138 2 break;
139 2 }
140 1
141 1 LED7_STATUS=m_ucLedTab[m_ucLedBuf[a]]; /*将显示码送数码管状态引脚*/
142 1
143 1 a++; /*数码管动态扫描值加1,若该值4则置为0*/
144 1 if(a>3)
145 1 a=0;
146 1 }
147
148 /****************************************************************************
149 名称: KeyCheck()
150 说明: 键盘检测
151 参数: 无
152 返回: 键盘码值,若无键按下则返回16
153 *****************************************************************************/
154 unsigned char KeyCheck()
155 {
156 1 unsigned char a,b;
157 1
158 1 for(a=0;a<4;a++) /*循环4次*/
159 1 {
160 2 switch(a) /*改变键盘扫描码*/
161 2 {
162 3 case 0:KEY_STATUS=0xef;break;
163 3 case 1:KEY_STATUS=0xdf;break;
164 3 case 2:KEY_STATUS=0xbf;break;
165 3 case 3:KEY_STATUS=0x7f;break;
166 3 };
167 2
168 2 b=KEY_STATUS;
169 2 if((b&0x0f)!=0x0f) /*判断是否有按键按下*/
170 2 {
171 3 for(a=0;a<16;a++) /*根据键盘码判断那个键按下*/
172 3 {
173 4 if(b==m_ucKeyTab[a])
174 4 {
175 5 return a;
176 5 }
177 4 }
178 3 }
179 2 }
C51 COMPILER V7.20 KEYCHECK 03/23/2007 23:36:36 PAGE 4
180 1
181 1 return 16;
182 1 }
183
184
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 228 ----
CONSTANT SIZE = 33 ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 5 ----
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 + -