使用单片机设计制作数字显示秒表
设计要求
1.采用单片机设计制作一个数显秒表;
2.具有计时启停、暂停与继续等功能;
硬件设计电路原理图
软件代码设计
#include <REGX52.H>
unsigned char shumaguan[]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F};
unsigned int t=0;
unsigned int o=0;
unsigned char keyNum;
sbit2_7=2^7;
sbit2_6=2^6;
void Delay(unsigned int xms) //设置延时函数
{
unsigned char i, j;
while(xms--)
{
i = 2;
j = 239;
do
{
while (--j);
} while (--i);
}
}
void Timer0_Init() //配置定时器中断
{
TMOD &= 0xF0; //设置定时器模式
TMOD |= 0x01; //设置定时器模式
TL0 = 0x18; //设置定时初始值
TH0 = 0xFC; //设置定时初始值
TR0 = 0;
TF0 = 0; //清除TF0标志
ET0=1; //配置中断
EA=1;
PT0=1;
}
unsigned char key() //检测按键
{
keyNum=0;
if(P3_0==0)
{
Delay(20);
keyNum=1;
}
if(P3_1==0)
{
Delay(20);
keyNum=2;
}
if(P3_2==0)
{
Delay(20);
keyNum=3;
}
if(P3_3==0)
{
Delay(20);
keyNum=4;
}
return keyNum;
}
void shuzi(unsigned char location,number) //数码管位数和显示数字
{
P2_6=0;P2_7=1;
switch(location)
{
case 1:P0_0=0;P0_1=1;P0_2=1;P0_3=1;P0_4=1;P0_5=1;P0_6=1;P0_7=1;break;
case 2:P0_0=1;P0_1=0;P0_2=1;P0_3=1;P0_4=1;P0_5=1;P0_6=1;P0_7=1;break;
}
P2_6=1;P2_7=0;
P0=shumaguan[number];
Delay(1);
P0=0xFF;
}
void Timer0_Routine() interrupt 1 //中断函数
{
TL0 = 0x18; //设置定时初始值
TH0 = 0xFC; //设置定时初始值
t++;
if(t>=1000)
{
o++;
t=0;
}
}
void main()
{
Timer0_Init();
while(1)
{
keyNum=key();
if(keyNum==1) //开启
{
TR0 = 1;
}
if(keyNum==2) //停止
{
TR0 = 0;
o=0;
}
if(keyNum==3) //暂停
{
TR0 = 0;
}
if(keyNum==4) //继续
{
TR0 = 1;
}
shuzi(1,o/10%6);
shuzi(2,o%10);
}
}
作者:lsplhyqr