嵌入式软件--代码复习

1.静态显示数码管

需求:在数码管任意位置显示数字。

规范模板化代码:

In_DigitalTube.h

#ifndef __INT_DIGITALTUBE_H__
#define __INT_DIGITALTUBE_H__
#include "Com_Util.h"
#define SMG_EN P36
#define LED_EN P34
void Int_DigitalTube_Init();
void Int_DigitalTube_Displaynum(u8 dig,u8 num);

#endif /* __INT_DIGITALTUBE_H__ */

In_DigitalTube.c

#include <STC89C5xRC.H>
#include "Int_DigitalTube.h"
static u8 codes[10]={
    0x3F, // 0
    0x06, // 1
    0x5B, // 2
    0x4F, // 3
    0x66, // 4
    0x6D, // 5
    0x7D, // 6
    0x07, // 7
    0x7F, // 8
    0x6F  // 9
};
void Int_DigitalTube_Init()
{
    //开启数码管总开关和关闭LED灯总开关
    SMG_EN=0;
    LED_EN=0;
}

void Int_DigitalTube_Displaynum(u8 dig, u8 num)
{
    P0=0x00;
    P1&=0xC7;
    dig<<=3;
    P1|=dig;
    P0=codes[num];
    
}

main.c

#include <STC89C5xRC.H>
#include "Com_Util.h"
#include "Int_DigitalTube.h"
// 定义显示内容,段选数组。
static u8 codes[10]={
    0x3F, // 0
    0x06, // 1
    0x5B, // 2
    0x4F, // 3
    0x66, // 4
    0x6D, // 5
    0x7D, // 6
    0x07, // 7
    0x7F, // 8
    0x6F  // 9
};
void main()
{
    Int_DigitalTube_Init();
    Int_DigitalTube_Displaynum(4,4);
    while(1);
}

2.动态显示数码管(有符号)

需求:能靠右显示123456和-123456

Int_DigitalTube.c

#include <STC89C5xRC.H>
#include "Int_DigitalTube.h"
#include "Com_Util.h"
static u8 codes[11]={
    0x3F, // 0
    0x06, // 1
    0x5B, // 2
    0x4F, // 3
    0x66, // 4
    0x6D, // 5
    0x7D, // 6
    0x07, // 7
    0x7F, // 8
    0x6F,  // 9
    0x40//负号
};
//定义显存数组
u8 buffer[8];
void Int_DigitalTube_Init()
{
    //开启数码管总开关和关闭LED灯总开关
    SMG_EN=0;
    LED_EN=0;
}

void Int_DigitalTube_Displaynum(u8 dig, u8 num)
{
    P0=0x00;
    P1&=0xC7;
    dig<<=3;
    P1|=dig;
    P0=num;
    
}

void Int_DigitalTube_Displaydata(u32 num1)
{
    u8 i;
    for(i=0;i<8;i++)
    {
        buffer[i]=0x00;
    }
    if(num1==0)
    {
        buffer[7]=codes[0];
        return;
    }
    if(num1<0)
    {
        num1=-num1;
i=7;
        while (num1>0)
        {
            buffer[i]=codes[(num1)%10];
            (num1)/=10;
            i--;
        }
        buffer[i]=codes[10];
    }else
    {
        i=7;
        while (num1>0)
        {
            buffer[i]=codes[(num1)%10];
            (num1)/=10;
            i--;
        }
       
        }
}

    void Int_DigitalTube_Refresh()
    {
        u8 i;
        for(i=0;i<8;i++)
        {
            Int_DigitalTube_Displaynum(i, buffer[i]);
            Com_Util_Delay1ms(1);
        }

    }

Int_DigitalTube.h

#ifndef __INT_DIGITALTUBE_H__
#define __INT_DIGITALTUBE_H__
#include "Com_Util.h"
#define SMG_EN P36
#define LED_EN P34
void Int_DigitalTube_Init();
void Int_DigitalTube_Displaynum(u8 dig,u8 num);
void Int_DigitalTube_Displaydata(u32 num1);
void Int_DigitalTube_Refresh();
#endif /* __INT_DIGITALTUBE_H__ */

main.c

#include <STC89C5xRC.H>
#include "Com_Util.h"
#include "Int_DigitalTube.h"
void main()
{
    Int_DigitalTube_Init();
    Int_DigitalTube_Displaydata(-112345);
    while (1)
    {
       Int_DigitalTube_Refresh();
    }
    
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值