📄 main.lst
字号:
C51 COMPILER V7.50 MAIN 09/19/2008 13:23:34 PAGE 1
C51 COMPILER V7.50, COMPILATION OF MODULE MAIN
OBJECT MODULE PLACED IN F:\PROJECT\CPROJE~1\LED汉~1\CONTRO~1\MAIN.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE F:\PROJECT\CPROJE~1\LED汉~1\CONTRO~1\MAIN.C DB SB OE
line level source
1 #include "fun.h"
2 #include <ABSACC.H>
3 /************针对FM1808存储区的变量*******/
4 data uint BufAddr1; //范围:0X7800~0X7FFF(2KBytes)
5 //内容:存放从PC主机串口传来的数据
6 data uint BufCount1; //对从PC主机串口传来的数据计数
7 data uint BufAddr2; //范围:0X7000~0X7FFF(4KBytes)
8 //内容:存放点阵显示数据的字库地址
9 data uint BufCount2; //
10 data uint BufAddr3; //范围:0X0000~0X6FFF(28KBytes)
11 //内容:存放点阵显示的数据
12 data uint BufCount3; //
13
14 data uint T0Count; //UART有否超时的定时计数
15
16 bdata uchar Flag;
17 sbit FlagUART = Flag^0; //TRUE有串口中断,FALSE无串口中断
18 sbit FlagFont = Flag^1; //TRUE显示24*24字体,FALSE显示16*16字体
19 sbit FlagDisp = Flag^2; //TRUE滚动显示,FALSE只显示一屏
20
21 data uint TotalRow; //总共需显示的行数
22 data uint CurrentRow; //fm1808当前行
23 data uchar StartRow; //各显示单元的扫描起始行
24
25 data union
26 {ulong addr;
27 struct
28 {uchar nonaddr;
29 uchar p1;
30 uint p2p0;
31 }port;
32 }ziku;
33
34 /***************************************************************/
35
36 void kmg(void)
37 {KMG=0;
38 1 KMG=1;
39 1 }
40
41 void delay(uint i)
42 {while(i!=0)i--;
43 1 }
44
45 void t0_init(void)
46 {TMOD&=0xf0;
47 1 TMOD|=0x01; //定时器T0,方式1
48 1 TL0=0x00;
49 1 TH0=0x00;
50 1 TCON|=0x10; //TF1TR1TF0TR0IE1IT1IE0IT0;TR0=1
51 1 ET0=1;
52 1 EA=1;
53 1 }
54
55 void to_interrupt(void) interrupt 1 using 1
C51 COMPILER V7.50 MAIN 09/19/2008 13:23:34 PAGE 2
56 {TH0=0x00;
57 1 TL0=0x00;
58 1 if(++T0Count>20)
59 1 {FlagUART=FALSE;
60 2 TR0=0;
61 2 ET0=0;
62 2 ES=0;
63 2 }
64 1 }
65
66 void uart_init(void)
67 {PCON=0x00; //SMOD--------GF1GF0PDIDL=00000000;波特率未加倍
68 1 TMOD&=0x0f;
69 1 TMOD|=0x20; //定时器T1,方式2
70 1 TL1=0xfd; //波特率9600
71 1 TH1=0xfd;
72 1 SCON=0x50; //SM0SM1SM2RENTB8RB8TIRI=01010000B;串口方式1
73 1 TCON|=0x40; //TF1TR1TF0TR0IE1IT1IE0IT0;TR1=1
74 1 IP=0x10; //--------PSPT1PX1PT0PX0=00010000B;串口中断优先
75 1 ES=1;
76 1 EA=1;
77 1 }
78
79 void uart_interrupt(void) interrupt 4 using 2
80 {if(RI==1)
81 1 {if(!FlagUART)
82 2 {FlagUART=TRUE;
83 3 BufCount1=0;
84 3 BufAddr1=BUFHEAD1;
85 3 }
86 2 P1=CS;
87 2 XBYTE[BufAddr1++]=SBUF;
88 2 BufCount1++;
89 2 T0Count=0;
90 2 RI=0;
91 2 }
92 1 else TI=0;
93 1 }
94
95 uchar rd_fm1808(uint addr)
96 {P1=CS;
97 1 return(XBYTE[addr]);
98 1 }
99
100 void wr_fm1808(uint addr,uchar dat)
101 {P1=CS;
102 1 XBYTE[addr]=dat;
103 1 }
104
105 void blankfm1808(void)
106 {uint tempw;
107 1 tempw=0;
108 1 while(tempw<BUFHEAD1)
109 1 {wr_fm1808(tempw,0);
110 2 tempw++;
111 2 }
112 1 }
113
114 void hanzi_addr(uchar qm,uchar wm)
115 {ulong offset;
116 1 offset=(ulong)(wm-0xa1);
117 1 offset+=(ulong)((qm-0xb0)*94);
C51 COMPILER V7.50 MAIN 09/19/2008 13:23:34 PAGE 3
118 1 if(FlagFont)
119 1 {offset*=72;
120 2 offset+=BIG_FONT_HEAD;
121 2 ziku.port.p2p0=(uint)offset;
122 2 ziku.port.p1=(uchar)(offset>>16);
123 2 ziku.port.p1&=0X0F;
124 2 ziku.port.p1|=CS2;
125 2 }
126 1 else
127 1 {offset*=32;
128 2 offset+=SMALL_FONT_HEAD;
129 2 ziku.port.p2p0=(uint)offset;
130 2 ziku.port.p1=(uchar)(offset>>16);
131 2 ziku.port.p1&=0X0F;
132 2 ziku.port.p1|=CS1;
133 2 }
134 1 }
135
136 void half_addr(uchar qm,uchar wm)
137 {ulong offset;
138 1 offset=wm;
139 1 offset=(ulong)(qm-32);
140 1 if(FlagFont)
141 1 {offset*=72;
142 2 ziku.port.p2p0=(uint)offset;
143 2 ziku.port.p1=(uchar)(offset>>16);
144 2 ziku.port.p1&=0X0F;
145 2 ziku.port.p1|=CS2;
146 2 }
147 1 else
148 1 {offset*=32;
149 2 ziku.port.p2p0=(uint)offset;
150 2 ziku.port.p1=(uchar)(offset>>16);
151 2 ziku.port.p1&=0X0F;
152 2 ziku.port.p1|=CS1;
153 2 }
154 1 }
155
156 void full01_addr(uchar qm,uchar wm)
157 {ulong offset;
158 1 offset=(ulong)(wm-0xa1);
159 1 offset+=(ulong)((qm-0xa1)*94);
160 1 if(FlagFont)
161 1 {offset*=72;
162 2 ziku.port.p2p0=(uint)offset;
163 2 ziku.port.p1=(uchar)(offset>>16);
164 2 ziku.port.p1&=0X0F;
165 2 ziku.port.p1|=CS3;
166 2 }
167 1 else
168 1 {offset*=32;
169 2 offset+=FULL01_FONT16_HEAD;
170 2 ziku.port.p2p0=(uint)offset;
171 2 ziku.port.p1=(uchar)(offset>>16);
172 2 ziku.port.p1&=0X0F;
173 2 ziku.port.p1|=CS1;
174 2 }
175 1 }
176
177 void full03_addr(uchar qm,uchar wm)
178 {ulong offset;
179 1 offset=(ulong)(wm-0xa0);
C51 COMPILER V7.50 MAIN 09/19/2008 13:23:34 PAGE 4
180 1 offset+=(ulong)((qm-0xa3)*94);
181 1 if(FlagFont)
182 1 {offset*=72;
183 2 offset+=FULL03_FONT24_HEAD;
184 2 ziku.port.p2p0=(uint)offset;
185 2 ziku.port.p1=(uchar)(offset>>16);
186 2 ziku.port.p1&=0X0F;
187 2 ziku.port.p1|=CS3;
188 2 }
189 1 else
190 1 {offset*=32;
191 2 offset+=FULL03_FONT16_HEAD;
192 2 ziku.port.p2p0=(uint)offset;
193 2 ziku.port.p1=(uchar)(offset>>16);
194 2 ziku.port.p1&=0X0F;
195 2 ziku.port.p1|=CS1;
196 2 }
197 1 }
198
199 void wrzikuaddr(void)
200 {uchar tempb;
201 1 uint tempw;
202 1 tempw=BufAddr2+BufCount2++;
203 1 tempb=ziku.port.p1;
204 1 wr_fm1808(tempw,tempb);
205 1 tempw=BufAddr2+BufCount2++;
206 1 tempb=(uchar)(ziku.port.p2p0>>8);
207 1 wr_fm1808(tempw,tempb);
208 1 tempw=BufAddr2+BufCount2++;
209 1 tempb=(uchar)(ziku.port.p2p0);
210 1 wr_fm1808(tempw,tempb);
211 1 }
212
213 void wrbblank(void)
214 {uint tempw;
215 1 tempw=BufAddr2+BufCount2++;
216 1 wr_fm1808(tempw,BBLANKP1);
217 1 tempw=BufAddr2+BufCount2++;
218 1 wr_fm1808(tempw,BBLANKP2);
219 1 tempw=BufAddr2+BufCount2++;
220 1 wr_fm1808(tempw,BBLANKP0);
221 1 }
222
223 void wrsblank(void)
224 {uint tempw;
225 1 tempw=BufAddr2+BufCount2++;
226 1 wr_fm1808(tempw,SBLANKP1);
227 1 tempw=BufAddr2+BufCount2++;
228 1 wr_fm1808(tempw,SBLANKP2);
229 1 tempw=BufAddr2+BufCount2++;
230 1 wr_fm1808(tempw,SBLANKP0);
231 1 }
232
233 void code_analyse(void)
234 {uchar qm,wm;
235 1 FlagFont=FALSE; //默认为16*16字体
236 1 BufAddr2=BUFHEAD2;
237 1 BufCount2=0;
238 1 BufAddr1=BUFHEAD1;
239 1 while(BufCount1)
240 1 {kmg();
241 2 if(BufAddr1<(BufAddr2+100))
C51 COMPILER V7.50 MAIN 09/19/2008 13:23:34 PAGE 5
242 2 {break;
243 3 }
244 2 BufCount1--;
245 2 qm=rd_fm1808(BufAddr1++);
246 2 if(qm>=32&&qm<=126) //半角标点符号
247 2 {switch(qm)
248 3 {case ASCII_SF:if(BufCount2==0) //16*16
249 4 {wr_fm1808(BufAddr2,SFLAGFONT);
250 5 BufCount2++;
251 5 }
252 4 else if(!FlagFont)
253 4 {half_addr(qm,wm);
254 5 wrzikuaddr();
255 5 if(BufCount2>48)
256 5 {BufAddr2+=50;
257 6 BufCount2=0;
258 6 }
259 5 }
260 4 else
261 4 {while(BufCount2<=30)
262 5 {wrbblank();
263 6 }
264 5 BufAddr2+=50;
265 5 BufCount2=0;
266 5 }
267 4 FlagFont=FALSE;
268 4 break;
269 4 case ASCII_BF:if(BufCount2==0) //24*24
270 4 {wr_fm1808(BufAddr2,BFLAGFONT);
271 5 BufCount2++;
272 5 }
273 4 else if(FlagFont)
274 4 {half_addr(qm,wm);
275 5 wrzikuaddr();
276 5 if(BufCount2>30)
277 5 {BufAddr2+=50;
278 6 BufCount2=0;
279 6 }
280 5 }
281 4 else
282 4 {while(BufCount2<=48)
283 5 {wrsblank();
284 6 }
285 5 BufAddr2+=50;
286 5 BufCount2=0;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -