標(biāo)題: 請問大神,如何將兩個簡單的單片機程序合在一起。秒表開始時跑馬燈亮 [打印本頁]

作者: mr234534    時間: 2017-12-26 10:57
標(biāo)題: 請問大神,如何將兩個簡單的單片機程序合在一起。秒表開始時跑馬燈亮
跑馬燈
/*-----------------------------------------------

  內(nèi)容:循環(huán)點亮P1口對應(yīng)的8個LED燈
------------------------------------------------*/
#include<reg52.h>
/*------------------------------------------------
                    延時子程序
------------------------------------------------*/
void delay(unsigned int cnt)
{
while(--cnt);
}
/*------------------------------------------------
                    主函數(shù)
------------------------------------------------*/
main()
{
unsigned char i=0xfe;
P1=0xfe;      
while(1)
      {
           delay(300000);
          
           P1=i;                //移位過程中采用變量位循環(huán)形式,如果寫成P1|=0x01的形式,則將讀入P2端口的值。若出現(xiàn)某個引腳電平為高,則最終全部變?yōu)楦唠娖健?br />            i<<=1;
           i|=0x01;
            
           if(P1==0x7f)
          {
                   delay(30000);
               i=0xfe;
       
          }
      }
}


秒表
#include<reg52.h>     //包含頭文件,一般情況不需要改動,頭文件包含特殊功能寄存器的定義

code unsigned char tab[]=
                        {0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
                        //共陰數(shù)碼管 0-9

unsigned char Dis_Shiwei;  //定義十位
unsigned char Dis_Gewei;   //定義個位
unsigned char S_Dis_Shiwei;//定義秒十位
unsigned char S_Dis_Gewei; //定義秒個位
unsigned char second,msecond;
/******************************************************************/
/*                    函數(shù)聲明                                   */
/******************************************************************/
void CLR(void);
/******************************************************************/
/*                    延時函數(shù)                                    */
/******************************************************************/
void delay(unsigned int cnt)
{
while(--cnt);
}
/******************************************************************/
/*                    主函數(shù)                                      */
/******************************************************************/
main()
{

EX0=1;//外部中斷0設(shè)置
IT0=1;

EX1=1;//外部中斷1設(shè)置
IT1=1;

TMOD |=0x01;//定時器設(shè)置 10ms in 12M crystal
TH0=0xd8;
TL0=0xf0;
ET0=1;  //打開中斷
TR0=0;

EA=1;
CLR();
while(1)
  P0=S_Dis_Shiwei;//顯示秒十位
  P2=1;
  delay(300);     //短暫延時
  P0=S_Dis_Gewei; //顯示秒個位
  P2=2;
  delay(300);
  P0=0x40;        //顯示秒個位
  P2=3;
  delay(300);
  P0=Dis_Shiwei;  //顯示十位
  P2=4;
  delay(300);     //短暫延時
  P0=Dis_Gewei;   //顯示個位
  P2=5;
  delay(300);        
          
                  }
/******************************************************************/
/*                    定時器中斷函數(shù)                              */
/******************************************************************/
void tim(void) interrupt 1 using 1
{

TH0=0xd8;//重新賦值
TL0=0xf0;
msecond++;
if (msecond==100)
    {
    msecond=0;
    second++;//秒加1
        if(second==100)
           second=0;
        S_Dis_Shiwei=tab[second/10];//十位顯示值處理
    S_Dis_Gewei=tab[second%10]; //個位顯示處理

        }
    Dis_Shiwei=tab[msecond/10];//十位顯示值處理
    Dis_Gewei=tab[msecond%10]; //個位顯示處理

}
/******************************************************************/
/*                    外部中斷函數(shù)                                */
/******************************************************************/
void ISR_INT0(void) interrupt 0 using 1
{
TR0=!TR0; //利用外部中斷打開和關(guān)閉定時器0 用于開始和停止計時

}
void ISR_INT1(void) interrupt 2 using 1
{
if(TR0==0)//停止時才可以清零
   CLR();
}

void CLR(void)
{
second=0; //利用外部中斷清零
msecond=0;
Dis_Shiwei=tab[msecond/10];//十位顯示值處理
Dis_Gewei=tab[msecond%10]; //個位顯示處理
S_Dis_Shiwei=tab[second/10];//十位顯示值處理
S_Dis_Gewei=tab[second%10]; //個位顯示處理
}





作者: 立里    時間: 2017-12-26 11:28
這樣的程序只能是自己寫著玩,不適用,一般做一個時基(1ms),然后把不同的功能寫成不同的函數(shù),里面就不需要延時,而是間隔需要的時間去調(diào)用,這樣相互之間的影響幾乎就很小的。
作者: yjiyv    時間: 2017-12-26 11:53
你想表達的意思是,你的跑馬燈以秒為計數(shù)來起動,想把秒表程序整合到一上一個程序,你可以把跑馬燈的程序作為一個函數(shù)在秒表程序中進行調(diào)用,




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