#include<STC15W.h>
/************************通信接口配置*************************************************/
typedef unsigned int u16; //对数据类型进行声明定义
typedef unsigned char u8;
sbit LSA=P1^1;
sbit LSB=P1^2;
sbit LSC=P1^3;
u8 code smgduan[17]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,
0x80,0x90};//显示0~F的值 共阳0-9
u16 s,shi=0,fen=0,miao=0;
u8 mb[8];
void Timer0Init()
{
TMOD|=0X01;//选择为定时器0模式,工作方式1,仅用TR0打开启动。
TH0=0xFC; //给定时器赋初值,定时1ms
TL0=0X18;
TR0=1;//打开定时器
}
void yanshi(u16 i)
{
while(i--);
}
void DigDisplay()
{
u8 i;
for(i=0;i<8;i++)
{
switch(i) //位选,选择点亮的数码管,
{
case(0):
LSA=0;LSB=0;LSC=0; break;//显示第0位
case(1):
LSA=1;LSB=0;LSC=0; break;//显示第1位
case(2):
LSA=0;LSB=1;LSC=0; break;//显示第2位
case(3):
LSA=1;LSB=1;LSC=0; break;//显示第3位
case(4):
LSA=0;LSB=0;LSC=1; break;//显示第4位
case(5):
LSA=1;LSB=0;LSC=1; break;//显示第5位
case(6):
LSA=0;LSB=1;LSC=1; break;//显示第6位
case(7):
LSA=1;LSB=1;LSC=1; break;//显示第7位
}
P2=smgduan[mb[i]];//发送段码
yanshi(1); //间隔一段时间扫描
P2=0xff;//消隐
}
}
/*******************************************************************************
* 函 数 名 : main
* 函数功能 : 主函数
* 输 入 : 无
* 输 出 : 无
******v*************************************************************************/
void main()
{
Timer0Init();
while(1)
{
if(TF0==1)
{
TF0=0;
TH0=0XFC; //给定时器赋初值,定时1ms
TL0=0X18;
s++;
}
if(s==1000) //到达1s时间
{
s=0;
miao++;
}
mb[0]=miao%10;
mb[1]=miao/10;
mb[2]=16;
mb[3]=fen%10;
mb[4]=fen/10;
mb[5]=16;
mb[6]=shi%10;
mb[7]=shi/10;
if(miao==60)fen++,miao=0;
if(fen==60)shi++,fen=0;
if(shi==24)shi=0;
DigDisplay();
}
}
|