📄 key.lst
字号:
C51 COMPILER V8.08 KEY 12/26/2008 22:22:47 PAGE 1
C51 COMPILER V8.08, COMPILATION OF MODULE KEY
OBJECT MODULE PLACED IN KEY.OBJ
COMPILER INVOKED BY: d:\Keil\C51\BIN\C51.EXE KEY.C BROWSE DEBUG OBJECTEXTEND
line level source
*** WARNING C500 IN LINE 1 OF KEY.C: LICENSE ERROR (R208: RENEW LICENSE ID CODE (LIC))
1 #include <reg52.h>
2 #include <ctype.h>
3 #include <string.h>
4 #include <stdlib.h>
5 #include <stdio.h>
6 #include <math.h>
7 #include <absacc.h>
8
9 #define uchar unsigned char
10 #define uint unsigned int
11 #define ulong unsigned long
12
13 sbit sm1623_dout=P1^0;
14 sbit sm1623_din=P1^1;
15 sbit sm1623_clk=P1^2;
16 sbit sm1623_stb=P1^3;
17 sbit sound=P1^5;
18
19 #define cs_led XBYTE[0xC000]
20
21 void delay(uchar delay_temp);//长延时
22 void delaym(uchar delaym_temp);//短延时
23 void disp(uchar dis);
24 void display();
25 uchar key(void);
26 uchar key_deal(void);
27
28 uchar i,j,k;
29 uchar temp_1;
30 uchar code_dis[6];
31
32 main(void)
33 {
34 1 start: //---------------------------------------数码管显示测试1
35 1 for(i=0;i<6;i++)code_dis[i]=1;
36 1 display();//显示111111
37 1 for(j=0;j<5;j++)
38 1 {
39 2 for(i=0;i<6;i++)code_dis[i]=i+j;
40 2 display();
41 2 delay(0xff);
42 2 }
43 1
44 1 //---------------------------------------按键测试2
45 1 for(i=0;i<6;i++)code_dis[i]=2;
46 1 display();//显示222222
47 1
48 1 temp_1=0;
49 1 while(temp_1!=0x08)
50 1 {
51 2 temp_1=key_deal();
52 2 switch(temp_1)
53 2 {
54 3 case 0:
C51 COMPILER V8.08 KEY 12/26/2008 22:22:47 PAGE 2
55 3 sound=1;
56 3 cs_led=0xff;
57 3 break;
58 3 case 1:
59 3 sound=0;
60 3 cs_led=0xfe;
61 3 break;
62 3 case 2:
63 3 sound=0;
64 3 cs_led=0xfd;
65 3 break;
66 3 case 3:
67 3 sound=0;
68 3 cs_led=0xfb;
69 3 break;
70 3 case 4:
71 3 sound=0;
72 3 cs_led=0xf7;
73 3 break;
74 3 case 5:
75 3 sound=0;
76 3 cs_led=0xef;
77 3 break;
78 3 case 6:
79 3 sound=0;
80 3 cs_led=0xdf;
81 3 break;
82 3 case 7:
83 3 sound=0;
84 3 cs_led=0xbf;
85 3 break;
86 3 case 8:
87 3 sound=0;
88 3 cs_led=0x7f;
89 3 delay(0x7f);
90 3 break;
91 3 default:
92 3 sound=1;
93 3 cs_led=0xff;
94 3 break;
95 3 }
96 2 }
97 1 sound=1;
98 1 cs_led=0x00;
99 1 goto start;
100 1 }
101
102 void delay(uchar delay_temp)//延时子程序
103 {
104 1 uchar i,j;
105 1 for(i=0;i<delay_temp;i++)
106 1 {
107 2 for(j=0;j<255;j++);
108 2 }
109 1 }
110
111 void delaym(uchar delaym_temp)//延时子程序
112 {
113 1 uchar i;
114 1 for(i=0;i<delaym_temp;i++);
115 1 }
116
C51 COMPILER V8.08 KEY 12/26/2008 22:22:47 PAGE 3
117 void disp(uchar dis)//送显示命令子程序
118 {
119 1 uchar dis_i,dis_temp;
120 1 dis_temp=0x01;
121 1 for(dis_i=0;dis_i<8;dis_i++)
122 1 {
123 2 sm1623_clk=0;
124 2 delaym(1);
125 2 if((dis&dis_temp)==0){sm1623_din=0;}
126 2 else{sm1623_din=1;}
127 2 sm1623_clk=1;//上升沿输入数据
128 2 delaym(1);
129 2 dis_temp=dis_temp<<1;
130 2 }
131 1 }
132
133 void display()//显示子程序
134 {
135 1 uchar code_dis_d[6];
136 1 uchar i;
137 1 for(i=0;i<6;i++)//计算显示码
138 1 {
139 2 switch(code_dis[i])
140 2 {
141 3 case 1:
142 3 code_dis_d[i]=0x06;
143 3 break;
144 3 case 2:
145 3 code_dis_d[i]=0x5b;
146 3 break;
147 3 case 3:
148 3 code_dis_d[i]=0x4f;
149 3 break;
150 3 case 4:
151 3 code_dis_d[i]=0x66;
152 3 break;
153 3 case 5:
154 3 code_dis_d[i]=0x6d;
155 3 break;
156 3 case 6:
157 3 code_dis_d[i]=0x7d;
158 3 break;
159 3 case 7:
160 3 code_dis_d[i]=0x07;
161 3 break;
162 3 case 8:
163 3 code_dis_d[i]=0x7f;
164 3 break;
165 3 case 9:
166 3 code_dis_d[i]=0x6f;
167 3 break;
168 3 case 10://显示黑
169 3 code_dis_d[i]=0x00;
170 3 break;
171 3 case 11://显示A
172 3 code_dis_d[i]=0x77;
173 3 break;
174 3 case 12://显示d
175 3 code_dis_d[i]=0x5e;
176 3 break;
177 3 case 13://显示-
178 3 code_dis_d[i]=0x40;
C51 COMPILER V8.08 KEY 12/26/2008 22:22:47 PAGE 4
179 3 break;
180 3 case 14://显示8.
181 3 code_dis_d[i]=0xff;
182 3 break;
183 3 default://显示0
184 3 code_dis_d[i]=0x3f;
185 3 break;
186 3 }
187 2 }
188 1 sm1623_stb=0;
189 1 disp(0x02);//显示模式6位12段
190 1 sm1623_stb=1;
191 1 delaym(1);
192 1 sm1623_stb=0;
193 1 disp(0x40);//设置数据
194 1 sm1623_stb=1;
195 1 delaym(1);
196 1 sm1623_stb=0;
197 1 disp(0xc0);//设置地址
198 1 disp(code_dis_d[0]);//1
199 1 disp(0x00);
200 1 disp(code_dis_d[1]);//2
201 1 disp(0x00);
202 1 disp(code_dis_d[2]);//3
203 1 disp(0x00);
204 1 disp(code_dis_d[3]);//4
205 1 disp(0x00);
206 1 disp(code_dis_d[4]);//5
207 1 disp(0x00);
208 1 disp(code_dis_d[5]);//6
209 1 disp(0x00);
210 1 sm1623_stb=1;
211 1 delaym(1);
212 1 sm1623_stb=0;
213 1 disp(0x8a);//控制显示
214 1 sm1623_stb=1;
215 1 }
216
217 uchar key(void)//按键读数据子程序
218 {
219 1 uchar key_i,key_temp,key_re;
220 1 key_temp=0x00;
221 1 for(key_i=0;key_i<8;key_i++)
222 1 {
223 2 sm1623_clk=0;//下降沿输出数据
224 2 delaym(1);
225 2 if(sm1623_dout==0){key_temp=key_temp&0x7f;}
226 2 else{key_temp=key_temp|0x80;}
227 2 key_re=key_temp;
228 2 sm1623_clk=1;
229 2 delaym(1);
230 2 key_temp=key_temp>>1;
231 2 }
232 1 return key_re;
233 1 }
234
235 uchar key_deal(void)//按键处理子程序,返回按键编号
236 {
237 1 uchar temp_k1,temp_k2;
238 1 sm1623_stb=0;
239 1 disp(0x42);//读键扫数据指令
240 1 temp_k1=key()&0x1b;
C51 COMPILER V8.08 KEY 12/26/2008 22:22:47 PAGE 5
241 1 temp_k2=key()&0x1b;
242 1 sm1623_stb=1;//取消片选,如果没有此语句按键5时,会出现按键1被按下的现象
243 1 if(temp_k1!=0x00)
244 1 {
245 2 switch(temp_k1)
246 2 {
247 3 case 0x01:
248 3 return 0x01;
249 3 break;
250 3 case 0x02:
251 3 return 0x02;
252 3 break;
253 3 case 0x08:
254 3 return 0x03;
255 3 break;
256 3 case 0x10:
257 3 return 0x04;
258 3 break;
259 3 default:
260 3 return 0x00;
261 3 break;
262 3 }
263 2 }
264 1 if(temp_k2!=0x00)
265 1 {
266 2 switch(temp_k2)
267 2 {
268 3 case 0x01:
269 3 return 0x05;
270 3 break;
271 3 case 0x02:
272 3 return 0x06;
273 3 break;
274 3 case 0x08:
275 3 return 0x07;
276 3 break;
277 3 case 0x10:
278 3 return 0x08;
279 3 break;
280 3 default:
281 3 return 0x00;
282 3 break;
283 3 }
284 2 }
285 1 return 0x00;
286 1 }
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 725 ----
CONSTANT SIZE = ---- ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 10 6
IDATA SIZE = ---- ----
BIT SIZE = ---- ----
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 1 WARNING(S), 0 ERROR(S)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -