|
#include <reg52.h>
#define DUAN_PORT P0 //段选信号的锁存器控制
sbit WEI_LIN1=P2^0; //位选信号的锁存器控制
sbit WEI_LIN2=P2^1;
sbit WEI_LIN3=P2^2;
sbit WEI_LIN4=P2^3;
//0-F的码表
unsigned char code table[]={
0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,//0-9
0x77,0x7c,0x39,0x5e,0x79,0x71//a-f
};
void delay(unsigned int i)
{
unsigned int m,n;
for(m=i;m>0;m--)
for(n=90;n>0;n--);
}
//消除尾光
void DisplayOff(void)
{
WEI_LIN1=1;
WEI_LIN2=1;
WEI_LIN3=1;
WEI_LIN4=1;
DUAN_PORT=0x00;
delay(1);
}
//1次显示一位
void DisplayNum(unsigned int value)
{
static unsigned int num=0;
unsigned char qian=1,bai=2,shi=3,ge=4;
qian=value/1000;
value%=100;
bai=value/100;
value%=100;
shi=value/10;
value%=10;
ge=value;
num++;
num%=4;
switch(num)
{
case 0: DUAN_PORT=table[qian]; WEI_LIN1=0;break;
case 1: DUAN_PORT=table[bai]; WEI_LIN2=0;break;
case 2: DUAN_PORT=table[shi]; WEI_LIN3=0;break;
case 3: DUAN_PORT=table[ge]; WEI_LIN4=0;break;
}
}
void main(void)
{
unsigned int value=0;
unsigned int num=0;
DisplayOff();
while(1)
{
if(num++>20)//200ms变化一次数据
{
num=0;
value++;
if(value>9999)value=0;
}
DisplayNum(value); //动态显示1位数,刷新
delay(10); //刷新周期
DisplayOff();//消除尾光
}
}
|
评分
-
查看全部评分
|