📄 xiugai.lst
字号:
C51 COMPILER V7.50 XIUGAI 11/27/2006 17:18:35 PAGE 1
C51 COMPILER V7.50, COMPILATION OF MODULE XIUGAI
OBJECT MODULE PLACED IN D:\1.2\XIUGAI.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE D:\1.2\XIUGAI.C DB SB OE
line level source
1 #include <reg51.h>
2 #include <intrins.h>
3 #include <string.h>
4 #define uchar unsigned char
5 #define ulong unsigned long
6 #define uint unsigned int
7 #define WriteDeviceAddress 0xae //define 21C02 Read address in IIC
8 #define ReadDviceAddress 0xaf //define 21C02 Write address in IIC
9 #define READ_JMY5xx 0xA1 //define IC Card Read address in IIC
10 #define WRITE_JMY5xx 0xA0 //define IC Card Write address in IIC
11 #define SUCCESS 0
12 #define NO_USER 0 //机器初始为无用户处于等待状态
13 #define USED 1 //有卡且为用户卡,机器的有用户状态
14
15
16 //***HD7279A指令******
17 #define CMD_RESET 0xa4
18 #define DECODE0 0x80
19 #define DECODE1 0xc8
20 #define CMD_READ 0x15
21 #define RTL_CYCLE 0xa3
22 #define RTR_CYCLE 0xa2
23 #define RTL_UNCYL 0xa1
24 #define RTR_UNCYL 0xa0
25 #define ACTCTL 0x98
26 #define SEGON 0xe0
27 #define SEGOFF 0xc0
28 #define BLINKCTL 0x88
29
30
31
32
33 //*变量及I/O口定义*
34
35 sbit cs=P1^2;
36 sbit clk=P1^1;
37 sbit dat=P1^0;
38 sbit key=P3^3;
39 sbit SCL=P1^5;
40 sbit SDA=P1^6;
41 sbit P1_4=P1^4; //控制继电器
42 sbit P3_2=P3^2; //RF模块自动寻卡时候的选通信号
43
44 bit flag = NO_USER; //机器初始状态标志位(无用户)
45 uchar code ComReadBlock2[]={0x0a,0x21,0x00,0x02,0xff,0xff,0xff,0xff,0xff,0xff}; //Read Block2;
46 uchar idata ComWriteBlock2[25] = {0x1a,0x22,0x00,0x02,0xff,0xff, 0xff, 0xff, 0xff,0xff,
47 0,2,0,5,4,6};
48
49 uchar code FengM[] = {0x03, 0x14, 0x2F} ;
50 uchar idata money[5];
51 uchar idata water[4];
52 uchar idata USERID[9]; //存储当前用户4位卡号及5位卡内余额
53 uchar idata moneypkh[2];
54 uchar idata Key[6];
55
C51 COMPILER V7.50 XIUGAI 11/27/2006 17:18:35 PAGE 2
56 uchar idata WriteBuffer[30];
57 uchar idata MissID[20];//掉电的卡号 //注意:MISSID[9]和MISSID[19]分别为掉电标志位
58 bit MissIDFlag; //设立一个总的掉电标志位,有掉电则为真,无掉电为假
59 bit MissIDStop; //当五组掉电写满时,机器不能运行
60
61 uchar i,k,xian,wei;
62 uint g;
63 uint j;
64 ulong water_value;
65 uint waterperkwh;
66 uint moneyperkwh;
67 ulong b;
68 ulong time; //三分钟延时的计数标志
69 ulong v;
70 ulong f; //掉电写ram的时间标志
71 signed long money_value; //卡上的余额
72 signed long c; //
73
74
75 void long_delay(void); //长延时
76 void short_delay(void); //短暂延时
77 void delay10ms(uchar); //延时十秒
78 void write7279(uchar,uchar); //写入到HD7279
79 void send_byte(uchar); //发送一个字节
80 void DisplayErrorCard(void); //display error card
81 void Write24c02(uchar ch,uchar address); //write data into 24c02
82 uchar Read24c02(uchar address); //read data from 24c02
83 uchar receive_byte(void); //接收一个字节
84 uchar JMY_TRANS(uchar idata *cTransceiveData); //
85 void DisplayCard(void);
86
87 //初始化计数器0**中断初始化
88 void clock0_initial() reentrant using 0 //初始化计数器0
89 {
90 1 TR0=0;
91 1 TMOD=0x05; //设置计数器0工作在计数状态,模式1
92 1 TCON=0x00;
93 1 TH0=0xff; //设置的计数初值(65506),每30个外部脉冲溢出
94 1 TL0=0xfa;
95 1 IE=0x82; //打开计数器0中断允许,开启中断
96 1 TR0=1; //启动计数器0
97 1 water_value=0; //每次用户使完后在下一个用户进入中断钱,水值清0
98 1 PT0=1; //定时/计数器0高优先级
99 1 }
100
101 //初始化定时器1
102 void clock1_initial() reentrant using 0 //初始化定时器1
103 {
104 1 TMOD=0x01; //设置定时器1工作在定时状态,模式1
105 1 TCON=0x00;
106 1 TH1=0x27; //延时60ms
107 1 TL1=0xfc;
108 1 IE=0x88; //中断允许
109 1 TR1=1; //启动定时器1
110 1 time=0;
111 1 }
112
113
114 //*****主函数
115 void main()
116 {
117 1 uchar idata cTransBuffer[30];
C51 COMPILER V7.50 XIUGAI 11/27/2006 17:18:35 PAGE 3
118 1 //uchar idata WriteBuffer[30];
119 1 //uchar idata MissID[20];//掉电的卡号 //注意:MISSID[9]和MISSID[19]分别为掉电标志位
120 1 //bit MissIDFlag; //设立一个总的掉电标志位,有掉电则为真,无掉电为假
121 1 //bit MissIDStop; //当五组掉电写满时,机器不能运行
122 1 time=0;
123 1 f=0;
124 1 g=0;
125 1 send_byte(CMD_RESET);
126 1 water_value=0;
127 1 P1_4=1; //关继电器
128 1 v=10*Read24c02(4)+Read24c02(5); //xx度电需要扣的钱数
129 1 for(i=0;i<=5;i++)
130 1 {
131 2 Key[i]=Read24c02(i+6); //读用户卡密码
132 2 }
133 1 for(i=0;i<=3;i++)
134 1 {
135 2 water[i]=Read24c02(i); //读水
136 2 }
137 1 //读掉电标志位
138 1 MissID[10]=Read24c02(30);
139 1 MissID[11]=Read24c02(40);
140 1 MissID[12]=Read24c02(50);
141 1 MissID[13]=Read24c02(60);
142 1 MissID[14]=Read24c02(70);
143 1 MissID[15]=Read24c02(80);
144 1 MissID[16]=Read24c02(90);
145 1 MissID[17]=Read24c02(100);
146 1 MissID[18]=Read24c02(110);
147 1 MissID[19]=Read24c02(120);
148 1 ///
149 1 MissIDFlag=MissID[10]||MissID[11]||MissID[12]||MissID[13]||MissID[14]||MissID[15]||MissID[16]||MissID
-[17]||MissID[18]||MissID[19];
150 1 MissIDStop=MissID[10]&&MissID[11]&&MissID[12]&&MissID[13]&&MissID[14]&&MissID[15]&&MissID[16]&&MissID
-[17]&&MissID[18]&&MissID[19];
151 1 ////////////////////////////////////////////
152 1 while(1)
153 1 {
154 2 /////第一组
155 2 if(MissID[10]==0)
156 2 {
157 3 if(f==2||g==1)
158 3 {
159 4 f=0;
160 4 g=0;
161 4 for(i=0;i<=8;i++)
162 4
163 4 {
164 5 Write24c02(USERID[i],i+21);
165 5 }
166 4 Write24c02(1,30); //掉电标志位有掉电则为1
167 4 }
168 3 }
169 2 /////第二组
170 2 else if(MissID[11]==0)
171 2 {
172 3 if(f==2||g==1)
173 3 {
174 4 f=0;
175 4 g=0;
176 4 for(i=0;i<=8;i++)
177 4 {
C51 COMPILER V7.50 XIUGAI 11/27/2006 17:18:35 PAGE 4
178 5 Write24c02(USERID[i],i+31);
179 5 }
180 4 Write24c02(1,40); //掉电标志位有掉电则为1
181 4 }
182 3 }
183 2 /////第三组
184 2 else if(MissID[12]==0)
185 2 {
186 3 if(f==2||g==1)
187 3 {
188 4 f=0;
189 4 g=0;
190 4 for(i=0;i<=8;i++)
191 4 {
192 5 Write24c02(USERID[i],i+41);
193 5 }
194 4 Write24c02(1,50); //掉电标志位有掉电则为1
195 4 }
196 3 }
197 2 //////第四组
198 2 else if(MissID[13]==0)
199 2 {
200 3 if(f==2||g==1)
201 3 {
202 4 f=0;
203 4 g=0;
204 4 for(i=0;i<=8;i++)
205 4 {
206 5 Write24c02(USERID[i],i+51);
207 5 }
208 4 Write24c02(1,60); //掉电标志位有掉电则为1
209 4 }
210 3 }
211 2 /////第五组
212 2 else if(MissID[14]==0)
213 2 {
214 3 if(f==2||g==1)
215 3 {
216 4 f=0;
217 4 g=0;
218 4 for(i=0;i<=8;i++)
219 4 {
220 5 Write24c02(USERID[i],i+61);
221 5 }
222 4 Write24c02(1,70); //掉电标志位有掉电则为1
223 4 }
224 3 }
225 2 /////第6
226 2 else if(MissID[15]==0)
227 2 {
228 3 if(f==2||g==1)
229 3 {
230 4 f=0;
231 4 g=0;
232 4 for(i=0;i<=8;i++)
233 4 {
234 5 Write24c02(USERID[i],i+71);
235 5 }
236 4 Write24c02(1,80); //掉电标志位有掉电则为1
237 4 }
238 3 }
239 2 /////第7
C51 COMPILER V7.50 XIUGAI 11/27/2006 17:18:35 PAGE 5
240 2 else if(MissID[16]==0)
241 2 {
242 3 if(f==2||g==1)
243 3 {
244 4 f=0;
245 4 g=0;
246 4 for(i=0;i<=8;i++)
247 4 {
248 5 Write24c02(USERID[i],i+81);
249 5 }
250 4 Write24c02(1,90); //掉电标志位有掉电则为1
251 4 }
252 3 }
253 2 /////第8
254 2 else if(MissID[17]==0)
255 2 {
256 3 if(f==2||g==1)
257 3 {
258 4 f=0;
259 4 g=0;
260 4 for(i=0;i<=8;i++)
261 4 {
262 5 Write24c02(USERID[i],i+91);
263 5 }
264 4 Write24c02(1,100); //掉电标志位有掉电则为1
265 4 }
266 3 }
267 2 /////第9
268 2 else if(MissID[18]==0)
269 2 {
270 3 if(f==2||g==1)
271 3 {
272 4 f=0;
273 4 g=0;
274 4 for(i=0;i<=8;i++)
275 4 {
276 5 Write24c02(USERID[i],i+101);
277 5 }
278 4 Write24c02(1,110); //掉电标志位有掉电则为1
279 4 }
280 3 }
281 2 /////第10
282 2 else if(MissID[19]==0)
283 2 {
284 3 if(f==2||g==1)
285 3 {
286 4 f=0;
287 4 g=0;
288 4 for(i=0;i<=8;i++)
289 4 {
290 5 Write24c02(USERID[i],i+111);
291 5 }
292 4 Write24c02(1,120); //掉电标志位有掉电则为1
293 4 }
294 3 }
295 2 ///////////////////////////////////////////////
296 2
297 2 if(flag==NO_USER&&time>18000)
298 2 {
299 3 ET1=0; //关闭定时器1中断
300 3 time=0;
301 3 memcpy(cTransBuffer,FengM,sizeof(FengM)); //设置蜂鸣器
C51 COMPILER V7.50 XIUGAI 11/27/2006 17:18:35 PAGE 6
302 3 JMY_TRANS(cTransBuffer);
303 3 P1_4=1; //关继电器
304 3 }
305 2 if(flag==USED)
306 2 {
307 3 if(money_value<0)
308 3 {
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -