找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開始

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

請(qǐng)問大神,如何將兩個(gè)簡(jiǎn)單的單片機(jī)程序合在一起。秒表開始時(shí)跑馬燈亮

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:266972 發(fā)表于 2017-12-26 10:57 | 只看該作者 回帖獎(jiǎng)勵(lì) |倒序?yàn)g覽 |閱讀模式
跑馬燈
/*-----------------------------------------------

  內(nèi)容:循環(huán)點(diǎn)亮P1口對(duì)應(yīng)的8個(gè)LED燈
------------------------------------------------*/
#include<reg52.h>
/*------------------------------------------------
                    延時(shí)子程序
------------------------------------------------*/
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)某個(gè)引腳電平為高,則最終全部變?yōu)楦唠娖健?br />            i<<=1;
           i|=0x01;
            
           if(P1==0x7f)
          {
                   delay(30000);
               i=0xfe;
       
          }
      }
}


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

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;   //定義個(gè)位
unsigned char S_Dis_Shiwei;//定義秒十位
unsigned char S_Dis_Gewei; //定義秒個(gè)位
unsigned char second,msecond;
/******************************************************************/
/*                    函數(shù)聲明                                   */
/******************************************************************/
void CLR(void);
/******************************************************************/
/*                    延時(shí)函數(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í)器設(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);     //短暫延時(shí)
  P0=S_Dis_Gewei; //顯示秒個(gè)位
  P2=2;
  delay(300);
  P0=0x40;        //顯示秒個(gè)位
  P2=3;
  delay(300);
  P0=Dis_Shiwei;  //顯示十位
  P2=4;
  delay(300);     //短暫延時(shí)
  P0=Dis_Gewei;   //顯示個(gè)位
  P2=5;
  delay(300);        
          
                  }
/******************************************************************/
/*                    定時(shí)器中斷函數(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]; //個(gè)位顯示處理

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

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

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

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




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

使用道具 舉報(bào)

沙發(fā)
ID:78322 發(fā)表于 2017-12-26 11:28 | 只看該作者
這樣的程序只能是自己寫著玩,不適用,一般做一個(gè)時(shí)基(1ms),然后把不同的功能寫成不同的函數(shù),里面就不需要延時(shí),而是間隔需要的時(shí)間去調(diào)用,這樣相互之間的影響幾乎就很小的。
回復(fù)

使用道具 舉報(bào)

板凳
ID:267015 發(fā)表于 2017-12-26 11:53 | 只看該作者
你想表達(dá)的意思是,你的跑馬燈以秒為計(jì)數(shù)來(lái)起動(dòng),想把秒表程序整合到一上一個(gè)程序,你可以把跑馬燈的程序作為一個(gè)函數(shù)在秒表程序中進(jìn)行調(diào)用,
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

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

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

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