电子技术论坛

 找回密码
 快速注册

QQ登录

只需一步,快速开始

搜索
搜索附件  

热门下载

© 电子技术论坛 文件下载中心

秒表系统.rar

 

谁有空 帮我弄弄 已经5天了(单片机)
本帖最后由 桥式整流 于 2014-1-2 10:34 编辑

本人在做一个秒表系统  其中有一个要求不会写
在按键2按下时暂停5秒  数码管在暂停的5秒之内一直显示暂停时的那个数,5秒之后继续计时,但得加上5秒。也就是在这里开始改,我改了好久没有成功
/*0~99秒计时器,当一秒钟到来时,就让秒计数单元加1,当秒计数达到99时,就自动返回到0,重新秒计数。
方法1:定时器中断方式*/
#include <reg51.h>
void key();
void key1();
unsigned char code dispcode[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,
                            0x82,0xf8,0x80,0x90,0x7f};   //共阳接法数码管0~9对应代码
unsigned char n,a;
unsigned char m ,t;
sbit d1=P0^7;
sbit K1=P3^0;
sbit K2=P3^1;
sbit K3=P3^3;
void delay(unsigned int c);
void main()
          {TMOD=0x01;        //定时器0工作在工作方式1下
        TH0=(65536-10000)/256;        //设置50ms定时时计数器的初值,TH0=(65536-50000)/256
        TL0=(65536-10000)%256;        //                            TL0=(65536-50000)/256
        EA=1;                //CPU开总中断
        ET0=1;                //T0开中断
       
        TR0=0;                //不启动T0
          m=0;
          n=0;
        t=0;
        a=0;
  while(1)                        //本段程序功能为显示
  {
   P0=dispcode[n/10];    //段选,显示十位数字
   P2=0X40;//位选
   delay(5);                        //动态扫描
   P0=0xff;
   

   P0=dispcode[n%10];        //段选,显示个位数字
   P2=0x80;                        //位选
   delay(5);                        //动态扫描
   P0=0xff;



   P0=dispcode[t/10];    //段选,显示十位数字
   P2=0X10;//位选
   delay(5);                        //动态扫描
   P0=0xff;
   

   P0=dispcode[t%10];        //段选,显示个位数字
   P2=0x20;                        //位选
   d1=0;
   delay(5);                        //动态扫描
   P0=0xff;
    key();
   key1();
  }
}

void t0() interrupt 1 using 2
{
  TH0=0Xd8;                //重装50ms初值,TH0=(65536-50000)/256
  TL0=0Xf0;                //              TL0=(65536-50000)/256
  m++;
  if(m==1)        //是否1S到了的判断。1S=50ms*20
    {
      m=0;
      n++;                //数码管显示的内容加1
      if(n==100)    //是否显示到20的判断
        {
          n=0;     //当数码管显示到20后,返回显示0
                  t++;
                  if(t==100)
                  {
                  n=99;
                  t=99;
                  }
                  
        }            
    }
       
}
void key()
{
if(K1==0)
{
  delay(5);
  if(K1==0)
  {
   while(!K1);
   TR0=1;
  
   }

  }
}

void key1()
{
if(K2==0)
{
  delay(5);
  if(K2==0)
  {
   while(!K2);
   TR0=0;
   
   for(a=0;a<200;a++) //暂停5秒
   
   
   
   t=t+5;
      
   TR0=1;
                  
  }
}
}



void delay(unsigned int c)
{
unsigned int x,y;
for(x=c;x>0;x--)
   for(y=110;y>0;y--);
}

手机版|家电维修技术论坛 ( 鄂ICP备09003585号-2 )

GMT+8, 2025-1-31 06:32 , Processed in 0.053258 second(s), 8 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

CopyRight © 电子技术论坛
电子邮箱:8794149@qq.com | 联系 QQ:3081868839 | 官方网址:www.dzdu.com

Qiji. All Rights Reserved


服务条款 | 站长声明

Wuhan Qiji Technology Co., Ltd.武汉奇迹科技有限公司版权所有


鄂ICP备09003585号-2鄂公网安备42010602000420号

返回顶部