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

这篇具有很好参考价值的文章主要介绍了初学51单片机(STC89C52)一个倒计时显示器和大家分享。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

  想要实现倒计时显示器,首先得确定从哪个时间开始倒计时,这就需要写出一个计数的程序来,通过按键来控制需要的数,从而开始倒计时。我的开发板上用的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;//显示具体数字
}文章来源地址https://www.toymoban.com/news/detail-499660.html

到了这里,关于初学51单片机(STC89C52)一个倒计时显示器和大家分享的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 什么是STC89C52单片机

    STC89C52是一个低功耗,高性能CMOS 8位单片机,片内含8k Bytes ISP(In-system programmable)的可反复擦写10000次的Flash只读程序存储器,器件采用ATMEL公司的高密度、非易失性存储技术制造,兼容标准MCS-51指令系统及80C51引脚结构[1],芯片内集成了通用8位中央处理器和ISP Flash存储单元,功

    2024年02月13日
    浏览(15)
  • STC89C52RC单片机原理图详解

    目录 1、单片机整体模块 2、 LED模块 3、独立按键模块 4、数码管模块 5、LCD1602模块 6、矩阵按键模块​编辑 7、串口通信模块 8、LED点阵屏模块 单片机使用的是TTL电平(一种电平的规范),规定为0V为低电平,5V为高电平; 字母上有一横,意为低电平有效。 单片机上电时,所有

    2024年02月05日
    浏览(24)
  • 【mcuclub】STC89C52单片机最小系统讲解

        3.1、主芯片 STC89C52是STC公司生产的一种低功耗、高性能8位微控制器 器件参数: 1、增强型8051单片机,指令代码完全兼容传统8051 2、工作电压:5.5V~3.3V 3、工作频率范围:0~40MHz,实际工作频率可达48MHz 4、用户应用程序空间为8K字节(程序空间) 5、片上集成512 字节RAM(

    2024年02月03日
    浏览(44)
  • STC89C52单片机LCD1602显示屏介绍与代码演示

    LCD1602显示屏介绍 引脚介绍 内部结构框图  存储器  DDRAM储存器地址  CGRAM与 CGROM的地址 时序介绍 LCD1602快捷指令  LCD1602指令操作流程: 字符、字符串的显示  各种进制的数字显示 在LCD1602上显示十进制数字 在LCD1602上显示十六进制数字 在LCD1602上显示二进制数字 LCD1602(Liq

    2024年02月08日
    浏览(21)
  • 单片机STC89C52倒计时、数码管和蜂鸣器控制

    鱼弦:CSDN内容合伙人、CSDN新星导师、全栈领域创作新星创作者 、51CTO(Top红人+专家博主) 、github开源爱好者(go-zero源码二次开发、游戏后端架构 https://github.com/Peakchen) 单片机选用STC89C52,实现倒计时60秒,控制两个数码管分别显示时间的十位和个位;当计时完毕时,显示\\\"-”,

    2024年02月04日
    浏览(17)
  • 基于STC89C52单片机的温度控制系统设计方案与软硬件实现

    目录 摘要 I Abstract II 第一章 前言 1 1.1 温度控制系统设计发展历史及意义 1.2 温度控制系统的目的 1.3 温度控制系统完成的功能 第二章 总体设计方案 2.1 方案一 2.2 方案二 3.1 DS18B20简介 3.1.1DS18B20封装与引脚 3.1.2 DS18B20的简单性能 3.2 DS18B20的工作原理 3.3 DS18B20的测温原理 3.3.1 测

    2024年02月12日
    浏览(18)
  • STC89C52单片机利用DHT11温湿度模块以及HC-08蓝牙模块实现测量温湿度

    下面将介绍如何利用STC89C52单片机和DHT11温湿度模块以及HC-08蓝牙模块实现测量温湿度。以及各模块的使用方法。 利用DHT11温湿度模块测量温湿度,利用HC-08蓝牙模块将数据传到手机上。 1.1DHT11温湿度模块外观 1.2DHT11温湿度模块使用方法简介 1.2.1DHT11温湿度模块工作的过程 用户

    2024年02月02日
    浏览(23)
  • 基于单片机的智能循迹避障小车STC89C52红外对管L298N驱动PWM波控制速度

    wx供重浩:创享日记 对话框发送:单片机小车 免费获取完整无水印报告等 利用红外对管检测黑线与障碍物,并以STC89C52单片机为控制芯片控制电动小汽车的速度及转向,从而实现自动循迹避障的功能。其中小车驱动由L298N驱动电路完成,速度由单片机输出的PWM波控制。 1.1智能

    2023年04月22日
    浏览(23)
  • 89C52RC普中单片机

    资料下载 普中科技--各型号产品资料下载链接 - STM8单片机 - 普中开源电子分享网 - Powered by Discuz! (prechin.net) 2023-06-28  1.开发板    2.软件 keil,stc-isp。 1.点亮led 89C52RC芯片LED模块是P2口。       2.led1一秒闪烁  3.LED流水灯  4.独立按键控制led亮灭(按下key1亮,松手灭) 5.独立按键

    2024年02月11日
    浏览(21)
  • 基于AT89C52单片机的交通信号灯设计

    点击链接获取Keil源码与Project Backups仿真图: https://download.csdn.net/download/qq_64505944/87772657 源码获取 主要内容: 本次设计所提出的一种基于单片机技术的简易计算器的方案,能更好的解决计算机计算的问题,随着数字生活的到来,单片机在生活中越来越重要,它能将大量的逻辑功

    2024年02月10日
    浏览(23)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包