目录
原理图
程序
main.c
#include <reg51.h>
#include "delay.h"
#include "display.h"
void dis_Service();
unsigned char wnd;
unsigned char parm1=44;
unsigned char parm2=55;
unsigned char parm3=66;
unsigned char parm4=77;
void main()
{
unsigned int i;
for(i=0;i<1000;i++)
{
Display();
}
dis_Service();
}
void dis_Service()
{
unsigned int i;
while(1)
{
switch(wnd)
{
case 0:
{
LEDBuf[0]=0;
LEDBuf[1]=22;
LEDBuf[2]=parm1/10;
LEDBuf[3]=parm1%10;
for(i=0;i<1000;i++)
{
Display();
}
wnd++;
break;
}
case 1:
{
LEDBuf[0]=1;
LEDBuf[1]=22;
LEDBuf[2]=parm2/10;
LEDBuf[3]=parm2%10;
for(i=0;i<1000;i++)
{
Display();
}
wnd++;
break;
}
case 2:
{
LEDBuf[0]=2;
LEDBuf[1]=22;
LEDBuf[2]=parm3/10;
LEDBuf[3]=parm3%10;
for(i=0;i<1000;i++)
{
Display();
}
wnd++;
break;
}
case 3:
{
LEDBuf[0]=3;
LEDBuf[1]=22;
LEDBuf[2]=parm4/10;
LEDBuf[3]=parm4%10;
for(i=0;i<1000;i++)
{
Display();
}
wnd=0;
break;
}
default:break;
}
}
}
display.c
#include "display.h"
#include "delay.h"
#include <reg51.h>
unsigned char code table[]={
0xc0,//0
0xf9,//1
0xa4,//2
0xb0,//3
0x99,//4
0x92,//5
0x82,//6
0xf8,//7
0x80,//8
0x90,//9
0x88,//A
0x83,//B
0xc6,//C
0xa1,//D
0x86,//E
0x8e, //F
0x8c, //P
0xc1,//U
0x91,//Y
0x7c,//L
0x00,//全亮
0xff //熄灭
};
unsigned char code leddata[]={
0x3F, //"0"
0x06, //"1"
0x5B, //"2"
0x4F, //"3"
0x66, //"4"
0x6D, //"5"
0x7D, //"6"
0x07, //"7"
0x7F, //"8"
0x6F, //"9"
0x77, //"A"
0x7C, //"B"
0x39, //"C"
0x5E, //"D"
0x79, //"E"
0x71, //"F"
0x76, //"H"
0x38, //"L"
0x37, //"n"
0x3E, //"u"
0x73, //"P"
0x5C, //"o"
0x40, //"-"
0x00 //熄灭
};
unsigned char LEDBuf[]={8,8,8,8};//数据缓存区
unsigned char code PLACE_CODE[]={0XFE,0XFD,0XFB,0XF7};//位选信号
void Display()
{//段码 位选 延时 消隐
static unsigned char i=0;//unsigned char i
switch(i)
{
case 0:
{
GPIO_DIG=leddata[LEDBuf[0]];
GPIO_PLACE=PLACE_CODE[0];
Delay_ms(1);
GPIO_DIG=0x00;
i++;
break;
}
case 1:
{
GPIO_DIG=leddata[LEDBuf[1]];
GPIO_PLACE=PLACE_CODE[1];
Delay_ms(1);
GPIO_DIG=0x00;
i++;
break;
}
case 2:
{
GPIO_DIG=leddata[LEDBuf[2]];
GPIO_PLACE=PLACE_CODE[2];
Delay_ms(1);
GPIO_DIG=0x00;
i++;
break;
}
case 3:
{
GPIO_DIG=leddata[LEDBuf[3]];
GPIO_PLACE=PLACE_CODE[3];
Delay_ms(1);
GPIO_DIG=0x00;
i=0;
break;
}
default:break;
}
}
display.h
#ifndef _display_h
#define _display_h
#include <reg51.h>
#include "delay.h"
#define GPIO_DIG P0//段码
#define GPIO_PLACE P2//位选
#define N 4 //数码管个数
extern unsigned char LEDBuf[];
unsigned char code leddata[];
unsigned char code table[];
extern void Display();
#endif
现象