📄 pmkguan.lst
字号:
C51 COMPILER V7.06 PMKGUAN 07/18/2008 19:41:19 PAGE 1
C51 COMPILER V7.06, COMPILATION OF MODULE PMKGUAN
OBJECT MODULE PLACED IN E:\温度表\PMKGUAN.OBJ
COMPILER INVOKED BY: D:\Keil\C51\BIN\C51.EXE E:\温度表\PMKGUAN.C DB SB OE
stmt level source
1 #include <reg52.h>
2 #define a 0x01
3 #define b 0x02
4 #define c 0x04
5 #define d 0x08
6 #define e 0x10
7 #define f 0x20
8 #define g 0x40
9 #define dot 0x80
10 #define H 10
11 #define L 11
12 #define P 12
13 sbit sd=P2^ 7;
14 sbit sp=P3^ 5;
15 unsigned char set;
16 unsigned char KEY_Variable[3];
17 unsigned int tmep;
18 unsigned char code disp_code[] = {
19 a+b+c+d+e+f, // 0
20 b+c, // 1
21 a+b+d+e+g, // 2
22 a+b+c+d+g, // 3
23 b+c+f+g, // 4
24 a+c+d+f+g, // 5
25 a+c+d+e+f+g, // 6
26 a+b+c, // 7
27 a+b+c+d+e+f+g, // 8
28 a+b+c+d+f+g, // 9
29 b+c+e+f+g, //H
30 d+e+f, //L
31 a+b+e+f+g, //P
32 b+c+g, //+
33 g, //-
34 };
35
36 void sendbyte(unsigned char yte)
37 { P2=0;
38 1 sd=1;
39 1 P0=disp_code[yte];
40 1 //sd=0;
41 1
42 1 }
43
44
45
46 void display(unsigned int i)
47 { unsigned int k;
48 1 unsigned char j,m,q;
49 1 unsigned int s[6];
50 1 s[0] = i/10000;
51 1 k = i%10000;
52 1 s[1] = k/1000;
53 1 k = k%1000;
54 1 s[2] = k/100;
55 1 k = k%100;
C51 COMPILER V7.06 PMKGUAN 07/18/2008 19:41:19 PAGE 2
56 1 s[3] = k/10;
57 1 k = k%10;
58 1 s[4] = k;
59 1 j=0x40;
60 1 q=2;
61 1
62 1 for(k = 0; s[k] == 0 && k<3; k++);
63 1 if (k==3) k--; // if all bytes are '0', get back one position
64 1 if(s[4]==0)
65 1 {
66 2 q--;
67 2 if(s[3]==0)q--;
68 2 }
69 1 do
70 1 {
71 2 if(k==2)
72 2 {
73 3 m=j>>4;
74 3 }
75 2 P2=(m|j);
76 2
77 2 P0=(disp_code[s[k++]]);
78 2 j>>=1;
79 2 }
80 1 while (k<3);
81 1 while(q&&(j>0x0f))
82 1 {
83 2 P2=(m|j);
84 2 P0=(disp_code[s[k++]]);
85 2 j>>=1;
86 2 q--;
87 2 }
88 1 }
89 #define KEY_SET 0x07//设置键
90 #define KEY_UP 0x0b//向上键
91 #define KEY_DOEN 0x0d//向下键
92 #define KEY_RUN 0x0e//运行键
93 #define KEY_P1 P1
94
95 /***************************************************************************************************
96 函数名称:KEY_JIEXI(unsigned int Variable)
97 函数入口:
98 unsigned int Variable :采集到的键盘值,就是P2、P3口的数值。
99 函数出口:
100 功能描述:键盘解析,通过采样的数值分析出当前按下的是那个键。(包括复合键)并针对键进行相应的操作
101 关键点描述:无
102 ****************************************************************************************************/
103 KEY_JIEXI(unsigned int Variable)
104 {
105 1 sp=0;
106 1 switch(Variable)
107 1 {
108 2 //单键。。。。
109 2 case KEY_RUN: //0x01运行键
110 2 set=0;
111 2 tmep=0;
112 2 break;
113 2 case KEY_DOEN: //0x02向下键
114 2 if(set)
115 2 set--;
116 2 else
117 2 set=14;
C51 COMPILER V7.06 PMKGUAN 07/18/2008 19:41:19 PAGE 3
118 2 break;
119 2 case KEY_UP: //0x04向上键
120 2 if(set<14)
121 2 { set++;
122 3
123 3 }
124 2 else
125 2 set=0;
126 2 break;
127 2 case KEY_SET: //0x07设置键
128 2 tmep=tmep+8;
129 2 break;
130 2 default:
131 2 break;
132 2 }
133 1 sp=1;
134 1 }
135 /***************************************************************************************************/
136 /***************************************************************************************************
137 函数名称:KEY()
138 函数入口:空
139 函数出口:空
140 功能描述:键盘消抖
141 设计思想:
142 建立一个键盘值保存缓冲区KEY_Variable[3],能够连续保存最近的三次采样到的键盘值。当最后两次采
143 样到的值相等并且和倒数第三次的值不相等时,说明有按键按下。进行确认。当三次的采样值都相等时,说
144 明此按键已经确认过了,不进行确认。
145 ****************************************************************************************************/
146 KEY()
147 {
148 1 unsigned char key_buf;
149 1 KEY_Variable[2]=KEY_Variable[1];
150 1 KEY_Variable[1]=KEY_Variable[0];
151 1 EA = 0;
152 1 key_buf=KEY_P1;
153 1 KEY_Variable[0] =key_buf&0xc0;
154 1 KEY_Variable[0] >>=4;
155 1 KEY_Variable[0]|=(key_buf&0x03);
156 1
157 1 if(KEY_Variable[0] == KEY_Variable[1])
158 1 {
159 2 if(KEY_Variable[1] == KEY_Variable[2])
160 2 {
161 3 return;
162 3 }
163 2 else
164 2 {
165 3
166 3 KEY_JIEXI(KEY_Variable[0]); //分析按下的是什么键,并做相应的处理。
167 3 }
168 2 }
169 1 return;
170 1 }
171
172 void main(void)
173 {
174 1 /* SCON = 0x52; // 8-bit UART mode
175 1 TMOD = 0x20; // timer 1 mode 2 auto reload
176 1 TH1= 0xfd; // 9600 8n1
177 1 //TR1 = 1; // run timer1*/
178 1 P1=0xff;
179 1 P0=0x00;
C51 COMPILER V7.06 PMKGUAN 07/18/2008 19:41:19 PAGE 4
180 1 P2=0xff;
181 1 while(1)
182 1 {
183 2 KEY();
184 2 sendbyte(set);
185 2 display(tmep);
186 2 }
187 1 }
188
C51 COMPILER V7.06 PMKGUAN 07/18/2008 19:41:19 PAGE 5
NAME CLASS MSPACE TYPE OFFSET SIZE
==== ===== ====== ==== ====== ====
P0 . . . . . . . . . . . . . . . . . . SFR DATA U_CHAR 0080H 1
P1 . . . . . . . . . . . . . . . . . . SFR DATA U_CHAR 0090H 1
P2 . . . . . . . . . . . . . . . . . . SFR DATA U_CHAR 00A0H 1
P3 . . . . . . . . . . . . . . . . . . SFR DATA U_CHAR 00B0H 1
EA . . . . . . . . . . . . . . . . . . ABSBIT ----- BIT 00AFH 1
IE . . . . . . . . . . . . . . . . . . SFR DATA U_CHAR 00A8H 1
IP . . . . . . . . . . . . . . . . . . SFR DATA U_CHAR 00B8H 1
_KEY_JIEXI . . . . . . . . . . . . . . PUBLIC CODE PROC 0000H -----
Variable . . . . . . . . . . . . . . * REG * DATA U_INT 0006H 2
main . . . . . . . . . . . . . . . . . PUBLIC CODE PROC 0000H -----
disp_code. . . . . . . . . . . . . . . PUBLIC CODE ARRAY 0000H 15
SCON . . . . . . . . . . . . . . . . . SFR DATA U_CHAR 0098H 1
TCON . . . . . . . . . . . . . . . . . SFR DATA U_CHAR 0088H 1
tmep . . . . . . . . . . . . . . . . . PUBLIC DATA U_INT 0000H 2
_sendbyte. . . . . . . . . . . . . . . PUBLIC CODE PROC 0000H -----
yte. . . . . . . . . . . . . . . . . * REG * DATA U_CHAR 0007H 1
set. . . . . . . . . . . . . . . . . . PUBLIC DATA U_CHAR 0002H 1
sd . . . . . . . . . . . . . . . . . . ABSBIT ----- BIT 00A7H 1
_display . . . . . . . . . . . . . . . PUBLIC CODE PROC 0000H -----
i. . . . . . . . . . . . . . . . . . * REG * DATA U_INT 0002H 2
k. . . . . . . . . . . . . . . . . . * REG * DATA U_INT 0002H 2
j. . . . . . . . . . . . . . . . . . * REG * DATA U_CHAR 0007H 1
m. . . . . . . . . . . . . . . . . . AUTO DATA U_CHAR 0000H 1
q. . . . . . . . . . . . . . . . . . * REG * DATA U_CHAR 0006H 1
s. . . . . . . . . . . . . . . . . . AUTO DATA ARRAY 0001H 12
sp . . . . . . . . . . . . . . . . . . ABSBIT ----- BIT 00B5H 1
T2CON. . . . . . . . . . . . . . . . . SFR DATA U_CHAR 00C8H 1
KEY. . . . . . . . . . . . . . . . . . PUBLIC CODE PROC 0000H -----
key_buf. . . . . . . . . . . . . . . * REG * DATA U_CHAR 0007H 1
KEY_Variable . . . . . . . . . . . . . PUBLIC DATA ARRAY 0003H 3
PSW. . . . . . . . . . . . . . . . . . SFR DATA U_CHAR 00D0H 1
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 431 ----
CONSTANT SIZE = 15 ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 6 13
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 + -