📄 xqdz.lst
字号:
137 1 }
138
139
140 void main()
141 {
142 1 uchar i;
143 1 uint data_temp[3];
144 1 uint temp,temp1;
145 1 uchar hanzi;
146 1 uchar han;
147 1 uchar shift=1;
148 1 for(i=0;i<64;i++) disp_buff[i]=0xff;
149 1 T0_Set();
150 1 while(1){
151 2 for(hanzi=0;hanzi<22;hanzi++){ //最多显示多少个字
152 3 for(shift=0;shift<16;shift++){ //一个字移位16位
153 4 for(han=0;han<16;han++){ //一个字有16行数据
154 5 data_temp[0]=ziku_table[(hanzi*32)+(han*2)+1]*0x100 + ziku_table[(hanzi*32)+(han*2)];
155 5 data_temp[1]=ziku_table[((hanzi+1)*32)+(han*2)+1]*0x100 + ziku_table[((hanzi+1)*32)+(han*2)];
156 5 data_temp[2]=ziku_table[((hanzi+2)*32)+(han*2)+1]*0x100 + ziku_table[((hanzi+2)*32)+(han*2)];
157 5 /*
158 5 //左往右移动
159 5 temp = data_temp[0];
160 5 temp1 = data_temp[1];
161 5 for(i=shift;i>0;i--){
162 5 temp = (temp<<1) ;
163 5 if((temp1&0x8000)!=0) temp = temp + 0x0001;
164 5 temp1 = (temp1<<1);
165 5 }
166 5 disp_buff[han*4+3]=temp/0x100;
167 5 disp_buff[han*4+2]=temp%0x100;
168 5 //----------------------
169 5 temp = data_temp[1];
170 5 temp1 = data_temp[2];
171 5 for(i=shift;i>0;i--){
172 5 temp = (temp<<1) ;
173 5 if((temp1&0x8000)!=0) temp = temp + 0x0001;
174 5 temp1 = (temp1<<1);
175 5 }
176 5 disp_buff[han*4+1]=temp/0x100;
177 5 disp_buff[han*4]=temp%0x100;
178 5 */
179 5
C51 COMPILER V9.00 XQDZ 11/07/2012 12:01:55 PAGE 4
180 5 //右往左移动
181 5 temp = data_temp[0];
182 5 temp1 = data_temp[1];
183 5 for(i=shift;i>0;i--){
184 6 temp = (temp>>1) ;
185 6 if((temp1&0x0001)!=0) temp = temp + 0x8000;
186 6 temp1 = (temp1>>1);
187 6 }
188 5 disp_buff[han*4+1]=temp/0x100;
189 5 disp_buff[han*4+0]=temp%0x100;
190 5 //------------------------------
191 5 temp = data_temp[1];
192 5 temp1 = data_temp[2];
193 5 for(i=shift;i>0;i--){
194 6 temp = (temp>>1) ;
195 6 if((temp1&0x0001)!=0) temp = temp + 0x8000;
196 6 temp1 = (temp1>>1);
197 6 }
198 5 disp_buff[han*4+3]=temp/0x100;
199 5 disp_buff[han*4+2]=temp%0x100;
200 5 }
201 4 delay_1ms(200); //移位速度
202 4 }
203 3 }
204 2 }
205 1 }
206
207
208
209
210 void SLED_Disp() interrupt 1 using 3
211 {
212 1 uchar i;
213 1 uchar data_buff;
214 1 uchar temp;
215 1 uchar zishu;
216 1 uchar code Module_Quantity=2; //模块数量(意思是我的两个16*16的模块级联,也就相当于16*32)
217 1 uchar han;
218 1 TH0 = (65536-1000)/256; //中断初始值(更改后面的1000可以改变现实移动的速度快慢)
219 1 TL0 = (65536-1000)/256;
220 1 Latch_port = 0; //HC595锁定输出,避免数据传输过程中,屏数据变化从而显示闪烁
221 1 CLK_port = 0;
222 1 han=disp_han; //(disp_han为当前显示行)
223 1 for(zishu=Module_Quantity;zishu>0;zishu--){ //此语句代表两个模块循环扫描显示
224 2 temp = disp_han*Module_Quantity*2 + (zishu-1)*2+1; //扫描显示后一个模块的8行显示注意这条语句与下面temp
- = disp_han*Module_Quantity*2 + (zishu-1)*2;的区别
225 2 data_buff = disp_buff[temp];
226 2 for(i=0;i<8;i++){ //扫描显示后8行也就是8-16行
227 3 if((data_buff&0x80)!=0) DA_in_port = 1;
228 3 else DA_in_port = 0;
229 3 CLK_port = 1;
230 3 CLK_port = 0;
231 3 data_buff <<= 1;
232 3 }
233 2 temp = disp_han*Module_Quantity*2 + (zishu-1)*2; //扫描显示前一个模块的8行
234 2 data_buff = disp_buff[temp];
235 2 for(i=0;i<8;i++){ //扫面显示1-8行
236 3 if((data_buff&0x80)!=0) DA_in_port = 1;
237 3 else DA_in_port = 0; //时序问题自己可以参照一下芯片资料
238 3 CLK_port = 1;
239 3 CLK_port = 0;
240 3 data_buff <<= 1;
C51 COMPILER V9.00 XQDZ 11/07/2012 12:01:55 PAGE 5
241 3 }
242 2 }
243 1
244 1 EN_port = 1; //关屏显示,原理为使HC138输出全为1,从而三极管截止,点阵不显示
245 1 ABCD_port = (ABCD_port & 0x0f)|(han<<4); //HC138译码输出
246 1 Latch_port = 1; //允许HC595数据输出到Q1-Q8端口
247 1 EN_port = 0; //HC138输出有效,打开显示
248 1 Latch_port = 0; //锁定HC595数据输出
249 1
250 1 disp_han++; //显示下一行数据
251 1 if(disp_han>=16) disp_han=0;
252 1 }
253
254
255
256
257
258
259
260
261
262
263
264
265
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 664 ----
CONSTANT SIZE = 737 ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 65 8
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 + -