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

本文记录了作者从大一开始接触电子科技,加入科技协会并学习51单片机的过程。初期通过焊接流水灯板子,初学C语言,尽管遇到虚焊和连线错误等挑战,最终成功点亮了单片机流水灯。
摘要由CSDN通过智能技术生成

还记得刚来大一那会对电子产品研究特感兴趣,后来就加入了学院里面的大学生科技协会的课题部,紧接着改变了我的大学生活,从此我就开始了对这方面的研究................当然一开始我们学的是用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 /**********************************************************/


     

    下面是子函数代码部分

  •  

    void zg(uint t,uchar a)//两边逐个亮
    {
        uchar i,j;
          for(j=0;j<a;j++)
         {
               P0=P1=P2=P3=0xff;
              P0=0x7f;delay(t);
              for(i=0;i<7;i++)
              {
              P0=table1[i+1];
              P2=table1[i];
              delay(t);    
              }
              P2=0x00;P1=0xfe;
              delay(t);
    
              for(i=0;i<7;i++)
              {
                  P1=table[i+1];
                P3=table1[i];
                delay(t);
              }
              P3=0x00;delay(t);
          }
    }
    
    
    void qs(uint t,uchar a)     //全部闪烁
    {
        uchar j;
        for(j=0;j<a;j++)
        {
           P0=P1=P2=P3=0xff;
           delay(t);
           P0=P1=P2=P3=0x00;
           delay(t); 
         }      
    }
    
    
    
    
    void zgxh(uint t,uchar a)  // 逆时针逐个点亮
    {
        uchar i,j;
        for (j=0;j<a;j++)
        {
            P0=P1=P2=P3=0xff;
            for (i=0;i<8;i++)
            {
                P0=table1[i];
                delay(t);
            }
            for(i=0;i<8;i++)
            {
           
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值