51单片机00.00~99.99秒表,K1开始和暂停,K2清零

麻烦你帮我设计一下

第1个回答  2014-01-02
/********************************************************
*proteus仿真中晶振电路及复位电路自行添加
*晶振:12M
*********************************************************/
#include <reg51.h> 
sbit K1=P2^0; //
sbit K2=P2^1; //

bit flag=0;  //
int num;
 int L[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f}; //数码管段选数据 根据实际电路修改
 int wei[8]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};   //数码管位选信号 根据实际电路修改
 unsigned char dat[4];

 /************延时***************/
void delay(int i)
{
int x,y;
for(x=i;x>0;x--)
for(y=125;y>0;y--);
}


void main(void)
{

    TMOD = 0x01;   //定时器0 方式一
    TH0 = 0x0FC;   //10ms计时高8位
    TL0 = 0x18;   //10ms计时低8位
    EA = 1;   //开启总中断
    ET0 = 1;   //开启定时器0中断
    TR0 = 1;   //开启定时器0计数

while(1)
{
if(!K1)   //判断K1键
{
delay(10);      //按键去抖
if(!K1)
{
flag=~flag;
while(!K1);   //等待按键弹起
}
}

if(!K2)   //判断K2键
{
delay(10);   //按键去抖
if(!K2)
{
num=0;
}
}

}
}

void Timer0Interrupt(void) interrupt 1  //10ms中断
{ int i;
    TH0 = 0x0D8; //中断初值重装
    TL0 = 0x0F0;
if(flag) num++;  //中断次数记录
if(num==10000) //10次中断为10*10ms=1s
{
num=0; 

}
dat[0]=L[num%10000/1000];
dat[1]=L[num%1000/100]|0x80;;
dat[2]=L[num%100/10];
dat[3]=L[num%10];


for(i=0;i<4;i++)  //数码管显示
{
P1=dat[i];  //P1段选  根据实际电路修改
P3=wei[i];  //P3位选  根据实际电路修改 建议修改为其他IO口
delay(1);
P3=0xff; //去重影
}


}


附件为keil和proteus仿真(含电路)

个人原创手打 望采纳

追答

看这要求应该是参加什么竞赛吧 而且看了你写的程序 如果说每句话都是你自己敲的话 那你是有思路的 看得出来程序写的不多 51也是学了一点的
说说你程序的一些问题
bai和qian加到10的时候清零为什么放在主函数 而ge和shi放在中断里 (好好考虑一个子函数下什么情况下应该放在主函数什么情况下应该放在中断中 特别是显示和按键处理)

按键处理是不能用while循环的 这是个非常大的错误!
有问题可以问我

第2个回答  2014-01-03
我的百度空间里面,用这样的东西。

51单片机00.00~99.99秒表,K1开始和暂停,K2清零
K1); \/\/等待按键弹起}}if(!K2) \/\/判断K2键{delay(10); \/\/按键去抖if(!K2){num=0;}}}void Timer0Interrupt(void) interrupt 1 \/\/10ms中断{int i; TH0 = 0x0D8;\/\/中断初值重装 TL0 = 0x0F0;if(flag)num++; \/\/中断次数记录if(num==10000) \/\/10次中断为10*10ms=...

你好,请问你弄单片机00.00~99.99秒表得了吗?
实验名称:8位数码管秒表 程序说明:烧好程序,短接J6的上端(ON),按下S17即可看到秒表运行,再按下S17秒表暂停计时,按第三下秒表归零。实验平台:YZ200 V2.0开发箱 作者:徐锐锋 日期:2010-10-15 广州研展电子科技有限公司 www.52yanfa.com (我爱研发网) 版权所有 \/ include <reg52.h>...

要设计一个电子秒表,从00.00到99.99,4位数码管显示 2个按键 开始\/暂停...
定时器0.01秒刷新,数码管动态显示。用一个变量存当前时间的数据,点开始键打开定时器,暂停关闭定时器就行了。

...个4位LED数码显示“秒表”,显示时间为00.00~99.99秒,每0.01秒自动加...
这个学单片机的应该很好写,有两种方法:一、不精确的话用延时子程序就行;精确的话用定时器。

相似回答