📄 dzshowmode2.lst
字号:
C51 COMPILER V7.06 DZSHOWMODE2 01/16/2007 16:21:23 PAGE 1
C51 COMPILER V7.06, COMPILATION OF MODULE DZSHOWMODE2
OBJECT MODULE PLACED IN dzshowmode2.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE dzshowmode2.c BROWSE DEBUG OBJECTEXTEND
stmt level source
1 //************************************************
2 //在16×64的点阵显示屏上逐行向上移动显示中文汉字
3 //点阵码由串口输入,接收点阵码采用中断方式
4 //************************************************
5 #include "reg52.h"
6 #include "intrins.h"
7 #include "absacc.h"
8 #include <stdio.h>
9 #define nop _nop_()
10 #define uchar unsigned char
11 #define DELAY_VALUE 300
12
13 sbit h_clk=P1^3; //行 clk
14 sbit h_data=P1^6; //行 data
15 sbit h_str=P1^7; //行 str
16 sbit l_clk=P1^4; //列 clk
17 sbit l_data=P1^2; //列 data
18 sbit l_str=P1^5; //列 str
19 sbit h_oe=P1^0; //行 oe
20 int flag=0;
21 int EvRcv=0;
22 unsigned char rcvdata=0; //从串口存储解手的变量
23 int data_count=129;
24 int xdata xdata_count ;
25 uchar xdata word[2000] _at_ 0x0000;
26 int index=0;
27
28 uchar xdata * data pword; //指向字的指针
29
30 uchar xdata * data ptext;
31
32 void init() //清屏
33 {
34 1 int i;
35 1 P1=0xff;
36 1 P0=0x00;
37 1 h_data=1;
38 1 h_str=1;
39 1 h_clk=0;
40 1
41 1 for(i=0;i<32;i++)
42 1 {
43 2 nop;nop;
44 2 h_clk=!h_clk;
45 2 }
46 1
47 1 h_clk=0;
48 1 l_clk=0;
49 1 }
50
51 void initial() //系统初始化
52 {
53 1 IP=0x10; // 串行口定义为高优先级中断
54 1 IE=0x97; //CPU开放中断,允许串行口中断
55 1 TCON=0x05; //置中断触发方式为跳变触发
C51 COMPILER V7.06 DZSHOWMODE2 01/16/2007 16:21:23 PAGE 2
56 1 TMOD=0x20; //T1工作,8位定时器/计数器
57 1 PCON=0; //波特率选择
58 1 SCON=0x50;//串行口工作方式1,异步通信
59 1 TH1=0xFD; //定时时间为1ms
60 1 TL1=0xFD;
61 1 TR1=1; //允许T1启动计数
62 1 EA=1; //开中断
63 1
64 1 }
65 void delay(int i)
66 {
67 1 int j=0;
68 1 i=i*DELAY_VALUE;
69 1 while(j<i)j++;
70 1 }
71
72 void savedata(unsigned char a)
73 {
74 1 ptext[index]=a; //index=0
75 1 index++;
76 1 delay(150);
77 1 }
78
79 void input() //取点阵码
80 {
81 1 uchar t;
82 1 t=*pword;
83 1 if(t&0x01)
84 1 l_data=1;
85 1 else l_data=0;
86 1 l_clk=1;
87 1 l_clk=0;
88 1 if(t&0x02)
89 1 l_data=1;
90 1 else l_data=0;
91 1 l_clk=1;
92 1 l_clk=0;
93 1 if(t&0x04)
94 1 l_data=1;
95 1 else l_data=0;
96 1 l_clk=1;
97 1 l_clk=0;
98 1 if(t&0x08)
99 1 l_data=1;
100 1 else l_data=0;
101 1 l_clk=1;
102 1 l_clk=0;
103 1 if(t&0x10)
104 1 l_data=1;
105 1 else l_data=0;
106 1 l_clk=1;
107 1 l_clk=0;
108 1 if(t&0x20)
109 1 l_data=1;
110 1 else l_data=0;
111 1 l_clk=1;
112 1 l_clk=0;
113 1 if(t&0x40)
114 1 l_data=1;
115 1 else l_data=0;
116 1 l_clk=1;
117 1 l_clk=0;
C51 COMPILER V7.06 DZSHOWMODE2 01/16/2007 16:21:23 PAGE 3
118 1 if(t&0x80)
119 1 l_data=1;
120 1 else l_data=0;
121 1 l_clk=1;
122 1 l_clk=0;
123 1 }
124
125 void main()
126 {
127 1 int j=0,k=0;
128 1 int count=0;
129 1 int num;
130 1 int i=0,i1,i2,i3,i4;
131 1 int temp=384,temp1=1;
132 1 int flag1=0;
133 1 ptext = word;
134 1 initial();
135 1 init();
136 1 while(1)
137 1 {
138 2 if(flag==0)
139 2 {//if(flag)
140 3 for(num=0;num<((temp-1)/128+1)*16;num++)
141 3 {
142 4 pword=word;
143 4 for(i2=0;i2<16;i2++)
144 4 {//延时
145 5 for(i=0;i<16;i++)
146 5 {
147 6 h_data=0;
148 6 nop;
149 6 h_clk=!h_clk;
150 6 nop;
151 6 h_clk=!h_clk;
152 6 }
153 5 if(num<16)
154 5 {
155 6 for(j=0;j<=num;j++)
156 6 {
157 7 if(flag==1)
158 7 break;
159 7 h_oe=0;
160 7 pword=word+2*j;
161 7 for(i1=0;i1<4;i1++)
162 7 {
163 8 l_clk=0;
164 8 input();
165 8 pword++;
166 8 input();
167 8 pword=pword+31;
168 8 }
169 7 if(j==0)
170 7 {
171 8 h_clk=0;
172 8 h_data=1;
173 8 h_clk=!h_clk;
174 8 nop;nop;
175 8 h_clk=!h_clk;
176 8 h_data=0;
177 8 for(i3=0;i3<(30-2*num);i3++)
178 8 {
179 9 nop;nop;
C51 COMPILER V7.06 DZSHOWMODE2 01/16/2007 16:21:23 PAGE 4
180 9 h_clk=!h_clk;
181 9 }
182 8 }
183 7 else
184 7 {
185 8 h_data=0;
186 8 h_clk=!h_clk;
187 8 nop;nop;
188 8 h_clk=!h_clk;
189 8 }
190 7 h_oe=1;
191 7
192 7 for(i4=0;i4<100;i4++)
193 7 nop;
194 7 }//for j
195 6 }
196 5 else
197 5 {
198 6 for(j=0;j<=15;j++)
199 6 {
200 7 if(flag==1)
201 7 break;
202 7 h_oe=0;
203 7 if(num<32)
204 7 {
205 8 if(j<=15-(num-15))
206 8 pword=word+2*(j+num-15);
207 8 else
208 8 pword=word+128+2*(j-30+num);
209 8 }
210 7 else
211 7 {
212 8 if(j<=15-(num-31))
213 8 pword=word+128+2*(j+num-31);
214 8 else
215 8 pword=word+256+2*(j-46+num);
216 8 }
217 7 for(i1=0;i1<4;i1++)
218 7 {
219 8 l_clk=0;
220 8 input();
221 8 pword++;
222 8 input();
223 8 pword=pword+31;
224 8 }
225 7 if(j==0)
226 7 {
227 8 h_clk=0;
228 8 h_data=1;
229 8 h_clk=!h_clk;
230 8 nop;nop;
231 8 h_clk=!h_clk;
232 8 }
233 7 else
234 7 {
235 8 h_data=0;
236 8 h_clk=!h_clk;
237 8 nop;nop;
238 8 h_clk=!h_clk;
239 8 }
240 7 h_oe=1;
241 7
C51 COMPILER V7.06 DZSHOWMODE2 01/16/2007 16:21:23 PAGE 5
242 7 for(i4=0;i4<100;i4++)
243 7 nop;
244 7 }//for j
245 6 }
246 5 }//for i2
247 4 }//for num
248 3 break;
249 3 }//if(flag)
250 2 if(EvRcv) //是否收到串行数据的标志位
251 2 {
252 3 EvRcv=0;
253 3 flag1++;
254 3 if(count==0)
255 3 temp=rcvdata;
256 3 else if(count==1)
257 3 temp=rcvdata+temp*256;
258 3 else if(count==2)
259 3 temp1=rcvdata;
260 3 else
261 3 savedata(rcvdata);
262 3 count++;
263 3
264 3 if (count==temp+2)
265 3 {
266 4 flag=0;
267 4 count=0;
268 4 index=0;
269 4 h_oe=1;
270 4 }
271 3 }
272 2 }
273 1 }
274
275 void Rcv_INT (void) interrupt 4 using 0
276 {
277 1
278 1 if(RI)
279 1 {
280 2 h_oe=0;
281 2 ACC=SBUF;
282 2 rcvdata=ACC;
283 2 h_oe=0;
284 2 EvRcv=1;
285 2 RI=0;
286 2 flag=1;
287 2 }
288 1 }
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 1088 ----
CONSTANT SIZE = ---- ----
XDATA SIZE = 2 ----
PDATA SIZE = ---- ----
DATA SIZE = 13 20
IDATA SIZE = ---- ----
BIT SIZE = ---- ----
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -