做一个单片机程序,实现数码管动态显示15秒的倒计时

做一个单片机程序,实现数码管动态显示15秒的倒计时,第1张

51单片机的15秒倒计时是比较简单的。
至于显示就更简单了。因为你使用的是数码管。所以不需要设置字模块。另外观看电路发现是使用译码器的。就更简单了。至于程序。网上搜素。会有一大把。至于用不用中断。完全看你的需要。如果只是单纯的倒计时是可以不用的最。

这个和代码顺序有关系:

    while (1)
    {
        if (flag1s == 1)  //判断1秒定时标志
        {
            flag1s = 0;   //1秒定时标志清零
            sec--;        //秒计数自减1这里是先减一,后面再送显示
            //将sec按十进制位从低到高依次提取到buf数组中
            buf[0] = sec%10;
            buf[1] = sec/10%10;
            buf[2] = sec/100%10;
            buf[3] = sec/1000%10;
            buf[4] = sec/10000%10;
            buf[5] = sec/100000%10;
            //从最高为开始,遇到0不显示,遇到非0退出循环
         }
    }
如果初值要改为999999,代码可以改成如下:    while (1)
    {
        if (flag1s == 1)  //判断1秒定时标志
        {
            flag1s = 0;   //1秒定时标志清零
           // sec--;        //秒计数自减1屏蔽
            //将sec按十进制位从低到高依次提取到buf数组中
            buf[0] = sec%10;
            buf[1] = sec/10%10;
            buf[2] = sec/100%10;
            buf[3] = sec/1000%10;
            buf[4] = sec/10000%10;
            buf[5] = sec/100000%10;
            sec--;        //秒计数自减1这里是先送显示,后面再减一 
            //从最高为开始,遇到0不显示,遇到非0退出循环
       }
    }

我想看看你写的程序!可以就发我一下你的代码和你的那个硬件图吧。

然后下面这个程序你可以参考一下。是符合我的硬件图的。

#include <reg51h>

unsigned char table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};

void show(unsigned char n);

void delay(unsigned int k);

void main()

{

unsigned char i;

int j;

while(1)

{

for(i=60;j=60,i>0;i--)

while(j--)

show(i);

}

}

void show(unsigned char n)

{

P0=table[n%10];

P1=0x01;

delay(10);

P1=0xFF;

P0=table[n/10];

P1=0x02;

delay(10);

P1=0xFF;

}

void delay(unsigned int k)

{

unsigned char i,j;

for(i=0;i<100;i++)

for(j=0;j<k;j++);

}

大体思路!
a;先要写好0、1、2、3、4、5、6、7、8、9数字在七段数码管显示的数据表程序
b;写好60每秒减一直到零的程序,然后写要接位程序(30-1)
c:写好将每次数字变化后的数字经过a; 输出到七段数码管显示


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/13401547.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-07-29
下一篇 2023-07-29

发表评论

登录后才能评论

评论列表(0条)

保存