想要实现倒计时显示器,首先得确定从哪个时间开始倒计时,这就需要写出一个计数的程序来,通过按键来控制需要的数,从而开始倒计时。我的开发板上用的Key2,Key3,Key4,Key5这四个键,分别对应着加1,减1,乘2,开始计时四个功能。

通过加一,减一,乘2三个操作,可以较快地得到想要设置的数。然后将所得到的数显示在数码管上(我这里使用的是共阴数码管)。这样就可以实时地看到自己所设置的数,然后就可以开始计时了。

具体实现步骤:

1.定义所用到的端口

2.定义一个数组,里面装0~9这十个数(用于后边的数码管显示,所以需要转化为对应的段选),例如0,就写成0X3F

3.写一个计数的程序,通过按键实现计数,并且在按下时数码管同步显示。

4.写一个计时的程序。(用时钟)

4.打开时钟中断,开始计时,运行计时程序。

5,打开蜂鸣器,提示计时结束。

以下为源代码:

#include<reg52.h>

/******************************************
程序作用:倒计时显示器
实现步骤:1.输入数字
          2.开始倒计时
                    3.蜂鸣器响1s提示计时结束

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

sbit Key2=P3^4;
sbit Key3=P3^5;
sbit Key4=P3^6;
sbit Key5=P3^7;//定义按键端口

sbit wei1=P2^4;
sbit wei2=P2^5;
sbit wei3=P2^6;
sbit wei4=P2^7;//定义数码管端口

sbit bing=P2^3;//定义蜂鸣器端口

/********************定义数组******************/
int base[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
/********************定义数组******************/

/********************定义全局变量******************/
   int num;
   int time=0; 
   int time_1s=0;
   int qian;//千位数字
     int bai;//百位数字
   int shi;//十位数字
     int ge;//个位数字
/********************定义全局变量******************/

void xianshi();
void Time_begin();
int num_scp(int num);
int delay(int x);//函数声明

void main()
{
    
    num=0;
    /*************初始化端口*************/
    wei1=0;//第一位数码管
    wei2=0;//第二位数码管
    wei3=0;//第三位数码管
    wei4=0;//第四位数码管
    Key2=1;//加一开关
    Key3=1;//减一开关
    Key4=1;//乘二开关
    Key5=1;//计时开关
    /*************初始化端口*************/
    
    
    while(1){
        Key2=1;//加一开关
      Key3=1;//减一开关
      Key4=1;//乘2开关
      Key5=1;//开始计时
        
        
        if(Key2==0)
        {
            delay(10);
        while(Key2==1){num++;break;}
            
        }//按下Key2键   时间加1s
        
        
        if(Key3==0)
        {
            delay(10);
            while(Key3==1){num--;break;}
        }//按下Key3键   时间减1s
        
        
        if(Key4==0)
        {
            delay(10);
            while(Key4==1){num=num*2;break;}
        }//按下Key4键   时间乘2
        
        
        if(Key5==0)
        {
            delay(10);
            while(Key5==1)
            {
                Time_begin();
                while(1)
    {
        num_scp(time_1s);
        xianshi();
        if(time_1s==1){bing=0;delay(1000);bing=1;}
    }
           }
       }    //按下Key5键   开始计时
        
         
         
    
        while(1)
        {
            num_scp(num);
            xianshi();
            if(Key2==0||Key3==0||Key4==0||Key5==0){break;}
        }//显示设置的时间

}

}

/*****************************
定义函数num_scp
sc代表scanf;p代表put
函数作用:扫描数据并进行拆分
参数列表:x
*******************************/
int num_scp(int x)
{    
    qian=(x/1000)%10;//千位数字
    bai=(x/100)%10;//百位数字
    shi=(x/10)%10;//十位数字
    ge=x%10;//个位数字
    return 0;
}    
    
    
    
    /*****************************
定义函数delay
函数作用:延时x_ms
参数列表:x
*******************************/

int delay(int x)
{
  unsigned int time;
    time=9206*x-2;
    while(time--);
    return 0;//较粗略的延时函数,主要用于按键消抖,不可用于计时
}
    
    
    /*****************************
定义函数Timer0
函数作用:定时计数
参数列表:time time_1s
*******************************/
void Timer0() interrupt 1 using 1//准确的时钟,可用于计时
{
    TH0=0x4c;//定时器0装初值 定时50ms
    TH1=0x00;
    time++;
    if(time>=20)
    {
        if(time_1s==0){time_1s=num+1;}
        time_1s--;
        time=0;
    }
    
}
/*****************************
定义函数Time_begin
函数作用:开启定时计数器
参数列表:
*******************************/
void Time_begin(){
TMOD &=0xf0;//低四位全部置0 设置定时器0 方式1
    TMOD |=0x01;//最低位置1
    TH0=0x4c;//定时器0装初值 定时50ms
    TH1=0x00;
    
    TR0=1;//定时器0 启动计数
    ET0=1;//打开ET0 中断允许位
    EA=1;//打开总中断
}

/*****************************
定义函数显示
函数作用:数码管显示
参数列表:qian bai shi ge 
*******************************/
void xianshi(){
      P0=0x00;
    P0=base[qian];
        wei1=1;
        wei1=0;
        P0=base[bai];
        wei2=1;
        wei2=0;
        P0=base[shi];
        wei3=1;
        wei3=0;
        P0=base[ge];
        wei4=1;
        wei4=0;//显示具体数字
}

初学51单片机(STC89C52)一个倒计时显示器和大家分享相关推荐

  1. 【51单片机STC89C52】IO口模拟PWM控制SG90舵机

    一.PWM PWM ,英文名 Pulse Width Modulation ,是脉冲宽度调制缩写,它是通过对一系列脉冲的宽度进 行调制,等效出所需要的波形(包含形状以及幅值),对模拟信号电平进行数字编 ...

  2. 单片机c语言99秒倒计时,51单片机99秒倒计时C语言源程序

    51单片机99秒倒计时C语言源程序 51单片机实现数码管99秒倒计时,其实很简单,就是使用定时器中断来实现.目的就是学习怎样用单片机实现倒计时,从而实现一些延时控制类的东西,99秒只是一个例子,你完全 ...

  3. 51单片机数码管交通灯倒计时c语言,51单片机数码管倒计时模拟交通灯汇编程序...

    /********************************************************************** 51单片机数码管倒计时模拟交通灯汇编程序 LED数码管为 ...

  4. 物联网名词和MQTT解释,阿里云的教程:用51单片机做一个物联网温度计+远程开关

    https://mvp.aliyun.com/zhidao/1915 本章主要介绍物联网平台中相关的产品名词.明白名词说的是啥.两眼不慌慌.看看官方文档吧 concent   报文连接服务器      ...

  5. 利用51单片机制作一个秒表的详细过程

    利用51单片机制作一个秒表的详细过程 前面的话: 和很多朋友一样,在学51单片机的过程中我们肯定会涉及到制作一个秒表,牵涉到把单片机的多个部分组合起来使用,这对于我们初学者来说可能显得有些困难,我同大 ...

  6. 51单片机STC89C52点亮一个LED(IO口的位操作)

    51单片机点亮一个LED(IO口的位操作)STC89C52 程序源码 /*-----------------------包含头文件区域-------------------------*/ #incl ...

  7. 从0-1,用51单片机做一个积分计时器,以乒乓球为例

    前面可能有点啰嗦,可以直接跳到第四部分 一.设计目标 二.规则须知 (一)乒乓球计分规则 (二)乒乓球T2赛制 (三)乒乓球换位与交换场地 三.需求分析 1.计分功能 2.误触功能 3.满分功能 4. ...

  8. c51倒计时程序汇编语言,51单片机汇编程序:倒计时交通灯

    一个51单片机汇编语言的程序,要求就是红灯25秒,绿灯20秒,黄灯闪烁5秒. 很简单的要求,用下图电路即可实现: 全部程序如下: ;倒计时交通灯 ;四位共阳数码管 ;P0 接段码 ;P2.0123 接 ...

  9. 51单片机(STC89C52)的中断和定时器

    STC89C51/STC89C52 Timer 内部不带振荡源, 必须外接晶振 采用11.0592MHz,或22.1184MHz,可方便得到串口通讯的标准时钟. STC89和STC90系列为12T, ...

最新文章

  1. 各种Web漏洞测试平台
  2. 粒子滤波Matlab示例
  3. 【Linux】crontab 定时任务 遇到几个问题
  4. linux系统分两种更普遍的包,rpm和tar,这两种安装包如何解压与安装
  5. 用vbs往服务器发送文件,[转] Windows 下命令行/VBS脚本,发送带附件邮件.
  6. bootsect Linux,linux_bootsect选读.doc
  7. SpringSecurity Filter顺序
  8. 2021年广东高考各科成绩查询,2017年广东高考成绩五种查询方式一览
  9. 处置Linux下Oracle Tomcat 8080端口辩说
  10. 不使用服务器控件的ASP.NET
  11. android debug 签名,Android Studio中debug模式下使用release签名
  12. caffe目录结构 及 caffe源码文件说明
  13. windows关闭被占用的端口
  14. VS2019/MFC学习笔记之一(创建对话框工程并实现简单加法运算)
  15. itools 苹果录屏大师 java_itools录屏大师
  16. java 正则表达式匹配_Java 正则表达式匹配
  17. Telnet 详解 及命令使用
  18. 3. Vue入门实战教程之vue-element-admin初体验
  19. 7个人生工具:SWOT、PDCA、6W2H、SMART、WBS、时间管理、二八原则
  20. Ta,两年拿下了10亿美金

热门文章

  1. fgo梅林服务器维护,FGO:梅林池抽卡引发退游现象 国服没强卡真的不能玩?
  2. Glade CheckButton(CheckBox)控件的使用与Python的事件绑定
  3. Observability:我们该选 Beats 还是 Elastic Agents 来采集数据?
  4. 能翻译维吾尔语的软件有哪些?这几个可以用用看
  5. Maven+SSM框架项目实例
  6. 微信小程序后台服务怎么搭建
  7. PyQt5设计GUI(二)为程序设计图形界面
  8. 微盟电子商城网络交易系统——Day05【商品服务-平台属性、新增商品、商品管理、仓库管理】
  9. 微信小程序之语音识别+PHP后台处理
  10. 自动生成tag的快捷方式