不带蜂鸣器的 时钟程序

单片机最小系统有关程序

#include<reg51.h>
#include<absacc.h>
#define uchar unsigned char
#define uint unsigned int
uchar code dispcode[ ]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e};
uchar seconde=0;
uchar minite=0;
uchar hour=12;
uchar mstcnt=0;
sbit P1_0=P3^2;
sbit P1_1=P3^3;
sbit P1_2=P3^4;
void delay(uchar k );
void time_pro( );
void display( );
void keyscan( );
/*延时子程序*/
void delay (uchar k)
{
uchar j;
while((k--)!=0)
{
for(j=0;j<125;j++)
{;}
}
}
/*时间处理子程序*/
void time_pro( void)
{
if(seconde==60)
{ seconde=0;
minite++;
if( minite==60)
{ minite=0;
hour++;
if(hour==24)
{hour=0; }
}
}

}
/* 显示子程序*/
void display(void)
{
P2=0x80;
P0=dispcode[hour/10];
delay(4);
P2=0x40;
P0=(dispcode[(hour%10)])|0X80;
delay(4);
P2=0x10;
P0=dispcode[minite/10];
delay(4);
P2=0x08;
P0=(dispcode[minite%10])|0X80;
delay(4);
P2=0x02;
P0=dispcode[seconde/10];
delay(4);
P2=0x01;
P0=dispcode[seconde%10];
delay(4);
}
/*键盘扫描子程序*/
void keyscan (void)
{
if(P1_0==0) //按键1秒的调整
{
delay(30);
if(P1_0==0)
{
seconde++;
if(seconde==60)
{seconde=0; }
}
}
if(P1_1==0) //按键2分的调整
{
delay(30);
if(P1_1==0)
{
minite++;
if(minite==60)
{minite=0;}
}
}
if(P1_2==0) //按键3小时的调整
{
delay(30);
if(P1_2==0)
{
hour++;
if(hour==24)
{hour=0; }
}
}
}
void timer0(void) interrupt 1 using 0 //定时器0方式1,50ms中断一次
{
TH0=0x3c;
TMOD = 0x11;
mstcnt++;
if(mstcnt==20)
{
seconde++;
mstcnt=0; //注意点。对计数单元的清零十分的重要,本次调试中就是
} //因为忽略了这一点,给我早成了很大的被动。

}
/*主函数*/
void main(void)
{ P1_0=1;
P1_1=1;
P1_2=1; //初始化p1口,全设为1
TMOD = 0x11; //time0为定时器,方式1
TH0=0x3c; //预置计数初

不带蜂鸣器的 时钟程序相关文档

最新文档

返回顶部