数码管显示应该是比较常用的,但是每次去找一下代码挺麻烦的,贴一个自己稍微改的原码。方便以后调试用
把数码显示封装到一个函数里面 Display_Shuma 。方便程序调用
需要显示小数点在 位数后面加 ( | 0x80 )
如TempData[1]=dofly_DuanMa[(num%100)/10]|0x80; //共阴数码管只要在对应的数字后面 | 0x80 即可显示小数点
#include<reg52.h> //包含头文件,一般情况不需要改动,头文件包含特殊功能寄存器的定义
#define DataPort P0 //定义数据端口 程序中遇到DataPort 则用P0 替换
sbit LATCH1=P2^2;//定义锁存使能端口 段锁存
sbit LATCH2=P2^1;// 位锁存
/*------------------------------------------------
主函数
------------------------------------------------*/
void Delay(unsigned int t)
{
while(--t);
}
//数码管显示函数
//FirstBit 从第几位开始显示 左边开始算
//num 显示的数值
void Display_Shuma(unsigned int FirstBit, unsigned int num ){
unsigned char code dofly_DuanMa[10]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};// 显示段码值0~9
unsigned char code dofly_WeiMa[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};//分别对应相应的数码管点亮,即位码
unsigned char TempData[8]; //存储显示值的全局变量
unsigned char i;
TempData[0]=dofly_DuanMa[num/1000];//分解显示信息,如要显示68,则68/10=6 68%10=8
TempData[1]=dofly_DuanMa[(num%1000)/100];
TempData[2]=dofly_DuanMa[((num%1000)%100)/10]; //共阴数码管只要在对应的数字后面 |0x80 即可显示小数点
TempData[3]=dofly_DuanMa[((num%1000)%100)%10];
//4位数码管
for(i=0;i<4;i++)
{
DataPort=0; //清空数据,防止有交替重影
LATCH1=1; //段锁存
LATCH1=0;
DataPort=dofly_WeiMa[i+FirstBit]; //取位码
LATCH2=1; //位锁存
LATCH2=0;
DataPort=TempData[i]; //取显示数据,段码
LATCH1=1; //段锁存
LATCH1=0;
Delay(200); // 扫描间隙延时,时间太长会闪烁,太短会造成重影
}
}
/*------------------------------------------------
延时函数,含有输入参数 unsigned int t,无返回值
unsigned int 是定义无符号整形变量,其值的范围是
0~65535
------------------------------------------------*/
main()
{
Display_Shuma(1, 3502);
}