找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2784|回复: 4
打印 上一主题 下一主题
收起左侧

51单片机粗略60s倒计时数码管显示求教

[复制链接]
跳转到指定楼层
楼主
ID:720329 发表于 2020-4-26 23:37 来自手机 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
目前还没有学习定时中断,所以只能是粗略的60s倒计时数码管显示,下面是我自己编的程序,没有预期现象,还请各位大佬帮忙瞅瞅,感谢!
#include <reg51.h>
#define uint unsigned int
#define uchar unsigned char
void display(uint ge,uint shi);
void delay(uint z)
{
        uint a,b;
        for(a=z;a>0;a--)
        for(b=120;b>0;b--);
}
uchar table1[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
uint c,n,i,ge,shi;
sbit k1=P1^0;
void main()
{
        while(1)
        {
                c=0;
                n=60;
                if(k1==0) {c=1;}
                if(k1==0) delay(10);
                if(c==1)
                {
                        for(i=60;i>0;i--)
                        {
                        n- -;
                        display(ge,shi);//调用显示子函数
                        delay(1000);//延时一秒
                        }
                        if(n==0) n=0;
                        }
                }
    }
}
void display(uint ge,uint shi)//显示子函数
{
        ge=n%10;
        shi=n/10;
        P2=0xfe;
        P1=table1[ge];
        delay(5);
        P2=0xfd;
        P1=table1[shi];
        delay(5);
}
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:342451 发表于 2020-4-26 23:58 | 只看该作者
那就去学定时器,用软件延时函数太粗略了,或者用延时函数计算工具,计算出大概比较精确的延时函数,自己一点一点试,比较不好
回复

使用道具 举报

板凳
ID:720329 发表于 2020-4-27 07:31 来自手机 | 只看该作者
拜托了各位,这个是我们师傅布置的任务,不用中断定时怎么做
回复

使用道具 举报

地板
ID:332444 发表于 2020-4-27 09:27 | 只看该作者
用不用中断都一样,都是延时而已。可参https://blog.csdn.net/xianfajush ... rank_v2~rank_v25-19
回复

使用道具 举报

5#
ID:213173 发表于 2020-4-27 14:11 | 只看该作者
用控制主循环周期的60s倒计时程序示例+仿真


  1. #include <reg51.h>
  2. #define uint unsigned int
  3. #define uchar unsigned char
  4. sbit k1=P3^0;
  5. uchar table1[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
  6. uint n;
  7. uchar c=0,i=0,sec=0;
  8. bit j;
  9. void delay(uint z)
  10. {
  11.         uint a,b;
  12.         for(a=z;a>0;a--)
  13.                 for(b=119;b>0;b--);
  14. }

  15. void display()//显示子函数
  16. {
  17.         P1=0x00;//消隐
  18.         P2=0xfe;//送个位位码
  19.         P1=table1[sec%10];//送个位段码
  20.         delay(1);//延时一毫秒
  21.         P1=0x00;//消隐
  22.         P2=0xfd;//送十位位码
  23.         P1=table1[sec/10];//送十位段码
  24.         delay(1);//延时一毫秒
  25. }

  26. void main()
  27. {
  28.         while(1)//主循环周期约2ms
  29.         {               
  30.                 if(k1==0)
  31.                 {
  32.                         if(++i==10 && j==0)//计数消抖与判断按键状态
  33.                         {
  34.                                 j=1;//记忆按键状态
  35.                                 c++;
  36.                                 if(c==1)//开始倒计时
  37.                                 {
  38.                                         sec=60;
  39.                                         n=0;
  40.                                 }
  41. //                                if(c==2)//暂停
  42.                                 if(c==3)//清0
  43.                                 {
  44.                                         c=0;       
  45.                                         sec=0;
  46.                                 }
  47.                         }
  48.                 }
  49.                 else //按键松手
  50.                 {
  51.                         i=0;
  52.                         j=0;
  53.                 }
  54.                 if(c==1)//允许倒计时
  55.                 {
  56.                         n++;
  57.                         if(n>=500)//1秒
  58.                         {
  59.                                 n=0;
  60.                                 if(sec>0)
  61.                                         sec--;
  62.                                 if(sec==0)
  63.                                         c=0;
  64.                         }
  65.                 }
  66.                 display();//调用显示子函数
  67.         }
  68. }
复制代码





回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表