经验首页 前端设计 程序设计 Java相关 移动开发 数据库/运维 软件/图像 大数据/云计算 其他经验
当前位置:技术经验 » 程序设计 » 编程经验 » 查看文章
51驱动四个1位数码管/*网上大都是驱动一个4位的数码管*/
来源:cnblogs  作者://球场Bug  时间:2024/7/12 18:27:32  对本文有异议

目的:51单片机驱动四个“1位”数码管;循环显示0、1、2、3~~~、99、100、1000、9999

哎!在网上找的很多方案是显示 0001、0002、0003~~~、0099、0100、1000、9999 而且还是”4“位的数码管

 

在公司实在无聊,花了半天时间写了V1.0版本代码,没错就是显示的0001、0002、0003~~~、0099、0100、1000、9999

在公司实在无聊,又花了半天时间写了V1.1版本代码,能够实现循环显示0、1、2、3~~~、99、100、1000、9999

/*******V1.0*******

编程人:刘利刊

时   间:2024年7月一个无聊的下午

*******************/

#include <reg51.h>
#include <intrins.h>                                     //延时函数需要的头文件
void Delay1000ms(void)                             //@12.000MHz延时函数1秒钟
{
        unsigned char data i, j, k;

        _nop_();
        i = 8;
        j = 154;
        k = 122;
        do
        {
                do
                {
                        while (--k);
                } while (--j);
        } while (--i);
}

int a,b,c;                                                              //定义循环需要的几个变量
int shi=0,bai=0,qian=0;                                       //十位、百位、千位默认显示数组的第一个元素0,    /*如果把第一个元素换成0XFF不显示,那进位后原本显示0的就不显示了,这里没找到好办法*/
int G[10] = {0xC0,0XF9,0XA4,0XB0,0X99,0X92,0X82,0XF8,0X80,0X90};                           //定义的数组显示0-9,10个数,


void main()
{
        for(a=0; a<=9; a++)
            {
                        for(b=0; b<=9; b++)
                            {               
                                         for(c=0; c<=9; c++)
                                             {       
                                               P3 = G[c];              //个位端口
                                               P2 = G[shi];           //十位端口
                                               P1 = G[bai];           //百位端口
                                               P0 = G[qian];         //千位端口
                                               Delay1000ms();
                                              }
                                         shi++;                         //个位显示一轮后十位+1显示
                                         if(shi == 10)               //判断十位是否加到9了,如果是则清零
                                           {
                                            shi = 0;
                                           }
                                }         
                                bai++;                                 //十位显示一轮后百位+1显示
                                if(bai == 10)                        //判断百位是否加到9了,如果是则清零
                                  {
                                   bai = 0;
                                  }
              }
              qian++;                                                 //百位显示一轮后千位+1显示
              if(qian == 10)                                        //判断千位是否加到9了,如果是则清零
               {
                 qian = 0;
               }
}

 

/*****************************
编程人:刘利刊
时  间:24年7月又一个无聊的下午

*****************************/
#include <reg51.h>

#include <intrins.h>    //延时需要的头文件
void Delay1000ms(void)        //@12.000MHz
{
        unsigned char data i, j, k;

        _nop_();
        i = 8;
        j = 154;
        k = 122;
        do
        {
                do
                {
                        while (--k);
                } while (--j);
        } while (--i);
}


int a,b,c,d,count=0;              
int shi=0,bai=0,qian=0;     //十位、百位、千位默认显示数组的第一个元素0,    /*如果把第一个元素换成0XFF不显示,那进位后原本显示0的就不显示了,这里没找到好办法*/
int G[11] = {0xff,0xC0,0XF9,0XA4,0XB0,0X99,0X92,0X82,0XF8,0X80,0X90};//定义的数组显示0-9,10个数,


void main()
{
        for(a=0; a<=9; a++)
           {
                        for(b=0; b<=9; b++)
                     {               
                                        for(c=0; c<=9; c++)
                                            {       
                                                         for(d=0; d<=9; d++)
                                                 {
                                                                    P3 = G[d+1];
                                                              P2 = G[shi];
                                                              P1 = G[bai];
                                                              P0 = G[qian];
                                                               Delay1000ms();
                                                              count ++;
                                                                                }
                                                         shi++;            //个位显示一轮后十位+1显示
                                             if(count == 10)   //count = 10的话就是第一次进位,第一次进位显示1
                                               {
                                                                  shi++;
                                               }
                                             if(shi == 11)     //判断十位是否加到9了,如果是则进位显示0
                                                     {
                                                                        shi = 1;
                                                     }
                                                         }
                                         bai++;                //十位显示一轮后百位+1显示
                             if(count == 100)      //count = 100的话就是第一次进位,第一次进位显示1
                                     {
                                                        bai++;
                                     }
                             if(bai == 11)         //判断百位是否加到9了,如果是则进位显示0
                                     {
                                                        bai = 1;
                                     }
                                        }         
                        qian++;                    //百位显示一轮后千位+1显示
                        if(count == 1000)          //count = 100的话就是第一次进位,第一次进位显示1
                    {
                                 qian++;
                    }
                        if(qian == 11)             //判断千位是否加到9了,如果是则进位显示0
                    {
                                 qian = 1;
                    }
           }
}

 

原文链接:https://www.cnblogs.com/LLKYYDS/p/18299185

 友情链接:直通硅谷  点职佳  北美留学生论坛

本站QQ群:前端 618073944 | Java 606181507 | Python 626812652 | C/C++ 612253063 | 微信 634508462 | 苹果 692586424 | C#/.net 182808419 | PHP 305140648 | 运维 608723728

W3xue 的所有内容仅供测试,对任何法律问题及风险不承担任何责任。通过使用本站内容随之而来的风险与本站无关。
关于我们  |  意见建议  |  捐助我们  |  报错有奖  |  广告合作、友情链接(目前9元/月)请联系QQ:27243702 沸活量
皖ICP备17017327号-2 皖公网安备34020702000426号