📄 lcm16864zk.lst
字号:
C51 COMPILER V7.06 LCM16864ZK 12/21/2006 15:22:27 PAGE 1
C51 COMPILER V7.06, COMPILATION OF MODULE LCM16864ZK
OBJECT MODULE PLACED IN D:\KEIL\调试程序\LCM16864ZK.OBJ
COMPILER INVOKED BY: D:\keil\C51\BIN\C51.EXE D:\KEIL\调试程序\LCM16864ZK.C DB SB OE
stmt level source
1 #include <absacc.h>
2 #include <reg51.h>
3 #include "main.h"
4 #define PRINTBYTE XBYTE[0x9FFF] //打印地址
5 #define WARNBYTE XBYTE[0x5FFF] //射频报警地址
6 #define LEDBYTE XBYTE[0X1FFF] //显示芯片地址
7 sbit BUSY=P3^2;
8 void main(void)
9 {
10 1 SP=0x30;
11 1
12 1 Delay_ms(2);
13 1 SystemInitial(); //系统初始化
14 1 while(1)
15 1 {
16 2
17 2 Delay_ms(10); //显示初始画面
18 2 ShowTime();
19 2 if(LKEY==0)
20 2 {
21 3 Delay_ms(10);
22 3 if(LKEY==0)
23 3 {
24 4 while(1){if(LKEY==1)break;}
25 4 ShScreen1();
26 4 DisplayInitial();
27 4
28 4 }
29 3 }
30 2
31 2 if(flag)
32 2 {
33 3 flag=0;
34 3 /* TH0=0X3C;
35 3 TL0=0XB0;
36 3 TMOD=0X01;
37 3
38 3 */
39 3 WarnDeal();
40 3 Delay_s(1);
41 3 DisplayInitial();
42 3 }
43 2
44 2 }
45 1 }
46
47 void SystemInitial(void) // 系统初始化程序
48 {
49 1 uchar i;
50 1
51 1 IE=0X95; //中断控制初始化
52 1 PCON=0Xa0;
53 1 SCON=0X90; //串行口波特率加倍
54 1 REN=1;
55 1 IT1=0;
C51 COMPILER V7.06 LCM16864ZK 12/21/2006 15:22:27 PAGE 2
56 1 P3=0XFF; //P1,P3口的第二的功能先输出1
57 1 for(i=0;i<=3;i++) //密码初始化为0000
58 1 CodeNum[i]=0;
59 1 //报警数据初始化
60 1 pdx=0x0100; //防抢设置向量地址
61 1 *pdx=0x00; // 向量数目
62 1 pdx=0x0200; //防盗设置向量首地址
63 1 *pdx=0x00;
64 1 pdx=0x0300; //放火设置向量首地址
65 1 *pdx=0x00;
66 1 pdx=0x0400; //报警发生存储向量首地址
67 1 *pdx=0x00;
68 1
69 1 RobDataInitial();
70 1 CalendarInitial(calen); //日历芯片初始化
71 1 BurstR1302(calen); //输入日历的初始值
72 1 ShowInitial(); //显示模块初始化
73 1 DisplayInitial(); //显示初始画面
74 1 }
75
76 void ShowInitial(void) //显示初始化
77 {
78 1 P2=0X1F;
79 1 Delay_ms(22); //delay > 40ms
80 1 //i=00110000B;
81 1 WritCommand(0x30); //function set
82 1 Delay_us(6); //delay > 100us
83 1
84 1 WritCommand(0x30); //function set
85 1 Delay_us(3); //delay > 37us
86 1
87 1 WritCommand(0x0c); //display set D=1 C=1 B=0
88 1 Delay_us(6); //>100us
89 1
90 1
91 1 WritCommand(0x01); //display clear
92 1 Delay_ms(7); //>10ms
93 1
94 1 //i=00000110B
95 1 WritCommand(0x06); //enter nod set
96 1 P2=0X0F;
97 1
98 1 }
99
100 void RobDataInitial(void)
101 {
102 1 pdx=0x0100;
103 1 *pdx=6;
104 1 pdx=0x0102;
105 1 *pdx=100;
106 1 pdx=0x0103;
107 1 *pdx=2;
108 1 RobNum=2; //最少与数
109 1 pdx++;*pdx=0x07; pdx++;*pdx=0x00; // 0111 高级
110 1 pdx++;*pdx=0x01;pdx++;*pdx=0x01;
111 1 pdx++;*pdx=0x04; pdx++;*pdx=0x00; // 0100 高级
112 1 pdx++;*pdx=0x02;pdx++;*pdx=0x01;
113 1 pdx++; *pdx=0x08; pdx++;*pdx=0x00; // 1000 高级
114 1 pdx++;*pdx=0x03;pdx++;*pdx=0x01;
115 1 pdx++; *pdx=0x02; pdx++;*pdx=0x00; // 0010 低级
116 1 pdx++;*pdx=0x04;pdx++;*pdx=0x00;
117 1 pdx++; *pdx=0x01; pdx++;*pdx=0x00; // 0001 低级
C51 COMPILER V7.06 LCM16864ZK 12/21/2006 15:22:27 PAGE 3
118 1 pdx++;*pdx=0x05;pdx++;*pdx=0x00;
119 1 pdx++; *pdx=0x0a; pdx++;*pdx=0x00; // 1010 低级
120 1 pdx++;*pdx=0x06;pdx++;*pdx=0x00;
121 1 pdx=0x0302;*pdx=0x0a;pdx=0x0300;*pdx=0x01;
122 1 }
123 /////////////////////////////////////////////////////延时程序 us ms s
124
125 void Delay_us(uchar i) //delay 8 * i us
126 {
127 1 uchar j;
128 1 for(j=0;j<i;j++);
129 1 }
130
131 void Delay_ms(uchar i) // delay i * 1000 us=i ms
132 {
133 1 uchar sum=125,j,k;
134 1 for(j=0;j<i;j++)
135 1 for(k=0;k<sum;k++);
136 1 }
137
138 void Delay_s(uchar i)
139 {
140 1 uint sum=125000,k;
141 1 uchar j;
142 1 for(j=0;j<i;j++)
143 1 for(k=0;k<sum;k++);
144 1
145 1 }
146
147 ///////////////////////////////////////////////////////
148 ////////////////////////////////////////////////////////LED显示程序
149 void WritCommand(uchar i) //写命令
150 {
151 1 // P2=0X1F;
152 1 Waitfree();
153 1 S_RS=0;
154 1 S_RW=0;
155 1 E=1; //E=1
156 1 /* P0 = i;
157 1 _WR=0;
158 1
159 1 _WR=1; */
160 1 LEDBYTE=i;
161 1 E=0; //E=0
162 1 // P2=0X0F;
163 1 }
164 //////////////////////////////////////////////////////////
165 void WritData(uchar i) //写数据
166 {
167 1 // P2=0X1F;
168 1 Waitfree();
169 1 S_RS=1;
170 1 S_RW=0;
171 1 E=1; //E=1
172 1 /* P0=i;
173 1 _WR=0;
174 1
175 1 _WR=1; */
176 1 LEDBYTE=i;
177 1 E=0;
178 1 // P2=0X0F;
179 1 }
C51 COMPILER V7.06 LCM16864ZK 12/21/2006 15:22:27 PAGE 4
180
181 void Waitfree(void) //送数据入LED芯片的等待程序,判断数据线是否忙
182 {
183 1 P0=0XFF;
184 1 S_RS=0;
185 1 S_RW=1;
186 1 _RD=0;
187 1 ACC=P0;
188 1 while(ACC7==1)
189 1 {
190 2 _RD=0;
191 2 P2=0X1F;
192 2 E=1;
193 2 ACC=P0;
194 2 // ACC=LEDBYTE;
195 2 E=0;
196 2 }
197 1 _RD=1;
198 1 S_RS=0;
199 1 S_RW=0;
200 1 }
201 ////////////////////////////////////////////////////////////
202 ////////////////////////////////////////////////////////////////
203
204 void DisplayInitial(void)
205 {
206 1 WritCommand(0x01); //显示初始画面
207 1 WritCommand(0x91);
208 1 WritData(0xBC);WritData(0xAF);WritData(0xB3);WritData(0xc9); //集成警务系统
209 1 WritData(0xbe);WritData(0xaf);WritData(0xce);WritData(0xf1);
210 1 WritData(0xcf);WritData(0xb5);WritData(0xcd);WritData(0xb3);
211 1 WritCommand(0x98);
212 1 WritData(0xc3);WritData(0xdc);WritData(0xc2);WritData(0xeb); //密码门
213 1 WritData(0xc3);WritData(0xc5);
214 1 WritCommand(0x89);
215 1 WritData(0xcf);WritData(0xe6);WritData(0xcc);WritData(0xb6); //湘潭大学研制
216 1 WritData(0xb4);WritData(0xf3);WritData(0xd1);WritData(0xa7);
217 1 WritData(0xd1);WritData(0xd0);WritData(0xd6);WritData(0xc6);
218 1 }
219
220 /////////////////////////////////////////////////////////////
221
222
223
224 /////////////////////////////////////////////////////////////////
225 ///////////////////////////////////////////////////////日历程序
226
227 void CalendarInitial(pcalen)//日历初始化程序
228 uchar pcalen[8];
229 {
230 1 uchar i;
231 1 BurstW1302(pcalen); //读日历,并送到pcalen[]中
232 1 i=Read1302(0x80);
233 1 i=i&0x7f; //ch=0
234 1 Writ1302(0x80,i); //起震,
235 1 }
236
237
238 void BurstR1302(pcalen) // 从1302读多字节,并存入日历数组中
239 uchar pcalen[8];
240 {
241 1 uchar i;
C51 COMPILER V7.06 LCM16864ZK 12/21/2006 15:22:27 PAGE 5
242 1 T_RST=0;
243 1 T_CLK=0;
244 1 T_RST=1;
245 1 RTInputByte(0xbf); //oxbf 时钟多字节读命令
246 1 for(i=0; i<8; i++)
247 1 {
248 2 *pcalen=RTOutputByte(); //读1BYTE的数据
249 2 pcalen++ ;
250 2 }
251 1 T_CLK=1;
252 1 T_RST=0;
253 1 }
254
255 ////////////////////////////////////////////////////////
256
257 void RTInputByte(udata) //向1302写入一字节的数据
258 uchar udata;
259 {
260 1 uchar i;
261 1 ACC=udata;
262 1 for(i=8;i>0;i--)
263 1 {
264 2 T_IO=ACC0;
265 2 T_CLK=1;
266 2 T_CLK=0;
267 2 ACC=ACC>>1;
268 2 }
269 1 }
270
271 /////////////////////////////////////////////////////
272 uchar RTOutputByte(void) //从1302读一字节的数据
273 {
274 1 uchar i;
275 1 for(i=8;i>0;i--)
276 1 {
277 2 ACC=ACC>>1;
278 2 ACC7=T_IO;
279 2 T_CLK=1;
280 2 T_CLK=0;
281 2
282 2 }
283 1 return(ACC);
284 1 }
285
286 //////////////////////////////////////////////////////
287
288 void Writ1302(uchar uAddr,uchar udata) //写1字节的数据入指定地址
289 {
290 1
291 1 T_RST=0;
292 1 T_CLK=0;
293 1 T_RST=1;
294 1 RTInputByte(uAddr); //先输入地址
295 1 RTInputByte(udata); //写数据
296 1 T_CLK=1;
297 1 T_RST=0;
298 1 }
299
300 //////////////////////////////////////////////////////
301
302 uchar Read1302(uchar uAddr) //从指定地址读出1字节数据
303 {
C51 COMPILER V7.06 LCM16864ZK 12/21/2006 15:22:27 PAGE 6
304 1 uchar udata;
305 1 T_RST=0;
306 1 T_CLK=0;
307 1 T_RST=1;
308 1 RTInputByte(uAddr); //写入地址
309 1 udata=RTOutputByte(); //读出数据
310 1 T_CLK=1;
311 1 T_RST=0;
312 1 return(udata);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -