数码管时钟程序C语言

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

#include

unsigned char xuan[11]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xbf};//数字显示//
unsigned char b[8]={0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80};//数码管阴极控制键//
unsigned char buffer[8];
unsigned char hour=0,minute=0,second=0; //显示初始化//
unsigned int count; //数字垒加//
unsigned char key0 = 0; // 秒调整键//
unsigned char key1 = 0; // 分调整键//
unsigned char key2 = 0; //时调整键
unsigned char key3 = 0; //复位键//
void delay(unsigned int i) //延时函数//
{
unsigned char j;
for(;i>0;i--)
for(j=0;j<100;j++);
}

void Buff() //数码显示//
{
buffer[0]=hour/10; //时十位//
buffer[1]=hour%10; //时个位//
buffer[2]=10;
buffer[3]=minute/10; //分十位//
buffer[4]=minute%10; //分个位//
buffer[5]=10;
buffer[6]=second/10; //秒十位//
buffer[7]=second%10; //秒个位//
}

void main() //主函数//
{
unsigned char i;
TMOD=0x01; //选择定时模式1//
TH0= ~10000/256; //选择定时器0初始化高8位// //0Xd8;
TL0= ~10000%256; //初始化低8位 总共定时10毫秒 // //0Xf0;
TR0=1; //启动定时器//
ET0=1; //定时器0中断允许//
EA=1;
P1_0=0; //所有中断允许//
while(1)
{
Buff(); //赋值初始化//
for(i=0;i<8;i++) //扫描8段数码管//
{
P0=~xuan[buffer[i]]; //显示当前所需显示的数字//
P2=~b[i];
delay(10);

P2=0x00; //断显//
}
if(second>=60) //秒逢60进位//
{
minute++;
second=0;
if(minute>=60) //分逢60进位//
{
hour++;
minute=0;
if(hour>=24) //时逢24进位//
{
hour=0;
}
}

}

P3_0=1; //秒位调整//
if (key0==1)
{ if(P1_4==1)key0=0;
}
else{
if(P1_4==0)
{key0=1;
if(second++>=60)second=0;
}
}


P3_1= 1; //分位调整//

if( key1== 1 )
{ if( P1_3 == 1 ) key1=0;

}

else{ //未按键

if( P1_3== 0 )
{

key1 = 1;

if(minute++ >= 60 ) minute = 0;

}
}


P3_2 = 1; //时位调整//

if( key2 == 1 )
{ //等松键

if( P1_2 == 1 ) key2=0;

}

else{

//未按键

if( P1_2 == 0 )
{

key2 = 1;

if(hour++ >=24 ) hour = 0;

//结束“循环2”,修改显示

}

}

/*P31=1; //复位键函数//
if(key3==1)
{if(P1_1==1)key3=0;}
else{
if(P1_1==0)
{key3=1;
P0=0;break;
}
}*/

} //while函数结束//
} //主函数结束//
void timer0() interrupt 1 //中断子程序固定函数 使用定时器0,寄存器组1//
{
TH0=~10000/256 ; // 0Xd8;
TL0=~10000%256; // 0Xf0;
count++;
if(count>=100)
{
count=0;
second++; //10毫秒累积100次...秒加1//
}
}



相关文档
最新文档