找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 2185|回復(fù): 3
打印 上一主題 下一主題
收起左側(cè)

撿了一個倒計時單片機(jī)板子沒事仿了一下他的程序

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:288865 發(fā)表于 2019-5-12 22:35 來自手機(jī) | 只看該作者 回帖獎勵 |倒序?yàn)g覽 |閱讀模式
撿了一個單片機(jī)電路板,雙倒計時可設(shè)置的,帶存儲,一看stc的單片機(jī),沒事仿一個,不是很專業(yè),具體功能是有了,按鍵這一塊處理感覺有點(diǎn)難,感覺挺復(fù)雜的,掛上給初學(xué)者看看。高手可以略過了;蛘咧更c(diǎn)一下也行
#include "STC8fxx.H"                         //此文件中定義了單片機(jī)的一些特殊功能寄存器
#include "intrins.H"
#include "delay.H"
#include "DigDisplay.H"
#include "EEPROM.H"
#include "key.H"
#include "Timer0.H"

#define uint unsigned int               //對數(shù)據(jù)類型進(jìn)行聲明定義
#define uchar unsigned char           //對數(shù)據(jù)類型進(jìn)行聲明定義

/*****************************************
* 定義全局變量
**************************************/

uchar code smgduan[12]={0x3f,0x6,0x5b,0x4f,0x66,0x6d,0x7d,0x7,0x7f,0x6f,0x77,0x7c};
uchar temp1,temp2,temp3,temp4;
uchar DisplayData[4];
uchar a,b;
uint hs;
bit s=0,k=0;        

/*******************************************************************************
* 函 數(shù) 名       : main
* 函數(shù)功能                 : 主函數(shù)
* 輸    入       : 無
* 輸    出             : 無
*******************************************************************************/
void main()
{
uchar q;
out=1;

Delay_ms(500);
temp1=IapRead(0x0400);//讀取eeprom數(shù)據(jù)
Delay_ms(5);
temp2=IapRead(0x0401);
Delay_ms(5);
temp3=IapRead(0x0500);
Delay_ms(5);                           
temp4=IapRead(0x0501);
Delay_ms(5);                           

while(k5==0&&k==0)        //模式1
  {
   a=temp1;          //將讀取的數(shù)據(jù)賦值
   b=temp2;
   s=1;
   Timer0();

   while(s)
   {
    DigDisplay();
    datapros();

    if(k1==0)
      {
           DigDisplay();
           DigDisplay();
           if(k1==0)
            {
             k=1;
             TR0=0;
             break;
            }
      }
          if(k5==1)break;
    }
  }
while(k5==1&&k==0)
  {
   a=temp3;
   b=temp4;
   s=1;
   Timer0();

   while(s)
   {
    DigDisplay();
    datapros();

    if(k1==0)
     {
      Delay_ms(2000);
          if(k1==0)
           {
            k=1;
            TR0=0;
            break;
           }
     }
         if(k5==0)break;
    }
  }
  
while(k==1)
  {
    uchar keya=KeyScan();
        out=1;

        DigDisplay();

    if(k1==0)
         {
          Delay_ms(20);
          if(k1==0)
           {
           while(!k1)DigDisplay();
                q=q+1;
                if(q>4)q=0;
           }
         }
   switch(q)
          {                        
            case 0:    break;
            case 1:
                                           DisplayData[0]=0x77;
                       DisplayData[1]=smgduan[1];
                           DisplayData[2]=smgduan[temp1/10];
                           DisplayData[3]=smgduan[temp1%10];
                      switch(keya)
                      {         
                           //case 1:  keynum++;if(keynum==100)keynum=0; break;
                             case 2:  if(temp1>0)temp1--; break;
                             case 3:  if(temp1<99)temp1++;else if(temp1>=99)temp1=99; break;
                            // case 0:   break;
                      }        
                                       break;
            case 2:
                                           DisplayData[0]=0x77;
                       DisplayData[1]=smgduan[2];
                           DisplayData[2]=smgduan[temp2/10];
                           DisplayData[3]=smgduan[temp2%10];
                      switch(keya)
                      {
                           //case 1:  keynum++;if(keynum==100)keynum=0; break;
                             case 2:  if(temp2>0)temp2--; break;
                             case 3:  if(temp2<99)temp2++;else if(temp2>=99)temp2=99; break;
                           //case 4:   break;
                      }        
                                   break;

            case 3:
                                           DisplayData[0]=0x7c;
                       DisplayData[1]=smgduan[1];
                           DisplayData[2]=smgduan[temp3/10];
                           DisplayData[3]=smgduan[temp3%10];
                      switch(keya)
                      {
                           //case 1:  keynum++;if(keynum==100)keynum=0; break;
                             case 2:  if(temp3>0)temp3--; break;
                             case 3:  if(temp3<99)temp3++;else if(temp3>=99)temp3=99; break;
                           //case 4:   break;
                      }
                                           break;
            case 4:
                                           DisplayData[0]=0x7c;
                       DisplayData[1]=smgduan[2];
                           DisplayData[2]=smgduan[temp4/10];
                           DisplayData[3]=smgduan[temp4%10];
                      switch(keya)
                      {
                           //case 1:  keynum++;if(keynum==100)keynum=0; break;
                             case 2:  if(temp4>0)temp4--; break;
                             case 3:  if(temp4<99)temp4++;else if(temp4>=99)temp4=99; break;
                           //case 4:   break;
                      }        
                                           break;
                 }
                if(k4==0)
                {
                Delay_ms(20);
                 if(k4==0)
                 {
                  while(!k4);
                  IapErase(0x400);
                  Delay_ms(50);
                  IapErase(0x500);
                  Delay_ms(50);
                  IapProgram(0x400, temp1);
                  Delay_ms(50);
                  IapProgram(0x401, temp2);
                  Delay_ms(50);
                  IapProgram(0x500, temp3);
                  Delay_ms(50);
                  IapProgram(0x501, temp4);
                  Delay_ms(50);
                  k=0;

                 }
                 }

  }
  }
/*******************************************************************************
* 函 數(shù) 名         : 定時器0中斷函數(shù)
* 函數(shù)功能                   :
***********************************************************************************************************
* 函 數(shù) 名         : 定時器0中斷函數(shù)
* 函數(shù)功能                   :
*******************************************************************************/
void Timer0Init() interrupt 1
{        
        TH0=0X0FE;        //給定時器賦初值,定時1ms
        TL0=0X0C;
        hs++;
    if(hs==1000)
          {
           if(out==1)
                 {
              a--;
                  hs=0;
                  if(a==0)out=0;
                 }
                else if(out==0)
                  {
                   b--;
                   hs=0;
               if(b==0)
                 {
                  out=1;
                  s=0;
                  TR0=0;
                 }
                   }
      }
}

評分

參與人數(shù) 1黑幣 +50 收起 理由
admin + 50 共享資料的黑幣獎勵!

查看全部評分

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復(fù)

使用道具 舉報

沙發(fā)
ID:288865 發(fā)表于 2019-5-12 22:36 來自手機(jī) | 只看該作者
不會發(fā)附件啊
回復(fù)

使用道具 舉報

板凳
ID:328014 發(fā)表于 2019-5-15 01:58 | 只看該作者
點(diǎn)高級模式里面有個附件上傳的圖標(biāo)
回復(fù)

使用道具 舉報

地板
ID:66287 發(fā)表于 2019-5-16 14:57 | 只看該作者
挺好的,希望程序適當(dāng)?shù)膶扅c(diǎn)注釋!
回復(fù)

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則

手機(jī)版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表