找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 6138|回复: 4
打印 上一主题 下一主题
收起左侧

秒表程序……欢迎斧正

[复制链接]
跳转到指定楼层
楼主
ID:3324 发表于 2010-6-21 23:06 | 显示全部楼层 回帖奖励 |倒序浏览 |阅读模式

想做个秒表程序,当键盘按下后,秒表停止,再按下另一个键后,秒表又恢复工作,可是我写的程序,当键盘有键按下时,就停止了,无论再按什么键,都没有反应,求哪位同仁帮我修改一下,谢谢了!想结交单片机爱好者!

#include<reg52.h>
#define uint unsigned int 
#define uchar unsigned char
uchar code disp[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7f,0x39,0x3f,0x79,0x71};
//数码管显示十六进制,从0到f
uchar code select[]={7,6,5,4,3,2,1,0};
//位选数组,自左至右
uint key,temp;
uint tt0=0;
uint num=0;
void display(uint second);
void delay(uint z);

void init()  //初始化子函数
{
 TMOD=0x01; //定时器0工作在方式一
 TH0=(65536-50000)/256;
 TL0=(65536-50000)%256;
 EA=1;  //开总中断
 ET0=1;  //开定时器0中断
 TR0=1;  //计时开始
}

void Timer0() interrupt 1 //定时器0中断子函数
{
 TH0=(65536-50000)/256;
 TL0=(65536-50000)%256;
 tt0++;
}

void delay(uint z)   //延时子函数
{
 uint x,y;
 for(x=z;x>0;x--)
  for(y=110;y>0;y--); 
}

void display(uint second)  //显示子函数
{
 uint bai,shi,ge;
 bai=second/100;
 shi=second%100/10;
 ge=second%100%10;
 
 if(bai!=0)    //此处的判断是为了消除重影,不然当没有到100时,百位上总会有一个0在隐隐约约的显示
  { 
  P0=disp[bai];  //显示百位
  P2=select[2];
  delay(1);    //延时0.1s左右
  }
 if(shi!=0)
  {  
  P0=disp[shi];  //显示十位
  P2=select[1];
  delay(1);
  }

 P0=disp[ge];  //显示个位
 P2=select[0];
 delay(1);
} 

void main()
{
 init();
 while(1)
 {
  if(tt0!=2)  //此处为显示秒表
  {
   display(num);
  }
  else 
  {
   tt0=0;
   num++;
  }
  P3=0x7f;  //开始检测按键
  temp=P3;
  while(temp!=0x7f) //检测是否有键按下
  {
   delay(5);  //延时几毫秒后,再次检测,防干扰
   temp=P3;
   while(temp!=0x7f) 
   {
    temp=P3;
    switch(temp)
    {
     case 0x7e:key=1;
       break;
     case 0x7d:key=2;
       break;
     case 0x7b:key=3;
       break;
     case 0x77:key=4;
       break;
    }
    if(key==1)  //若第一个键按下,定时器停止计时
    {
     TR0=0; //定时器0停止计时
     temp=0xff; //跳出while循环
    }
    if(key==2)  //若第二个键按下,定时器又重新开始计时
    {
     temp=0xff;
     TR0=1;
    }
   }
  }
  
 }
}

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表