欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 2866|回復: 2
收起左側

請問大神,如何將兩個簡單的單片機程序合在一起。秒表開始時跑馬燈亮

[復制鏈接]
ID:266972 發表于 2017-12-26 10:57 | 顯示全部樓層 |閱讀模式
跑馬燈
/*-----------------------------------------------

  內容:循環點亮P1口對應的8個LED燈
------------------------------------------------*/
#include<reg52.h>
/*------------------------------------------------
                    延時子程序
------------------------------------------------*/
void delay(unsigned int cnt)
{
while(--cnt);
}
/*------------------------------------------------
                    主函數
------------------------------------------------*/
main()
{
unsigned char i=0xfe;
P1=0xfe;      
while(1)
      {
           delay(300000);
          
           P1=i;                //移位過程中采用變量位循環形式,如果寫成P1|=0x01的形式,則將讀入P2端口的值。若出現某個引腳電平為高,則最終全部變為高電平。
           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};
                        //共陰數碼管 0-9

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

EX0=1;//外部中斷0設置
IT0=1;

EX1=1;//外部中斷1設置
IT1=1;

TMOD |=0x01;//定時器設置 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);        
          
                  }
/******************************************************************/
/*                    定時器中斷函數                              */
/******************************************************************/
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]; //個位顯示處理

}
/******************************************************************/
/*                    外部中斷函數                                */
/******************************************************************/
void ISR_INT0(void) interrupt 0 using 1
{
TR0=!TR0; //利用外部中斷打開和關閉定時器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]; //個位顯示處理
}




回復

使用道具 舉報

ID:78322 發表于 2017-12-26 11:28 | 顯示全部樓層
這樣的程序只能是自己寫著玩,不適用,一般做一個時基(1ms),然后把不同的功能寫成不同的函數,里面就不需要延時,而是間隔需要的時間去調用,這樣相互之間的影響幾乎就很小的。
回復

使用道具 舉報

ID:267015 發表于 2017-12-26 11:53 | 顯示全部樓層
你想表達的意思是,你的跑馬燈以秒為計數來起動,想把秒表程序整合到一上一個程序,你可以把跑馬燈的程序作為一個函數在秒表程序中進行調用,
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表