圣源电子制作

 找回密码
 立即注册
查看: 7954|回复: 0
打印 上一主题 下一主题

向单片机高手求救

[复制链接]
跳转到指定楼层
楼主
发表于 2013-12-30 18:57:54 | 只看该作者 回帖奖励 |正序浏览 |阅读模式
要求:按键1功能是开始   停止 ;按键2功能是暂停,为的是能让计数员计数,暂停时间为5秒,5秒之后计时又开始,但时间得加上前面暂停的5秒,
按键3功能清零!我只写出了下面这一段。哪位高手帮改下!!!时间从00.00到99.99.

#include <reg51.h>

unsigned char code dispcode[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,
                            0x82,0xf8,0x80,0x90,0x7f};   //共阳接法数码管0~9对应代码
unsigned char second;
unsigned char tcount ,t;
sbit d1=P0^7;
void delay(unsigned int c);
void main()
{
          TMOD=0x01;        //定时器0工作在工作方式1下
        TH0=0Xd8;        //设置50ms定时时计数器的初值,TH0=(65536-50000)/256
        TL0=0Xf0;        //                            TL0=(65536-50000)/256
        EA=1;                //CPU开总中断
        ET0=1;                //T0开中断
        TR0=1;                //启动T0
          tcount=0;
          second=0;
        t=0;
  while(1)                        //本段程序功能为显示
  {
   P0=dispcode[second/10];    //段选,显示十位数字

  P2=0X40;
                  //位选
   delay(5);                        //动态扫描
   P0=0xff;
   

   P0=dispcode[second%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;
  }
}

void t0() interrupt 1 using 0
{
  TH0=0Xd8;                //重装50ms初值,TH0=(65536-50000)/256
  TL0=0Xf0;                //              TL0=(65536-50000)/256
  tcount++;
  if(tcount==1)        //是否1S到了的判断。1S=50ms*20
    {
      tcount=0;
      second++;                //数码管显示的内容加1
      if(second==100)    //是否显示到20的判断
        {
          second=0;     //当数码管显示到20后,返回显示0
                  t++;
                  if(t==100)
                  {
                  second=99;
                  t=99;
                  }
                  
        }            
    }
        
}
void delay(unsigned int c)
{
unsigned int x,y;
for(x=c;x>0;x--)
   for(y=110;y>0;y--);
}
回复

使用道具 举报

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

本版积分规则

QQ|手机版|联系我们|闽公网安备 35012102000020号|闽ICP备11020110号-1|圣源电子

GMT+8, 2024-11-21 19:08 , Processed in 0.040182 second(s), 15 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

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