📄 zq9712驱动测试程序.lst
字号:
C51 COMPILER V8.02 ZQ9712驱动测试程序 06/03/2008 08:45:01 PAGE 1
C51 COMPILER V8.02, COMPILATION OF MODULE ZQ9712驱动测试程序
OBJECT MODULE PLACED IN ZQ9712驱动测试程序.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE ZQ9712驱动测试程序.c BROWSE DEBUG OBJECTEXTEND
line level source
1
2 /*晶振22.1184M,AT89S52*/
3 /*包含的库文件*/
4 #pragma small
5 #pragma CODE DEBUG SYMBOLS OBJECTEXTEND
6 //#include "..\includes\TypeDef.h"
7 #include <reg52.h>
8 #include <stdio.h>
9 #include <math.h>
10 #define uchar unsigned char
11 #define ulint unsigned long int
12 #define uint unsigned int
13 /***********************************************/
14 //uchar code color_data[8]={7,6,5,3,4,2,1,0};//黑,红,绿,蓝,黄,紫,青,白//阳码
15 uchar code color_data[8]={0,4,2,1,6,5,3,7};//黑,红,绿,蓝,黄,紫,青,白//阳码
16 /***************************************************/
17 /*定义颜色控制端口*/
18 sbit DIN_ZQ9712=P1^3;/*蓝线 ZQ9712的数据输入*/
19 sbit CKIN_ZQ9712=P1^2;/*绿线 ZQ9712的时钟*/
20 sbit LIN_ZQ9712=P1^1;/*红线 ZQ9712的数据锁存*/
21 sbit OEIN_ZQ9712=P1^0;/*黄线 ZQ9712的数据使能*/
22 uchar te=1;
23 /*********************延时函数*************
24 函数原型:void dely(ulint timepara);
25 功 能:延时等待,参数timepara为延时时间*/
26 void delay(ulint timepara)
27 {ulint mpara;
28 1 mpara=0;
29 1 do
30 1 {
31 2 mpara=mpara+1;
32 2 }
33 1 while (mpara!=timepara);
34 1 }
35 /*********************延时函数*************
36 函数原型:void dely(ulint timepara);
37 功 能:延时等待,参数timepara为延时时间*/
38 void delays(ulint timepara)
39 {ulint i;
40 1 for(i=0;i<timepara;i++)
41 1 {delay(207);//22.1184M ---207---0.005S=5ms
42 2 }
43 1 }
44
45 sbit DQX=P2^3;
46 sbit CLKX=P2^2;
47 sbit STBX=P2^1;
48 sbit ENX=P2^0;
49
50 sbit dig1=P0^3;
51 sbit dig2=P0^2;
52 sbit dig3=P0^1;
53 sbit dig4=P0^0;
54 uchar code xian_data[13]={0xFC,0x60,0xDA,0xF2,0x66,0xB6,0xBE,0xE0,0xFE,0xF6,0xEE,0x3E,0x9C};
55 /***************************************************/
C51 COMPILER V8.02 ZQ9712驱动测试程序 06/03/2008 08:45:01 PAGE 2
56 /*函数原型:void stb_data(void);
57 功 能:锁存有效*/
58 void stbx_data(void)
59 { STBX=0;
60 1 STBX=1;
61 1 delay(5);
62 1 STBX=0;
63 1 delay(5);
64 1 }
65 /*********************向由低位到高位发送一个像素的数据函数*************
66 函数原型:send_byte_lsbtomsb(uint8 bt);
67 功 能:向发送一个像素,参数bt为要发送的数据*/
68 void sendx( uchar bt1)
69 { uint i;
70 1 for(i=0;i<8;i++)
71 1 {CLKX = 0;//将时钟线置低
72 2 DQX =(bt1 & 0x01)?1:0;//判断当前位为1还是为0;当为1时将数据线置高;当为0时将数据线置低;
73 2 CLKX = 1;//将时钟线置高
74 2 bt1>>=1;//将当前数据右移一位,准备与0x01进行比较
75 2 }
76 1 }
77 void ledK(int n) //数码管显示及数据处理程序
78 { sendx(xian_data[n]);
79 1 stbx_data();
80 1 ENX=0;
81 1 dig1=0;dig2=0;dig3=0;dig4=1;
82 1 }
83
84
85 /*********************ZQ9712数据锁存函数*************
86 函数原型:void stb_data_ZQ9712(void);
87 功 能:ZQ9712数据锁存*/
88 void stb_data_ZQ9712(void)
89 { uchar i;
90 1 LIN_ZQ9712=1;
91 1 for(i=0;i<2;i++);
92 1 LIN_ZQ9712=0;
93 1 }
94 /*********************向由低位到高位ZQ9712发送一个像素的数据函数*************
95 函数原型:send_byte_lsbtomsb(uint8 bt);
96 功 能:向ZQ9712发送一个像素,参数bt为要发送的数据*/
97 void send_3bit_lsbtomsb( uchar bt1,det)
98 { uint i;
99 1 CKIN_ZQ9712 = 0;//将时钟线置低
100 1 //bt1=7-bt1;
101 1 for(i=0;i<3;i++)
102 1 {
103 2 DIN_ZQ9712 =(bt1 & 0x01)?1:0;//判断当前位为1还是为0;当为1时将数据线置高;当为0时将数据线置低;
104 2 CKIN_ZQ9712 = 1;//将时钟线置高
105 2 CKIN_ZQ9712 = 0;//将时钟线置低
106 2 bt1>>=1;//将当前数据右移一位,准备与0x01进行比较
107 2 }
108 1 if(det==1)
109 1 {OEIN_ZQ9712=1;
110 2 OEIN_ZQ9712=0;}
111 1 }
112 /*********************向ZQ9712发送N个某像素的函数*************
113 函数原型:void send_n_byte(n,bt);
114 功 能:向ZQ9712发送n个bt字节*/
115 void send_n_3bit(register uint k,uchar bt1,det)
116 {
117 1 while(k!=0)
C51 COMPILER V8.02 ZQ9712驱动测试程序 06/03/2008 08:45:01 PAGE 3
118 1 {
119 2 send_3bit_lsbtomsb(bt1,det);
120 2 k--;
121 2 }
122 1 }
123
124 //ZQ9712颜色跳变函数
125 //i是当前颜色的地址
126 //num有多少个像素点
127 tiaobian(uchar i,num,det)
128 {
129 1 send_n_3bit(num,color_data[i],1);
130 1 stb_data_ZQ9712();
131 1 if(det) delays(500);
132 1
133 1 }
134 liushui(uchar i,j,num)
135 {uchar k;
136 1 for(k=1;k<num+1;k++)
137 1 {
138 2 send_n_3bit(k,color_data[i],1);
139 2 send_n_3bit(num-k,color_data[j],1);
140 2 stb_data_ZQ9712();
141 2 delays(100);
142 2 }
143 1 }
144
145 /*******************************************渐变程序开始*************************************/
146 uchar Gradation_Counter =0;//定义当前灰度计数器
147 #define Gradation_level 16//定义灰度级
148 uchar Gradation_level_Counter =0;//定义灰度级计数器
149 #define Gradation_level_time_Constant 1000//每一级灰度的显示时间常数
150 ulint Gradation_level_time =0;//每一级灰度的显示时间计数器
151 bit Process_mark =0;// (最亮-最暗)与(最暗-最亮)两过程判断标志
152 bit Cycle_mark =1;//为0时表示经历了(最亮-最暗)到(最暗-最亮)的过程了
153 jianbian_camp()
154 { Gradation_level_Counter++;
155 1 if(Gradation_level_Counter==0xff)Gradation_level_Counter=0;
156 1 Gradation_level_time++;
157 1 if (Gradation_level_time==Gradation_level_time_Constant)
158 1 {
159 2 if(Process_mark==0)//最暗-最亮
160 2 {
161 3 Gradation_Counter++;
162 3 if(Gradation_Counter==Gradation_level)Process_mark=1;
163 3 }
164 2 else //最亮-最暗
165 2 {
166 3 Gradation_Counter--;
167 3 if(Gradation_Counter==1)
168 3 {
169 4 Process_mark=0;
170 4 Cycle_mark=0;
171 4 }
172 3 }
173 2 Gradation_level_time=0;
174 2 }
175 1 if(Gradation_level_Counter<Gradation_Counter) OEIN_ZQ9712=0; else OEIN_ZQ9712=1;
176 1 }
177 jianbian()
178 {uchar i=0;
179 1 Cycle_mark=0;
C51 COMPILER V8.02 ZQ9712驱动测试程序 06/03/2008 08:45:01 PAGE 4
180 1 while(1)
181 1 {
182 2 if(Cycle_mark==0)
183 2 {
184 3 ET0=0;
185 3 i++;
186 3 if((i==8)) break;
187 3 // if((i==8)||(te==0)) break;
188 3 send_n_3bit(3,color_data[i],0);
189 3 stb_data_ZQ9712();
190 3 Cycle_mark=1;
191 3 }
192 2 //if(te==0) break;
193 2 jianbian_camp();
194 2 }
195 1 }
196 uchar code composecolor_data2[4][3]={
197 {4,4,4}, //红
198 {6,6,6},
199 {3,3,3},
200 {2,2,2},
201 };
202 uchar code composecolor_data3[5][2]={
203 {4,4}, //红
204 {1,1},
205 {5,5},
206 {2,2},
207 {6,6},
208 };
209 uchar length=2; // 颜色数组 的列数
210 uchar width=5; // 颜色数组 的行数
211 uint list=80; //一行有多少个像素;
212 /******************************方案一***************************/
213 // N组多色彩追逐流水,颜色组合通过改变数组来实现
214 /****************************************************************/
215 void liushui_composecolor(uchar *p)
216 {
217 1 uint i,j,k;
218 1 uchar *m;
219 1 m=p;
220 1 for(k=0;k<list;k++)
221 1 {if(te==1)
222 2 {
223 3 for(i=0;i<width;i++)
224 3 {if(te==1)
225 4 {
226 5 for(j=0;j<5;j++)
227 5 { if(te==1)
228 6 {
229 7 p=m+i*length+j%length;
230 7 send_n_3bit(1,*p,1);
231 7 stb_data_ZQ9712();
232 7 delays(10);
233 7 //liangdu(levoe,500,2);
234 7 }else break;
235 6 }}else break;
236 4 }}else break;
237 2 }
238 1 }
239
240 /****主程序*******************/
241 void main(void)
C51 COMPILER V8.02 ZQ9712驱动测试程序 06/03/2008 08:45:01 PAGE 5
242 {uchar *p,i;
243 1 //OEIN_ZQ9712=0;//使能ZQ9712
244 1 OEIN_ZQ9712=1;
245 1 //OEIN_ZQ9712=0;
246 1 tiaobian(0,3,0);
247 1 while(1)
248 1 { i=0;
249 2 i++;
250 2 ledK(i);
251 2 length=2;
252 2 width=5;
253 2 p=&composecolor_data3[0][0];
254 2 //liushui_composecolor(p);
255 2 i++;
256 2 ledK(i);
257 2 tiaobian(1,3,1);
258 2 i++;
259 2 ledK(i);
260 2 tiaobian(2,3,1);
261 2 i++;
262 2 ledK(i);
263 2 tiaobian(3,3,1);
264 2 i++;
265 2 ledK(i);
266 2 tiaobian(4,3,1);
267 2 i++;
268 2 ledK(i);
269 2 tiaobian(5,3,1);
270 2 i++;
271 2 ledK(i);
272 2 tiaobian(6,3,1);
273 2 i++;
274 2 ledK(i);
275 2 tiaobian(7,3,1);
276 2 /*i++;
277 2 ledK(i);
278 2 tiaobian(0,3,1);
279 2 i++;
280 2 ledK(i);
281 2 liushui(0,1,3);
282 2 i++;
283 2 ledK(i);
284 2 liushui(0,2,3);
285 2 i++;
286 2 ledK(i);
287 2 liushui(0,3,3);
288 2 i++;
289 2 ledK(i);
290 2 liushui(0,4,3);
291 2 i++;
292 2 ledK(i);
293 2 liushui(0,5,3);
294 2 i++;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -