|
#include<reg51.h>
//--定义使用的IO口--//
#define GPIO_DIG P0
sbit shi=P1^1;
sbit ge=P1^0;
//--定义全局变量--//
unsigned char code DIG_CODE[17] = {
0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};
//0、1、2、3、4、5、6、7、8、9、A、b、C、d、E、F的显示码
unsigned char DisplayData[8];
//用来存放要显示的8位数的值
unsigned char Time, Second; //用来存放定时时间
//--声明全局函数--//
void DigDisplay(); //动态显示函数
void Timer0Cofig(void);
void main(void)
{
Second = 1;
Timer0Cofig();
while(1)
{
if(Second == 101)
{
Second = 1;
}
if(Second < 101)
{
DisplayData[0] = DIG_CODE[(100-Second) % 100 / 10];
DisplayData[1] = DIG_CODE[(100-Second) %10];
DigDisplay();
}
}
}
void DigDisplay()
{
unsigned char i;
unsigned int j;
for(i=0; i<2; i++)
{
if(i==0)
{
shi=0;
ge=1; //如果这里不改动,那么显示会重复,覆盖
}
else if(i==1)
{shi=1;//现在改为了单刀双掷开关就好了
ge=0;
}
GPIO_DIG = DisplayData; //发送段码
j = 10; //扫描间隔时间设定
while(j--);
GPIO_DIG = 0x00; //消隐
}
}
void Timer0Cofig(void)
{
TMOD = 0x01; //定时器0选择工作方式1
TH0 = 0x3C; //设置初始值,定时50MS
TL0 = 0xB0;
EA = 1; //打开总中断
ET0 = 1; //打开定时器0中断
TR0 = 1; //启动定时器0
}
void Timer0() interrupt 1
{
TH0 = 0x3C; //设置初始值
TL0 = 0xB0;
Time++;
if(Time == 4)
{
Second ++;
Time = 0;
}
}
|
|