📄 key.lst
字号:
C51 COMPILER V7.06 KEY 07/21/2008 12:45:44 PAGE 1
C51 COMPILER V7.06, COMPILATION OF MODULE KEY
OBJECT MODULE PLACED IN E:\温度表\KEY.OBJ
COMPILER INVOKED BY: D:\Keil\C51\BIN\C51.EXE E:\温度表\KEY.C DB SB OE
stmt level source
1 #include <reg52.h>
2 #include "key.h"
3
4 #define KEY_SET 0x0e//设置键
5 #define KEY_UP 0x0b//向上键
6 #define KEY_DOEN 0x0d//向下键
7 #define KEY_RUN 0x07//运行键
8 #define EAKER 0x09//上下键同时按下
9 #define KEY_P1 P1
10
11
12 extern void AT24C02_Write_Byte(unsigned char Device,unsigned char Addr, unsigned char Data);
13 /***************************************************************************************************
14 函数名称:Read_Temperature()
15 函数入口:空
16 函数出口:返回拨码开关的值
17 功能描述:读取拨码开关并返回设定值
18
19 ****************************************************************************************************/
20 sbit gh=P3^4;
21 sbit low=P3^3;
22 unsigned int Read_Temperature(void)
23 {
24 1 unsigned int vioud,tmp[4];
25 1 unsigned char m,n;
26 1 gh=0;
27 1 P0=0xff;
28 1 m=P0;
29 1 m=~m;
30 1 n=(m&0x0f);
31 1 m=m>>=4;
32 1 tmp[0]=n*1000;
33 1 tmp[1]=m*100;
34 1 gh=1;
35 1 low=0;
36 1 P0=0xff;
37 1 m=P0;
38 1 m=~m;
39 1 n=(m&0x0f);
40 1 m=m>>=4;
41 1 tmp[2]=n*10;
42 1 tmp[3]=m;
43 1 low=1;
44 1 vioud=tmp[0];
45 1 vioud+=tmp[1];
46 1 vioud+=tmp[2];
47 1 vioud+=tmp[3];
48 1 return vioud;
49 1 }
50 /***************************************************************************************************
51 函数名称:KEY_JIEXI(unsigned int Variable)
52 函数入口:
53 unsigned int Variable :采集到的键盘值,就是P2、P3口的数值。
54 函数出口:
55 功能描述:键盘解析,通过采样的数值分析出当前按下的是那个键。(包括复合键)并针对键进行相应的操作
C51 COMPILER V7.06 KEY 07/21/2008 12:45:44 PAGE 2
56 关键点描述:无
57 ****************************************************************************************************/
58 KEY_JIEXI(unsigned int Variable)
59 {
60 1 switch(Variable)
61 1 {
62 2 //单键。。。。
63 2 case KEY_RUN: //0x0e运行键
64 2 set=0;
65 2
66 2
67 2 break;
68 2 case KEY_DOEN: //0x0d向下键
69 2 if(set)
70 2 set--;
71 2 else
72 2 set=5;
73 2 break;
74 2 case KEY_UP: //0x0b向上键
75 2 if(set<5)
76 2 set++;
77 2 else
78 2 set=0;
79 2 break;
80 2 case KEY_SET: //0x07设置键
81 2 switch(set)
82 2 {
83 3 case 1:
84 3
85 3 upper_limit.X=Read_Temperature();
86 3 AT24C02_Write_Byte(0xA0, 0x01, upper_limit.c[0]);
87 3 AT24C02_Write_Byte(0xA0, 0x02, upper_limit.c[1]);
88 3 break;
89 3 case 2:
90 3 lower_limit.X=Read_Temperature();
91 3 AT24C02_Write_Byte(0xA0, 0x03, lower_limit.c[0]);
92 3 AT24C02_Write_Byte(0xA0, 0x04, lower_limit.c[1]);
93 3 break;
94 3 case 3:
95 3 difference.X=Read_Temperature();
96 3 AT24C02_Write_Byte(0xA0, 0x05, difference.c[0]);
97 3 AT24C02_Write_Byte(0xA0, 0x06, difference.c[1]);
98 3 break;
99 3 case 4:
100 3 set=0;
101 3 break;
102 3 case 5:
103 3 set=0;
104 3 break;
105 3 default:
106 3 break;
107 3 }
108 2 break;
109 2 case EAKER: //上下键同时按下进行采集通道选择
110 2
111 2
112 2 break;//复合键。。。。
113 2
114 2 //未定义键
115 2 default:
116 2 break;
117 2 }
C51 COMPILER V7.06 KEY 07/21/2008 12:45:44 PAGE 3
118 1
119 1 }
120 /***************************************************************************************************/
121 /***************************************************************************************************
122 函数名称:KEY()
123 函数入口:空
124 函数出口:空
125 功能描述:键盘消抖
126 设计思想:
127 建立一个键盘值保存缓冲区KEY_Variable[3],能够连续保存最近的三次采样到的键盘值。当最后两次采
128 样到的值相等并且和倒数第三次的值不相等时,说明有按键按下。进行确认。当三次的采样值都相等时,说
129 明此按键已经确认过了,不进行确认。
130 ****************************************************************************************************/
131 KEY()
132 {
133 1 unsigned char key_buf;
134 1 KEY_Variable[2]=KEY_Variable[1];
135 1 KEY_Variable[1]=KEY_Variable[0];
136 1 EA = 0;
137 1
138 1 key_buf=KEY_P1;
139 1 KEY_Variable[0] =(key_buf&0xc0);
140 1 KEY_Variable[0] >>=4;
141 1 KEY_Variable[0]|=(key_buf&0x03);
142 1
143 1
144 1 if(KEY_Variable[0] == KEY_Variable[1])
145 1 {
146 2 if(KEY_Variable[1] == KEY_Variable[2])
147 2 {
148 3 SPEAKER=0;
149 3 return;
150 3 }
151 2 else
152 2 {
153 3 SPEAKER=1;
154 3 KEY_JIEXI(KEY_Variable[0]); //分析按下的是什么键,并做相应的处理。
155 3 }
156 2 }
157 1 return;
158 1 }
159
160
161
C51 COMPILER V7.06 KEY 07/21/2008 12:45:44 PAGE 4
NAME CLASS MSPACE TYPE OFFSET SIZE
==== ===== ====== ==== ====== ====
P0 . . . . . . . . . . . . . . . . . . SFR DATA U_CHAR 0080H 1
P1 . . . . . . . . . . . . . . . . . . SFR DATA U_CHAR 0090H 1
P3 . . . . . . . . . . . . . . . . . . SFR DATA U_CHAR 00B0H 1
EA . . . . . . . . . . . . . . . . . . ABSBIT ----- BIT 00AFH 1
p_temp . . . . . . . . . . . . . . . . * TAG * ----- UNION ----- 2
c. . . . . . . . . . . . . . . . . . MEMBER ----- ARRAY 0000H 2
X. . . . . . . . . . . . . . . . . . MEMBER ----- U_INT 0000H 2
SPEAKER. . . . . . . . . . . . . . . . ABSBIT ----- BIT 00B5H 1
IE . . . . . . . . . . . . . . . . . . SFR DATA U_CHAR 00A8H 1
difference . . . . . . . . . . . . . . PUBLIC DATA UNION 0000H 2
IP . . . . . . . . . . . . . . . . . . SFR DATA U_CHAR 00B8H 1
_KEY_JIEXI . . . . . . . . . . . . . . PUBLIC CODE PROC 0000H -----
Variable . . . . . . . . . . . . . . * REG * DATA U_INT 0006H 2
lower_limit. . . . . . . . . . . . . . PUBLIC DATA UNION 0002H 2
upper_limit. . . . . . . . . . . . . . PUBLIC DATA UNION 0004H 2
SCON . . . . . . . . . . . . . . . . . SFR DATA U_CHAR 0098H 1
TCON . . . . . . . . . . . . . . . . . SFR DATA U_CHAR 0088H 1
ADC. . . . . . . . . . . . . . . . . . PUBLIC DATA BIT 0000H 1
set. . . . . . . . . . . . . . . . . . PUBLIC DATA U_CHAR 0006H 1
gh . . . . . . . . . . . . . . . . . . ABSBIT ----- BIT 00B4H 1
low. . . . . . . . . . . . . . . . . . ABSBIT ----- BIT 00B3H 1
_AT24C02_Write_Byte. . . . . . . . . . EXTERN CODE PROC ----- -----
T2CON. . . . . . . . . . . . . . . . . SFR DATA U_CHAR 00C8H 1
KEY. . . . . . . . . . . . . . . . . . PUBLIC CODE PROC 0000H -----
key_buf. . . . . . . . . . . . . . . * REG * DATA U_CHAR 0007H 1
Read_Temperature . . . . . . . . . . . PUBLIC CODE PROC 0000H -----
vioud. . . . . . . . . . . . . . . . * REG * DATA U_INT 0006H 2
tmp. . . . . . . . . . . . . . . . . AUTO DATA ARRAY 0000H 8
m. . . . . . . . . . . . . . . . . . * REG * DATA U_CHAR 0003H 1
n. . . . . . . . . . . . . . . . . . * REG * DATA U_CHAR 0007H 1
KEY_Variable . . . . . . . . . . . . . PUBLIC DATA ARRAY 0007H 3
PSW. . . . . . . . . . . . . . . . . . SFR DATA U_CHAR 00D0H 1
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 314 ----
CONSTANT SIZE = ---- ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 10 8
IDATA SIZE = ---- ----
BIT SIZE = 1 ----
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -