led1.lst
来自「该程序可以实现用595与154结合51单片机的16*32LED点阵左右滚动。」· LST 代码 · 共 382 行 · 第 1/3 页
LST
382 行
C51 COMPILER V8.05a LED1 03/26/2009 12:14:40 PAGE 3
116 1 res0=1;
117 1 res0=0;
118 1 }
119 void main(void)
120 {
121 1 unsigned char n=0,l=0,k=0,m=0,h=0,sp=10;
122 1 bit num=0,wd=0,time=0,open=1;
123 1 //ds1302();
124 1 pc_init();
125 1 oe=0;
126 1 do
127 1 {
128 2 if(P1_0==0) //左移,右移
129 2 {
130 3 num=~num;
131 3 wd=0;
132 3 time=0;
133 3 open=1;
134 3 while(!P1_0);
135 3 }
136 2 if(P1_1==0) //温度显示
137 2 {
138 3 wd=1;
139 3 time=0;
140 3 open=0;
141 3 while(!P1_1);
142 3 }
143 2 if(P1_2==0) //时钟显示
144 2 {
145 3 time=1;
146 3 wd=0;
147 3 open=0;
148 3 while(!P1_2);
149 3 }
150 2 if(P1_3==0) //串口通行
151 2 {
152 3 printf("现在温度是%d%d度\n现在时刻是%d%d%时d%d%分%d%d秒\n",x,y,hour[1],hour[0],min[1],min[0],second[1],
-second[0]);
153 3 open=0;
154 3 while(!P1_3);
155 3 }
156 2 if(time) //显示时钟
157 2 {
158 3 dsplay_ds1302(); //读取时钟
159 3 for(l=0;l<30;l++)
160 3 {
161 4 for(n=0;n<16;n++) //扫16行
162 4 {
163 5 oe=1;
164 5 P0=(P0&0xf0)|n;
165 5 write_595(tab[n+16*min[1]]);
166 5 write_595(tab[n+16*min[0]]);
167 5 write_595(tab[n+16*second[1]]);
168 5 write_595(tab[n+16*second[0]]);
169 5 oe=0;
170 5 delay();
171 5 }
172 4 }
173 3 }
174 2 if(wd==0&&time==0&&open==0) //主界面good
175 2 {
176 3 for(l=0;l<30;l++)
C51 COMPILER V8.05a LED1 03/26/2009 12:14:40 PAGE 4
177 3 {
178 4 for(n=0;n<16;n++) //扫16行
179 4 {
180 5 oe=1;
181 5 P0=(P0&0xf0)|n;
182 5 write_595(tab[n+16*15]);
183 5 write_595(tab[n+16*16]);
184 5 write_595(tab[n+16*16]);
185 5 write_595(tab[n+16*13]);
186 5 oe=0;
187 5 delay();
188 5 }
189 4 }
190 3 }
191 2 if(wd) //温度显示
192 2 {
193 3 wd_t();
194 3 for(l=0;l<30;l++)
195 3 {
196 4 for(n=0;n<16;n++) //扫16行
197 4 {
198 5 oe=1;
199 5 P0=(P0&0xf0)|n;
200 5 write_595(tab[n+16*x]);
201 5 write_595(tab[n+16*y]);
202 5 write_595(tab[n+16*14]);
203 5 write_595(tab[n+16*12]);
204 5 oe=0;
205 5 delay();
206 5 }
207 4 }
208 3 }
209 2 if(num&&wd==0&&time==0&&open==1) //左移数字字母
210 2 {
211 3 for(m=0;m<10;m++)
212 3 {
213 4 for(k=0;k<8;k++)
214 4 {
215 5 for(l=0;l<sp;l++)
216 5 {
217 6 for(n=0;n<16;n++) //扫16行
218 6 {
219 7 oe=1;
220 7 P0=(P0&0xf0)|n;
221 7 write_595((tab[n+16*m]<<k)|(tab[n+16*(m+1)]>>(8-k)));
222 7 write_595((tab[n+16*(m+1)]<<k)|(tab[n+16*(m+2)]>>(8-k)));
223 7 write_595((tab[n+16*(m+2)]<<k)|(tab[n+16*(m+3)]>>(8-k)));
224 7 write_595((tab[n+16*(m+3)]<<k)|(tab[n+16*(m+4)]>>(8-k)));
225 7 oe=0;
226 7 delay();
227 7 if(P1_0==0)
228 7 {
229 8 num=1;
230 8 wd=0;
231 8 time=0;
232 8 open=0;
233 8 break;
234 8 }
235 7 if(P1_3==0)
236 7 {
237 8 sp=sp+5;
238 8 if(sp==40) sp=5;
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?