01数码管动态显示

需求:数码管显示100 - 0,到0停止;

Int_DigitalTube.h 代码如下:

#ifndef __INT_DIGITALTUBE_H__
#define __INT_DIGITALTUBE_H__
#include <STC89C5xRC.H>
#include "Com_Util.h"

/**
 * @brief 第 n 个数码管 显示 num
 * 
 * @param n 第几位
 * @param num 显示数字
 */
static void Int_DigitalTube_DisplaySingle(u8 n, u8 num);

/**
 * @brief 缓存中存入数码管显示的值
 * 
 * @param num 数值
 */
void Int_DigitalTube_DisplayNum(unsigned long num);


/**
 * @brief 刷新显示
 * 
 */
void Int_DigitalTube_Refresh();

#endif

Int_DigitalTube.c 代码如下:

#include <Int_DigitalTube.h>

// 数码管显示缓存
static u8 s_buffer[8];

// 数字0-9的编码
static char s_digital_codes[10] = { 0x3F,  0x06,  0x5B,  0x4F,  0x66, 0x6D, 0x7D,  0x07,  0x7F,  0x6F};


//刷新显示
void Int_DigitalTube_Refresh(){
	u8 i;
	for(i = 0; i < 8; i++){
		Int_DigitalTube_DisplaySingle(i, s_buffer[i]);
	} 
}

/**
 * @brief 缓存中存入数码管显示的值
 * 
 * @param num 数值
 */
void Int_DigitalTube_DisplayNum(unsigned long num){
	u8 i ;

	//清空 buffer 里存储的数值
	for(i = 0; i < 8; i ++){
		s_buffer[i] = 0;
	}

	i = 7;
	//判断 num 是否为大于等于 0 并小于等于 9 
	if(num>= 0 && num <= 9){
		s_buffer[i] = s_digital_codes[num];
	}

	//循环对num 进行取余和除操作 
	while(num > 0){
		s_buffer[i] = s_digital_codes[num % 10];
		num /= 10;
		i--;
	}
}

/**
 * @brief 第 n 个数码管 显示 num
 * 
 * @param n 第几位
 * @param num 显示数字
 */
static void Int_DigitalTube_DisplaySingle(u8 n, u8 num)
{
	//关掉数码管
	P0 = 0;
	//清除片选位
	P1 &= 0xC7;
	//将显示变量左移3位
	n <<= 3;
	//选中 片选位
	P1 |= n;
	//显示
	P0 = num;
}

main.c 代码如下:

#include <STC89C5XRC.H>
#include "Int_DigitalTube.h"

void main()
{
    char i = 100;
    u16 j  = 0;
    while (1) {
        if (j == 2500) {
            j = 0;
            if (i >= 0) {
                Int_DigitalTube_DisplayNum(i);
                i--;
            }
        }
        j++;
        Int_DigitalTube_Refresh();
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

路x飞

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值