|
#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;
}
}
|
|