📄 main.lst
字号:
C51 COMPILER V7.07 MAIN 09/15/2005 14:57:53 PAGE 1
C51 COMPILER V7.07, COMPILATION OF MODULE MAIN
OBJECT MODULE PLACED IN Main.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE Main.c LARGE OPTIMIZE(9,SPEED) BROWSE DEBUG OBJECTEXTEND
stmt level source
1 ///////////////////////////////////////////////////////////////////////////////
2 //
3 // Hopinfo Copyright.
4 //
5 // www.chinahopeinfo.com.cn
6 //
7 // 2005.04.26
8 //
9 // 审阅:黄平生
10 //
11 // 主程序,串口通信、菜单管理、中断管理、初始化
12 //
13 ///////////////////////////////////////////////////////////////////////////////
14
15 #include "Global.h"
16
17 ///////////////////////////////////////////////////////////////////////////////
18 // 控制器参数
19 struct Para
20 {
21 uchar Wiegand_format; // 1、韦根通信1 个字节,3 种选择,1~4
22 uchar Machine_addr; // 2、终端编号1 个字节,1~254
23 uchar Area_addr; // 3、终端区域编号1 个字节,1~240
24 uchar Secu_class; // 4、安全等级1 个字节,1~10
25 uchar Match_mode; // 5、匹配模式1 个字节,1~2
26 uchar Lock_para; // 6、锁控参数1 个字节,1~3
27 uchar Baudrate; // 7、串口速率1 个字节,1~6
28 };
29
30 union Para_u
31 {
32 uchar para_dat[7];
33 struct Para Actual_para;
34 }Para_ee; // 控制器参数
35
36 ///////////////////////////////////////////////////////////////////////////////
37 // 内部存储区变量 0~128字节
38 data uchar cur_time[15]; // 系统当前时间显示存储区 XXXX年XX月XX日XX时XX分XX秒星期X
39 data uchar time[10]; // 读取时钟存储区
40
41 // 中断或系统
42 data uchar pulse=0; // 蜂鸣次数
43 data uchar key; // 键盘值
44 data uint time_out; // 通用超时定时器
45 data uchar on_timer=10; // 蜂鸣开启时延
46 data uchar off_timer=5; // 蜂鸣关闭时延
47 data uchar second=217; // 秒中断计数
48 data uchar door_state; // 门控状态
49
50 // 显示
51 data uchar u8CursorX; // 光标X坐标列
52 data uchar u8CursorY; // 光标Y坐标行
53 data uchar cs; // 显示片选
54
55 // SPI通信包参数
C51 COMPILER V7.07 MAIN 09/15/2005 14:57:53 PAGE 2
56 data char User_id[6]; // 用户编号0~65534
57 data char groupclass; // 用户分组信息
58 data uchar checksum; // 校验和
59 data uchar testchecksum; // 接收到的校验和
60 data uchar MSG=0; // 信息号
61 data uchar CSH; // 校验和ASC高字节
62 data uchar CSL; // 校验和ASC低字节
63 data uint SOHptr; // SPI缓冲区头指针
64 data uint ETXptr; // ETX位置
65 data uint CommandLen; // 命令体长度
66
67 // 韦根通信和485通信地址
68 idata uchar laddr; // 地址低字节ASC码
69 idata uchar haddr; // 地址高字节ASC码
70 idata uchar areaaddr; // 分组地址
71 idata uchar decaddr; // 设备地址
72
73 // 韦根通信包参数
74 data ulong Wiegand_dat; // 韦根通信数据
75 data uchar Wiecnt_max; // 韦根通信长度
76 data uchar Wgnd_count; // 韦根数据位计数
77
78 bdata bit recv_end; // 韦根接收结束
79 bdata bit W_rec_end; // 韦根写记录结束
80 bdata bit Odd; // 韦根校验位
81 bdata bit Even;
82
83 bdata bit sec_flag=0; // 秒计数标志
84 bdata bit KP; // 按键按下状态
85 bdata bit KM; // 按键抬起状态
86 bdata bit reverse; // LCD底色显示控制
87 bdata bit HandwareErr=FALSE; // 指纹模块工作状态
88 bdata bit ack; // 时钟I2C总线通信应答状态
89 bdata bit maxtrans=FALSE; // 大/小数据传输状态
90 bdata bit user_pass=FALSE; // 用户比对是否通过标志
91
92 bdata bit tele_alarm_on; // 布控/撤控标志
93
94 bdata bit alram_on=TRUE; // 防拆报警布防
95 bdata bit alram_off=TRUE; // 防拆报警撤防
96
97 bdata bit managemode=FALSE; // 管理员比对操作
98
99 data uchar Menu_state=0; // 菜单当前状态
100
101 // 小数据量串口通信
102 data uint recv_ctr; // 接收数据终止指针
103 data uint trans_ctr; // 发送数据指针
104 data uint trans_size; // 发送数据大小
105
106 data uchar disp_buf[12]; // 显示缓冲区
107
108 data uchar esc_count; // ESC按键计数
109
110 bdata bit comm_ok; // 通信状态
111
112 ///////////////////////////////////////////////////////////////////////////////
113 // 内部存储区变量 128~256字节,其中系统用41字节
114
115 idata char matchmode; // 匹配模式
116 idata char lockmode; // 锁控方式
117 idata char wieformat; // 韦根格式
C51 COMPILER V7.07 MAIN 09/15/2005 14:57:53 PAGE 3
118 idata uchar baudrate; // 波特率
119 idata uint SOH_crt; // 数据包开始指针
120
121 idata char Start_user_id[6]; // 开始用户编号
122 idata char End_user_id[6]; // 终止用户编号
123 idata char Start_time[5]; // 开始时间
124 idata char End_time[5]; // 终止时间
125 idata char Security_level; // 安全等级0~4
126 idata char ManageClass; // 管理分类'M'管理用户'G'普通用户
127 idata char AppClass; // 应用分类'F'指纹用户'P'密码用户
128 idata char Password[7]; // 密码
129
130 ///////////////////////////////////////////////////////////////////////////////
131 // 外部存储区变量 256~1280字节
132 xdata uchar SPIbuf[BUFSIZE]; // SPI和串行通信缓冲区
133 xdata uchar RTrecord[MAX_REALREC_SIZE]; // 实时记录缓冲区
134 xdata uchar recv_buf[RCVBUFSIZE]; // 接收数据缓冲区
135 xdata uchar trans_buf[TRANSBUFSIZE];// 发送数据缓冲区
136 xdata char tele_code[12]; // 报警电话号码
137
138 ///////////////////////////////////////////////////////////////////////////////
139 // 中断1服务列程
140 // 10ms定时中断服务
141 ///////////////////////////////////////////////////////////////////////////////
142 void timer0_isr() interrupt 1
143 {
144 1 TR0=0;
145 1 TH0=0xb8;
146 1 TL0=0x00; // 10ms
147 1 TR0=1;
148 1
149 1 Rstwdt(); // 喂狗
150 1
151 1 kbscan(); // 键盘扫描
152 1
153 1 if(pulse) // 蜂鸣器鸣叫处理
154 1 {
155 2 if(on_timer>0)
156 2 {
157 3 speaker=0; // 开启蜂鸣
158 3 on_timer--;
159 3 }
160 2 else
161 2 {
162 3 speaker=1; // 蜂鸣器关闭
163 3 if(off_timer>0)off_timer--;
164 3 else
165 3 {
166 4 pulse--; // 鸣叫次数
167 4 on_timer=10; // 蜂鸣器鸣叫时间 10*10ms
168 4 off_timer=5; // 蜂鸣器关闭时间 5*10ms
169 4 }
170 3 }
171 2
172 2 }
173 1
174 1 if(time_out>0)time_out--; // 通用定时器
175 1
176 1 if(!(second--)) // 秒标志
177 1 {
178 2 second=217; // 2.17秒,避免秒节点对齐
179 2 sec_flag=1;
C51 COMPILER V7.07 MAIN 09/15/2005 14:57:53 PAGE 4
180 2 }
181 1 }
182
183 ///////////////////////////////////////////////////////////////////////////////
184 // 系统硬件初始化
185 ///////////////////////////////////////////////////////////////////////////////
186 void Init()
187 {
188 1 idata uint i;
189 1
190 1 // 缓冲区变量初始化
191 1 maxtrans=FALSE; // 缺省数据为小数据量传输模式
192 1 recv_ctr=0;
193 1 trans_ctr=0;
194 1 trans_size=0;
195 1
196 1 // 变量初始化
197 1 for(i=0;i<6;i++) User_id[i]=0;
198 1 for(i=0;i<6;i++) Start_user_id[i]=0;
199 1 for(i=0;i<6;i++) End_user_id[i]=0;
200 1 for(i=0;i<7;i++) Password[i]=0;
201 1 for(i=0;i<5;i++) Start_time[i]=0;
202 1 for(i=0;i<5;i++) End_time[i]=0;
203 1 for(i=0;i<12;i++) disp_buf[i]=0;
204 1 for(i=0;i<12;i++) tele_code[i]=0;
205 1
206 1 tele_alarm_on=FALSE;
207 1
208 1 door_state=0x0f; // 门控状态
209 1
210 1 esc_count=0;
211 1
212 1 KP=0;
213 1 KM=0;
214 1 Menu_state=Menu_top;
215 1
216 1 // 系统寄存器设置
217 1 T2CON=0x30; // 设置T2为波特率生成器
218 1 TH2 = 0xff ;
219 1 TL2 = 0xb8; // 波特率设为9600bps
220 1 RCAP2H=0xff;
221 1 RCAP2L=0xb8;
222 1 TR2 = 1; // 允许T2中断
223 1
224 1 SCON=0x50; // 设置串行口通信格式
225 1 TCON|=0x05;
226 1 TMOD=0x11; // 定时器T2设为8位自动重装,T0为16位定时器
227 1
228 1 TH0=0xb8;
229 1 TL0=0x00; // 10ms
230 1 TR0=1; // 允许T0中断
231 1
232 1 P0=0xff;
233 1 P1=0xff;
234 1 Dir=0; // 不允许485发送
235 1 backlt=0; // 打开背光
236 1 P2=0xff;
237 1 P3=0xff;
238 1 P4=0xff;
239 1
240 1 ET0=1; // 允许T0中断
241 1 IT0=1;
C51 COMPILER V7.07 MAIN 09/15/2005 14:57:53 PAGE 5
242 1 IT1=1;
243 1 EX0=1; // 开放INT0
244 1 EX1=1; // 开放INT1
245 1
246 1 PS=1; // 串口为低级中断
247 1
248 1 COMENABLE; // 允许串口中断
249 1 ENABLE; // 允许所有中断
250 1 }
251
252 ///////////////////////////////////////////////////////////////////////////////
253 // 系统硬件初始化
254 ///////////////////////////////////////////////////////////////////////////////
255 void main(void)
256 {
257 1 idata uchar i;
258 1 idata uchar temp;
259 1
260 1 reset:
261 1 KC1=0;KC2=0; // 按键硬件初始化
262 1
263 1 GLCD_LcdInit(); // 液晶屏初始化
264 1 backlt=0; // 打开背光
265 1 GLCD_ClearScreen ();
266 1 DispLogo(); // 显示公司信息
267 1
268 1 ParaInit(); // 系统参数初始化
269 1 Init(); // 系统设置初始化
270 1 pulse=1;
271 1
272 1 if(wieformat>0) // 门禁模式
273 1 W_init(); // 韦根通信初始化
274 1
275 1 Baud_Init(); // 波特率
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -