[精品书单]零基础开始学51单片机点流水灯

 

 

  • 还记得刚来大一那会对电子产品研究特感兴趣,后来就加入了学院里面的大学生科技协会的课题部,紧接着改变了我的大学生活,从此我就开始了对这方面的研究................当然一开始我们学的是用51来写流水灯,还没上手的C语言的我们随之就先自己焊接了自己的第一块板子流水灯
  • 后面又加进去了代码,虽然过程中遇到了许多的问题,比如虚焊,连错,但是后面还是成功的点亮了我的第一块单片机流水灯..............................
  • 让我认识到了好多,最小51系统板,还有各引脚的功能,来分享给你们的流水灯吧,从一灯大师开始学单片机

 

 

心形花样LED 流水灯(带程序)

 

 

  使用89C52做的,原理图如下:

 

 

总共有32LED灯,4I/O全部用上了。

我在这里不加有LED保护电阻,用200的也可以

晶振用12M的或11.0592M也行,C1,C230PF

PCB图如下:

 

 

作品效果录像:http://www.tudou.com/programs/view/z0bjKg_3Cd4/

 

程序是用C语言写的;

 

 

如下:

 

 1 #include<reg52.h>
 2 #include <intrins.h>
 3 #define    uint unsigned int
 4 #define    uchar unsigned char
 5 uchar code table[]={0xfe,0xfc,0xf8,0xf0,0xe0,0xc0,0x80,0x00}; // 逐个点亮0~7
 6 uchar code table1[]={0x7f,0x3f,0x1f,0x0f,0x07,0x03,0x01,0x00}; // 逐个点亮7~0
 7 uchar code table2[]={0x01,0x03,0x07,0x0f,0x1f,0x3f,0x7f,0xff}; // 逐个灭0~7
 8 uchar code table3[]={0x80,0xc0,0xe0,0xf0,0xf8,0xfc,0xfe,0xff}; // 逐个灭7~0
 9 
10 /***********************************************************/
11 void delay(uint t);    //延时
12 void zg(uint t,uchar a);//两边逐个亮
13 void qs(uint t,uchar a);//全部闪烁
14 void zgxh(uint t,uchar a);  // 逆时针逐个点亮
15 //void zgxh1(uint t,uchar a);  // 顺时针逐个点亮
16 void djs(uint t,uchar a);  //对角闪
17 void lbzgm(uint t,uchar a);//两边逐个灭
18 //void sszgm(uint t,uchar a); // 顺时针逐个灭
19 void nszgm(uint t,uchar a); // 逆时针逐个灭
20 void sztl(uint t,uchar a);//顺时逐个同步亮
21 void nztl(uint t,uchar a);//逆时逐个同步亮
22 void sztm(uint t,uchar a);//顺时逐个同步灭
23 void nztm(uint t,uchar a);//逆时逐个同步灭
24 void hwzjl(uint t,uchar a); //横往中间亮
25 void hwzjm(uint t,uchar a); //横往中间灭
26 //void swzjl(uint t,uchar a); //竖往中间亮
27 //void swzjm(uint t,uchar a); //竖往中间灭
28 void nzdl(uint t,uchar a); //逆时逐段亮
29 void nzdgl(uint t,uchar a);   //逆时逐段一个点亮
30 void jgs(uint t,uchar a);   //间隔闪
31 /**********************************************************/

 

下面是子函数代码部分

  1 void zg(uint t,uchar a)//两边逐个亮
  2 {
  3     uchar i,j;
  4       for(j=0;j<a;j++)
  5      {
  6            P0=P1=P2=P3=0xff;
  7           P0=0x7f;delay(t);
  8           for(i=0;i<7;i++)
  9           {
 10           P0=table1[i+1];
 11           P2=table1[i];
 12           delay(t);    
 13           }
 14           P2=0x00;P1=0xfe;
 15           delay(t);
 16 
 17           for(i=0;i<7;i++)
 18           {
 19               P1=table[i+1];
 20             P3=table1[i];
 21             delay(t);
 22           }
 23           P3=0x00;delay(t);
 24       }
 25 }
 26 
 27 
 28 void qs(uint t,uchar a)     //全部闪烁
 29 {
 30     uchar j;
 31     for(j=0;j<a;j++)
 32     {
 33        P0=P1=P2=P3=0xff;
 34        delay(t);
 35        P0=P1=P2=P3=0x00;
 36        delay(t); 
 37      }      
 38 }
 39 
 40 
 41 
 42 
 43 void zgxh(uint t,uchar a)  // 逆时针逐个点亮
 44 {
 45     uchar i,j;
 46     for (j=0;j<a;j++)
 47     {
 48         P0=P1=P2=P3=0xff;

 49         for (i=0;i<8;i++)
 50         {
 51             P0=table1[i];
 52             delay(t);
 53         }
 54         for(i=0;i<8;i++)
 55         {
 56             P1=table[i];
 57             delay(t);
 58         }
 59         for(i=0;i<8;i++)
 60         {
 61             P3=table[i];
 62             delay(t);
 63         }
 64         for(i=0;i<8;i++)
 65         {
 66             P2=table[i];
 67             delay(t);
 68         }
 69     }
 70 }
 71 
 72 void nszgm(uint t,uchar a) // 逆时针逐个灭
 73 {
 74     uchar i,j;
 75     for(j=0;j<a;j++)
 76     {
 77         P0=P1=P2=P3=0x00;
 78         for (i=0;i<8;i++)
 79         {
 80             P0=table3[i];delay(t);    
 81         }
 82         for (i=0;i<8;i++)
 83         {
 84             P1=table2[i];delay(t);    
 85         }
 86         for (i=0;i<8;i++)
 87         {
 88             P3=table2[i];delay(t);    
 89         }
 90         for (i=0;i<8;i++)
 91         {
 92             P2=table2[i];delay(t);    
 93         }
 94     }
 95 
 96 
 97 }
 98 void djs(uint t,uchar a)  //对角闪
 99 {
100     uchar j;
101     for(j=0;j<a;j++)
102     {
103         P0=P1=P2=P3=0xff;
104         P0=P3=0x00;
105         delay(t);
106         P0=P1=P2=P3=0xff;
107         P1=P2=0x00;
108         delay(t);

109     }
110     
111 }
112 
113 
114 void lbzgm(uint t,uchar a)//两边逐个灭
115 {
116       uchar i,j;
117       for (j=0;j<a;j++)
118       {
119           P0=P2=0x00;
120         P3=0x01;delay(t);
121         for(i=7;i>1;i--)
122         {
123             P1=table[i-1];P3=table1[i-2];
124             delay(t);
125         }
126         P1=0xfe;P3=0xff;delay(t);
127         P1=0xff;P2=0x01;delay(t);
128         for(i=7;i>1;i--)
129         {
130             P0=table1[i-1];
131             P2=table1[i-2];
132             delay(t);
133         }
134         P0=0x7f;P2=0xff;delay(t);
135         P0=0xff;delay(t);
136       }
137 }
138 
139 
140 void sztl(uint t,uchar a)//顺时逐个同步亮
141 {
142     uchar i,j;
143     for(j=0;j<a;j++)
144     {
145         P0=P1=P2=P3=0xff;
146         for(i=0;i<8;i++)
147         {
148             P0=table[i];
149             P1=P2=P3=table1[i];
150             delay(t);
151         }
152     }
153 }
154 
155 void nztl(uint t,uchar a)//逆时逐个同步亮
156 {
157     uchar i,j;
158     for(j=0;j<a;j++)
159     {
160         P0=P1=P2=P3=0xff;
161         for(i=0;i<8;i++)
162         {
163             P0=table1[i];
164             P1=P2=P3=table[i];
165             delay(t);
166         }
167     }
168 }
169 
170 void sztm(uint t,uchar a)//顺时逐个同步灭
171 {
172     uchar i,j;
173     for(j=0;j<a;j++)
174     {
175         P0=P1=P2=P3=0x00;
176         for(i=0;i<8;i++)
177         {
178             P0=table2[i];
179             P1=P2=P3=table3[i];
180             delay(t);
181         }
182     }
183 }
184 
185 
186 void nztm(uint t,uchar a)//逆时逐个同步灭
187 {
188     uchar i,j;
189     for(j=0;j<a;j++)
190     {
191         P0=P1=P2=P3=0xff;
192         for(i=0;i<8;i++)
193         {
194             P0=table3[i];
195             P1=P2=P3=table2[i];
196             delay(t);
197         }
198     }
199 }
200 
201 void hwzjl(uint t,uchar a) //横往中间亮
202 {
203     uchar i,j;
204     for (j=0;j<a;j++)
205     {
206         P0=P1=P2=P3=0xff;
207         for(i=0;i<8;i++)
208         {
209             P0=P2=P1=table1[i];
210             P3=table[i];delay(t);    
211         }
212     }
213 }
214 
215 void hwzjm(uint t,uchar a) //横往中间灭
216 {
217     uchar i,j;
218     for (j=0;j<a;j++)
219     {
220         P0=P1=P2=P3=0x00;
221         for(i=0;i<8;i++)
222         {
223             P0=P2=P1=table3[i];
224             P3=table2[i];delay(t);    
225         }
226     }
227 }
228 void nzdl(uint t,uchar a) //逆时逐段亮
229 {
230     uchar i,j;
231     for (j=0;j<a;j++)
232     {
233         P0=P1=P2=P3=0xff;
234         for(i=0;i<8;i++)
235         {
236             P0=table1[i];
237             delay(t);
238         }
239         P0=0xff;
240         for(i=0;i<8;i++)
241         {
242             P1=table[i];
243             delay(t);
244         }
245         P1=0xff;
246         for(i=0;i<8;i++)
247         {
248             P3=table[i];
249             delay(t);
250         }
251         P3=0xff;
252         for(i=0;i<8;i++)
253         {
254             P2=table[i];
255             delay(t);
256         }
257         P2=0xff;        
258     }
259 }
260 
261 
262 void nzdgl(uint t,uchar a)   //逆时逐段一个点亮
263 {
264     uchar i,j,k,l;
265     for (j=0;j<a;j++)
266     {
267         k=table1[0];
268         P0=k;l=table[0];
269         P1=P2=P3=l;delay(t);
270         for(i=0;i<8;i++)
271         {
272             k=_crol_(k,-1);
273             P0=k;
274             l=_crol_(l,1);
275             P1=P2=P3=l;
276             delay(t);
277         }
278     }
279 }
280 
281 
282 void jgs(uint t,uchar a)   //间隔闪
283 {
284     uchar j;
285     for (j=0;j<a;j++)
286     {
287         P0=0x55;P1=P2=P3=0xaa;
288         delay(t);
289         P0=0xaa;P1=P2=P3=0x55;
290         delay(t);    
291     }
292 }
子函数

主函数代码部分

  1 void main()
  2 {
  3     uchar i;
  4 
  5     while(1)
  6     {
  7      zg(100,1);             //两边逐个亮
  8      lbzgm(100,1);         //两边逐个灭
  9      jgs(300,10);
 10      djs(100,20);  //对角闪
 11 ////////////////////////////////////////////
 12     P1=P2=P3=0xff;
 13     for(i=0;i<3;i++)
 14     {
 15      P0=0x00;delay(800);
 16      P0=0xff;delay(800);
 17      }
 18      P0=0x00;
 19      for(i=0;i<3;i++)
 20     {
 21      P1=0x00;delay(800);
 22      P1=0xff;delay(800);
 23      }
 24      P1=0x00;
 25      for(i=0;i<3;i++)
 26     {
 27      P3=0x00;delay(800);
 28      P3=0xff;delay(800);
 29      }
 30      P3=0x00;
 31      for(i=0;i<3;i++)
 32     {
 33      P2=0x00;delay(800);
 34      P2=0xff;delay(800);
 35      }
 36      qs(500,3);
 37 
 38 
 39 
 40 /////////////////////////////////////////////
 41 
 42     for(i=0;i<6;i++)
 43     {
 44      zgxh(50,1);
 45      nszgm(50,1);
 46      }
 47     djs(100,20);  //对角闪
 48     for(i=0;i<3;i++)
 49     {
 50      zg(100,1);             //两边逐个亮
 51      lbzgm(100,1);         //两边逐个灭
 52     }
 53 
 54      qs(200,10);djs(100,50);
 55 
 56      for(i=0;i<5;i++)
 57      {
 58          sztl(200,1); //顺时逐个同步亮
 59         nztm(200,1);
 60          nztl(200,1);
 61         sztm(200,1); //顺时逐个同步灭
 62      }
 63      djs(300,10);  //对角闪
 64      nzdgl(300,10);   //逆时逐段一个点亮
 65      jgs(300,10);   //间隔闪
 66     for(i=0;i<3;i++)
 67     {
 68      zgxh(100,1);
 69      nszgm(100,1);
 70      }
 71 nzdl(200,3); //逆时逐段亮
 72    jgs(50,100);   //间隔闪
 73 nzdgl(50,40);   //逆时逐段一个点亮
 74     for(i=0;i<4;i++)
 75     {
 76      zg(100,1);qs(100,10);
 77      lbzgm(100,1);
 78     }
 79 //     djs(50,100);  //对角闪
 80      
 81         for(i=0;i<3;i++)
 82     {
 83      zgxh(100,1);
 84      nszgm(100,1);
 85      }
 86 
 87 
 88      djs(1000,10);
 89      for(i=0;i<10;i++)
 90      {
 91         hwzjl(200,1); //横往中间亮
 92         hwzjm(200,1); //横往中间灭
 93         }
 94      djs(300,10);  //对角闪
 95 for(i=0;i<5;i++)
 96     {
 97      zgxh(100,1);
 98      nszgm(100,1);
 99      }
100      djs(100,20);  //对角闪
101      zg(300,1);
102      lbzgm(300,1);
103 
104      for(i=0;i<5;i++)
105      {
106          sztl(200,1);  //顺时逐个同步亮
107         nztm(200,1);
108          nztl(200,1);
109         sztm(200,1); //顺时逐个同步灭
110      }
111      djs(500,20);  //对角闪
112      djs(100,30);  //对角闪
113      djs(50,50);  //对角闪
114 //     djs(10,100);  //对角闪
115      delay(1000);
116     }
117         
118 }
119 
120 
121 void delay(uint t)     
122 {
123     uint x,y;
124     for (x=t;x>0;x--)
125     {
126         for (y=120;y>0;y--);
127     }
128 }

 

 

 

因为89C52的容量有限,所以还有几个方式注释掉了。

posted @ 2016-12-25 19:10  邵运忠  阅读(456)  评论(1编辑  收藏  举报