需求:在数码管任意位置显示数字。
规范模板化代码:
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);
}
需求:能靠右显示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();
}
}