二、51单片机实现0到99计时

文章介绍了如何使用51单片机(具体型号为STC89C516RD+)通过编写程序来实现0到99秒的计时功能。代码中包含了计时器的设置、数字显示的位选控制以及延时函数,显示部分通过LED进行。程序通过不断循环更新当前时间,并在达到50秒时进行进位,形成0到99的秒表效果。
摘要由CSDN通过智能技术生成

二、51单片机实现0到99计时

  • 51单片机实现0到99计时
  • 51单片机设计0~99秒秒表_单片机程序设计
  • 51单片机时钟如何倒计时
  • 51单片机简易时钟的实现
  • 51单片机-定时器

文章转自:https://lingkang.top/archives/51-dan-pian-ji-shi-xian-0-dao-99-ji-shi

ps使用时钟频率,计时并不准确

单片机是普中STC89C516RD+

实现代码

#include <REGX52.H>

typedef unsigned int u16; // 对系统默认数据类型进行重定义
typedef unsigned char u8;

// 0~9数字
unsigned char numbers[] = {0x3F, 0x06, 0x5B, 0x4F, 0x66, 0x6D, 0x7D, 0x07, 0x7F, 0x6F};
sbit LSA                = P2 ^ 2;
sbit LSB                = P2 ^ 3;
sbit LSC                = P2 ^ 4;

void delay_10us(u16 ten_us)
{
    while (ten_us--)
        ;
}

void wz(u8 i) // 此显示位有8位
{
    switch (i) // 位选
    {
        case 0:
            LSC = 1;
            LSB = 1;
            LSA = 1;
            break;
        case 1:
            LSC = 1;
            LSB = 1;
            LSA = 0;
            break;
        case 2:
            LSC = 1;
            LSB = 0;
            LSA = 1;
            break;
        case 3:
            LSC = 1;
            LSB = 0;
            LSA = 0;
            break;
        case 4:
            LSC = 0;
            LSB = 1;
            LSA = 1;
            break;
        case 5:
            LSC = 0;
            LSB = 1;
            LSA = 0;
            break;
        case 6:
            LSC = 0;
            LSB = 0;
            LSA = 1;
            break;
        case 7:
            LSC = 0;
            LSB = 0;
            LSA = 0;
            break;
    }
}

void LED_draw(unsigned char position, number) // 每一帧进行绘制
{
    wz(position);         // LED的位置
    P0 = numbers[number]; // 显示数字 段选
    delay_10us(300);
    P0 = 0x00; // 消音
}

void main()
{
    u16 time = 0, currentNumber = 0;
    while (1) {
        if (currentNumber < 10)
            LED_draw(0, currentNumber % 10); // 个位
        else {
            LED_draw(0, currentNumber / 10); // 十位
            LED_draw(1, currentNumber % 10); // 个位
        }

        time++;
        if (time == 50) { // 用于控制间隔
            time = 0;
            currentNumber++;
            if (currentNumber == 100)
                currentNumber = 0; // reset number
        }
    }
}

效果

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-MKM1MvTa-1683029796737)(/upload/2023/05/image.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-kntk6kt3-1683029796738)(/upload/2023/05/image-1683029528073.png)]

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值