📄 ch451_b.lst
字号:
C51 COMPILER V7.08 CH451_B 09/27/2006 09:13:59 PAGE 1
C51 COMPILER V7.08, COMPILATION OF MODULE CH451_B
OBJECT MODULE PLACED IN CH451_B.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE CH451_B.c BROWSE DEBUG OBJECTEXTEND
line level source
1 /*******************************************************************************
2 * 标题: 北京蓝海微芯LJD-SY-5200单片机开发系统演示程序 *
3 * 文件: CH451.C *
4 * 日期: 2006-8-9 *
5 * 版本: 1.0 *
6 * 作者: 蓝海微芯 *
7 * 网站: http://www.ljd-2008.com *
8 ********************************************************************************
9 * 描述: *
10 * CH451程序模块 *
-
11 * *
12 * *
13 ********************************************************************************
14 * 【版权】 Copyright(C)微芯科技 http://www.bluemcu.com All Rights Reserved *
15 * 【声明】 此程序仅用于学习与参考,引用请注明版权和作者信息! *
16 *******************************************************************************/
17 #include<reg51.h> /*=== 头文件包含 ===*/
18 #include<intrins.h>
19 #include<absacc.h>
20 #include <IC_CARD_B.h>
21
22 uchar ch451_key;
23 uchar key_flag;
24 uint M;
25 uchar m0;
26 uchar m1;
27 uchar m2;
28 uchar m3;
29 bit flag_enter;
30 bit flag_show;
31 uchar flag_num;
32 uchar flag_cnt=0;
33 uchar input_code[4];
34 uchar pdata ds_num[10]="0123456789";
35 void decide_num(void);
36 void input_num(void);
37 /********************************************************************
38 函 数 名:ch451中断服务程序
39 功 能:获取键值
40 说 明:
41 调 用:
42 入口参数:
43 返 回 值:ch451_key
44 设 计:蓝海微芯
45 ***********************************************************************/
46
47 void ch451_inter() interrupt 2 using 1
48 {
49 1 unsigned char i; /*定义循环变量*/
50 1 unsigned char command,keycode; /*定义控制字寄存器,和中间变量定时器*/
51 1 command=0x07; /*读取键值命令的高4位0111B*/
52 1 EX1 = 0;
53 1 ch451_load=0; /*命令开始*/
54 1 for(i=0;i<4;i++)
C51 COMPILER V7.08 CH451_B 09/27/2006 09:13:59 PAGE 2
55 1 {
56 2 ch451_din=command&1; /*低位在前,高位在后*/
57 2 ch451_clk=0;
58 2 command>>=1; /*右移一位*/
59 2 ch451_clk=1; /*产生时钟上升沿锁通知CH451输入位数据*/
60 2 }
61 1 ch451_load=1; /*产生加载上升沿通知CH451处理命令数据*/
62 1 keycode=0; /*清除keycode*/
63 1 for(i=0;i<7;i++)
64 1 {
65 2 keycode<<=1; /*数据作移一位,高位在前,低位在后*/
66 2 keycode|=ch451_dout; /*从高到低读入451的数据*/
67 2 ch451_clk=0; /*产生时钟下升沿通知CH451输出下一位*/
68 2 ch451_clk=1;
69 2 }
70 1 ch451_key=keycode; /*保存上次的键值*/
71 1 decide_num();
72 1 input_num();
73 1 EX1 = 1;
74 1 IE1=0; /*清中断标志*/
75 1 }
76 /********************************************************************
77
78 函 数 名:ch451_init()
79 功 能:对ch451芯片进行初始化
80 说 明:
81 调 用:
82 入口参数:
83 返 回 值:
84 设 计:蓝海微芯
85 ***********************************************************************/
86 void ch451_init(void)
87 {
88 1 ch451_din = 0; /*先低后高,选择4线输入*/
89 1 ch451_din = 1;
90 1 ch451_load = 1;
91 1 ch451_clk = 1;
92 1 _nop_();
93 1 }
94 /********************************************************************
95
96 函 数 名:ch451_write()
97 功 能:把12位的指令或数据写入ch451
98 说 明:12位数据或指令的写入顺序是低位
99 调 用:
100 入口参数:command
101 返 回 值:
102 设 计:蓝海微芯
103 ***********************************************************************/
104 void ch451_write(uint command)
105 {
106 1 unsigned char i;
107 1
108 1 EX1=0; /*禁止键盘中断*/
109 1 ch451_load=0; /*命令开始*/
110 1 for(i=0;i<12;i++)
111 1 { /*送入12位数据,低位在前*/
112 2 ch451_din=command&1;
113 2 ch451_clk=0;
114 2 command>>=1;
115 2 ch451_clk=1; /*上升沿有效*/
116 2 }
C51 COMPILER V7.08 CH451_B 09/27/2006 09:13:59 PAGE 3
117 1 ch451_load=1; /*加载数据*/
118 1 EX1=1;
119 1 }
120
121 /********************************************************************
122 函 数 名:input_num()
123 功 能:获取由键盘输入的数值
124 说 明:将由键盘输入的密码值存入到数组input_code[6]中。
125 调 用:
126 入口参数:
127 返 回 值:
128 设 计:蓝海微芯
129 ***********************************************************************/
130 void input_num(void)
131 {
132 1
133 1 if(flag_cnt==3)
134 1 {
135 2 flag_num=0x0a;
136 2 }
137 1
138 1 switch(flag_num){
139 2 case 0x00:
140 2 flag_num=0x0a;
141 2 write_GLCD(ds_num[0]);
142 2 input_code[flag_cnt]=0x00;
143 2 break;
144 2
145 2 case 0x01:
146 2 flag_num=0x0a;
147 2 write_GLCD(ds_num[1]);
148 2 input_code[flag_cnt]=0x01;
149 2 break;
150 2
151 2 case 0x02:
152 2 flag_num=0x0a;
153 2 write_GLCD(ds_num[2]);
154 2 input_code[flag_cnt]=0x02;
155 2 break;
156 2
157 2 case 0x03:
158 2 flag_num=0x0a;
159 2 write_GLCD(ds_num[3]);
160 2 input_code[flag_cnt]=0x03;
161 2 break;
162 2
163 2 case 0x04:
164 2 flag_num=0x0a;
165 2 write_GLCD(ds_num[4]);
166 2 input_code[flag_cnt]=0x04;
167 2 break;
168 2
169 2 case 0x05:
170 2 flag_num=0x0a;
171 2 write_GLCD(ds_num[5]);
172 2 input_code[flag_cnt]=0x05;
173 2 break;
174 2
175 2 case 0x06:
176 2 flag_num=0x0a;
177 2 write_GLCD(ds_num[6]);
178 2 input_code[flag_cnt]=0x06;
C51 COMPILER V7.08 CH451_B 09/27/2006 09:13:59 PAGE 4
179 2 break;
180 2
181 2 case 0x07:
182 2 flag_num=0x0a;
183 2 write_GLCD(ds_num[7]);
184 2 input_code[flag_cnt]=0x07;
185 2 break;
186 2
187 2 case 0x08:
188 2 flag_num=0x0a;
189 2 write_GLCD(ds_num[8]);
190 2 input_code[flag_cnt]=0x08;
191 2 break;
192 2
193 2 case 0x09:
194 2 flag_num=0x0a;
195 2 write_GLCD(ds_num[9]);
196 2 input_code[flag_cnt]=0x09;
197 2 break;
198 2 default:
199 2 break;
200 2 }
201 1 if((flag_cnt!=3)&&(flag_enter==0))
202 1 {
203 2 flag_cnt++;
204 2 }
205 1 }
206 /********************************************************************
207 函 数 名:decide_num()
208 功 能:将相应的按键识别成对应的数值
209 说 明:
210 调 用:
211 入口参数:
212 返 回 值:
213 设 计:蓝海微芯
214 ***********************************************************************/
215 void decide_num(void)
216 {
217 1 switch(ch451_key){
218 2 case 0x40:
219 2 flag_num=0x00;
220 2 break;
221 2 case 0x41:
222 2 flag_num=0x01;
223 2 break;
224 2 case 0x42:
225 2 flag_num=0x02;
226 2 break;
227 2 case 0x43:
228 2 flag_num=0x03;
229 2 break;
230 2 case 0x48:
231 2 flag_num=0x04;
232 2 break;
233 2 case 0x49:
234 2 flag_num=0x05;
235 2 break;
236 2 case 0x4a:
237 2 flag_num=0x06;
238 2 break;
239 2 case 0x4b:
240 2 flag_num=0x07;
C51 COMPILER V7.08 CH451_B 09/27/2006 09:13:59 PAGE 5
241 2 break;
242 2 case 0x50:
243 2 flag_num=0x08;
244 2 break;
245 2 case 0x51:
246 2 flag_num=0x09;
247 2 break;
248 2 case 0x52:
249 2 flag_enter=1;
250 2 break;
251 2 default:
252 2 break;
253 2 }
254 1 ch451_key=0xff;
255 1 }
256 /********************************************************************
257 函 数 名:decide_num()
258 功 能:将相应的按键识别成对应的数值
259 说 明:
260 调 用:
261 入口参数:
262 返 回 值:
263 设 计:蓝海微芯
264 ***********************************************************************/
265 void input_money(void)
266 {
267 1 if(flag_cnt==3) /*确认按键按下时意输入了3位数的购电金额*/
268 1 {
269 2 m0=input_code[0];
270 2 m1=input_code[1];
271 2 m2=input_code[2];
272 2 input_code[0]=0x00;
273 2 input_code[1]=0x00;
274 2 input_code[2]=0x00;
275 2 M=m0*100+m1*10+m2;
276 2 }
277 1 if(flag_cnt==2) /*确认按键按下时意输入了2位数的购电金额*/
278 1 {
279 2 m0=input_code[0];
280 2 m1=input_code[1];
281 2 input_code[0]=0x00;
282 2 input_code[1]=0x00;
283 2 M=m0*10+m1;
284 2 }
285 1 if(flag_cnt==1) /*确认按键按下时意输入了1位数的购电金额*/
286 1 {
287 2 M=input_code[0];
288 2 input_code[0]=0x00;
289 2 }
290 1 if(flag_cnt==0) /*确认按键按下时意输入了0位数的购电金额*/
291 1 {
292 2 M=0;
293 2 }
294 1
295 1 }
296
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 589 ----
CONSTANT SIZE = ---- ----
XDATA SIZE = ---- ----
C51 COMPILER V7.08 CH451_B 09/27/2006 09:13:59 PAGE 6
PDATA SIZE = 10 ----
DATA SIZE = 14 ----
IDATA SIZE = ---- ----
BIT SIZE = 2 ----
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -