標(biāo)題: 請問各位大神怎么把這個單片機倒計時改為正計時 附程序 [打印本頁]

作者: 1007915414·    時間: 2019-12-5 14:46
標(biāo)題: 請問各位大神怎么把這個單片機倒計時改為正計時 附程序
試了好多次都改不出來,求教。
//頭文件
#include <reg51.h>
#include <intrins.h>
//宏定義
#define uchar unsigned char
#define uint unsigned int
//數(shù)碼管段碼端口
#define PP  P0
//共陽極數(shù)碼管段碼
uchar code SEG7[]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90,};//0,1,2,3,4,5,6,7,8,9
//數(shù)碼管顯示緩沖
uchar num[]={0,1,2,3,4};
//數(shù)碼管位碼端口
sbit      q1=P2^0;
sbit      q2=P2^1;
sbit      q3=P2^2;
sbit      q4=P2^3;
//復(fù)位,開始,停止
sbit      k1=P1^0;
sbit      k2=P1^1;
sbit      k3=P1^2;
//延時函數(shù)ms
void _delay_ms(uint t)
{
   uint i,j;
   for(i=0;i<t;i++)
     for(j=0;j<120;j++);
}
//數(shù)碼管顯示
void dis()
{
//------------------  
//顯示第1位
  PP=num[0];
  q1=1;
  _delay_ms(2);
  q1=0;
//顯示第2位
  PP=num[1];
  q2=1;
  _delay_ms(2);
  q2=0;
  //顯示第3位
  PP=num[2];
  q3=1;
  _delay_ms(2);
  q3=0;
  //顯示第4位
  PP=num[3];
  q4=1;
  _delay_ms(2);
  q4=0;

}
//計時變量
uint jishu1s=0000;
uint jishu1=0000;
uint jishu2;
//開始,停止變量
uint  bz;
//顯示控制
void dispaly()
{
   num[0]=SEG7[jishu1/1000];        //顯示千位
   num[1]=SEG7[jishu1/100%10]; //顯示百位
        num[2]=SEG7[jishu1/10%10];//顯示十位
        num[3]=SEG7[jishu1%10];//顯示個位
}
//按鍵處理
void key()
{
  if(k1==0){jishu1=jishu1s;while(k1==0);}//復(fù)位
  if(k2==0){bz=1;while(k2==0);}//開始
  if(k3==0){bz=0;while(k3==0);}//停止
}
//-----------------------
void main()   //主函數(shù)
{
  _delay_ms(10);  
   //定時器0配置方式1 16
  TMOD=0x01;        
  //使能定時器0
  ET0=1;
  //定時器的初值
  TH0=(65536-50000)/256;
  TL0=(65536-50000)%256;
  //停止開啟定時器0
  TR0=1;
  EA=1;         
  while(1)
  {
   dispaly();//顯示控制
   dis(); //顯示
   key();//按鍵
  }
}  

//----T0 計數(shù)                 
void  Time0() interrupt 1
{
  //重裝初值50ms;
  TH0=(65536-50000)/256;
  TL0=(65536-50000)%256;
  //開始
  if(bz==1)
  {
   jishu2=jishu2+1;
   //到達1s
   if(jishu2==20)
   {
     jishu2=0;
     if(jishu1>0)jishu1=jishu1-1;//減1s
     if(jishu1==0)bz=0;//結(jié)束
   }
  }

}


作者: ahshmj    時間: 2019-12-5 15:57
     if(jishu1>0)jishu1=jishu1-1;//減1s
     if(jishu1==0)bz=0;//結(jié)束
改為:
     jishu1=jishu1+1;//加1s
     if(jishu1==0)bz=0;//結(jié)束



作者: yzwzfyz    時間: 2019-12-5 18:23
程序不是自己寫吧。
作者: ahshmj    時間: 2019-12-6 09:38
另外結(jié)束,可以是再“bz”基礎(chǔ)上加到“0”停止,也可以是 jishu1==bz(設(shè)定值)   bz=“設(shè)定值”(重新裝填“設(shè)定值”)






歡迎光臨 (http://www.torrancerestoration.com/bbs/) Powered by Discuz! X3.1