久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 3586|回復: 11
收起左側

單片機怎么把兩個C程序整合到一起運行?

[復制鏈接]
ID:957836 發表于 2021-10-24 18:14 | 顯示全部樓層 |閱讀模式
程序一
//功能 :七彩呼吸

#include <STC8G.h>  
//端口定義
sbit GREEN    =    P3^1;//紅光控制端,0點亮
sbit RED  =    P3^2;//綠光控制端,0點亮
sbit BLUE   =    P3^3;//藍光控制端,0點亮

void port_mode()
{
        P3M1=0X00;P3M0=0X00;P5M1=0X00;P5M0=0X00;
}

void Delay(unsigned int t);  
void RGB(unsigned char R ,unsigned char G ,unsigned char B);

void main (void)
{   
    RED = 0 ; GREEN = 0 ; BLUE = 0 ;

                        port_mode();
                        P3=0X01;
    while (1)      
    {
        RGB(1,0,0);
        RGB(0,1,0);
        RGB(0,0,1);
        RGB(0,1,1);
        RGB(1,1,0);
        RGB(1,0,1);
        RGB(1,1,1);
                          RGB(0,0,0);
    }
}

void Delay(unsigned int t)
{
while(--t);
}
//7色光依次逐漸變亮
void RGB(unsigned char R ,unsigned char G ,unsigned char B)
{
    unsigned int pwm , set = 2000 ;        
    for(pwm=1;pwm<set;pwm++)//漸亮
    {
             RED    = 0;        //熄滅LED
             GREEN  = 0;
             BLUE   = 0;
             Delay(set-pwm);//延時長
             RED    = R;        
             GREEN  = G;
             BLUE   = B;        
             Delay(pwm);//延時長
    }
                for(pwm=set-1;pwm>0;pwm--)//漸暗
    {
             RED    = 0;        //熄滅LED
             GREEN  = 0;
             BLUE   = 0;
             Delay(set-pwm);//延時長
             RED    = R;        
             GREEN  = G;
             BLUE   = B;        
             Delay(pwm);//延時長
    }
}

======================================================================
程序二
//功能:七彩單色顯示
#include <stc8.h>
sbit      K=P5^5;         


void  delay (unsigned int i)
        {
                 unsigned int k,m;
                        for(m=0;m<1000;m++);
                                for(k=0;k<i;k++);
        }     


void port_mode()
        {
                P3M1=0X00;P3M0=0X00;P5M1=0X00;P5M0=0X00;
        }
        
void main()
        {   
                unsigned char i=0;        
                                       
                                        port_mode();
                                        P5=0XE0;
                                        P3=0X00;
                                        while(1)
                 {
                                        if(K==0)   
                                        {
                                                                delay(1200);     
                                                                if(K==0)         
                                                                {   
                                                                 if(++i==9)i=1;                                                                                          
                                                                }  
                                        }
                                         switch(i)            
                                        {
                                                         case  1:P3=0x02;break;
                                                         case  2:P3=0x04;break;
                                                         case  3:P3=0x08;break;
                                                         case  4:P3=0x06;break;
                                                         case  5:P3=0x0a;break;
                                                         case  6:P3=0x0c;break;
                                                         case  7:P3=0x0e;break;
                                                        default:P3=0X00;break;
                                        }
                                                        while(!K);  
                                                        delay(1200);
                        }   
        }

回復

使用道具 舉報

ID:624769 發表于 2021-10-24 19:00 | 顯示全部樓層
把main 的內容 合并到一起,確保只有一個 main, 注意main里面 while(1) 也是只有一個,所以while(1) 里面貼一起,外面的貼一起,   其他的子函數隨便貼在一個文件里,就可以了。
回復

使用道具 舉報

ID:957836 發表于 2021-10-24 20:44 | 顯示全部樓層
感謝您的回復,合并后當按鍵按第二次后就一直執行case 2: y=8; break;再按下按鍵卻不能執行后面的程序了,能否幫忙檢查一下錯誤呢?

#include <stc8.h>

sbit      K=P5^5;
sbit GREEN    =    P3^1;//紅光控制端,0點亮
sbit RED  =    P3^2;//綠光控制端,0點亮
sbit BLUE   =    P3^3;//藍光控制端,0點亮
unsigned char y=0;

//void Delays(unsigned int t);  
void RGB(unsigned char R ,unsigned char G ,unsigned char B);


void  delay (unsigned int i)
        {
                 unsigned int k,m;
                        for(m=0;m<9000;m++);
                                for(k=0;k<i;k++);
        }     

void fuxi()
{
                if(y==0)
                {
                        P3=0x00;
                }
                if(y==1)
                {
                        P3=0x02;
                }
                if(y==2)
                {
                        P3=0x04;
                }
                if(y==3)
                {
                        P3=0x08;
                }
                if(y==4)
                {
                        P3=0x06;
                }
                if(y==5)
                {
                        P3=0x0a;
                }
                if(y==6)
                {
                        P3=0x0c;
                }
                if(y==7)
                {
                        P3=0x0e;
                }
                if(y==8)
       
                {
                          
                        RGB(1,0,0);
                        RGB(0,1,0);
                        RGB(0,0,1);
                        RGB(0,1,1);
                        RGB(1,1,0);
                        RGB(1,0,1);
                        RGB(1,1,1);
                        RGB(0,0,0);
          }
               
}
       
void key()
{
  unsigned char x;
  if(K==0)
  {
    delay(50);
    if(K==0)
    {
      while(!K);
      x++;
      if(x==9)
      x=1;
      if(y==9)
      x=1;
      switch(x)
      {
        case 1: y=1; break;
        case 2: y=8; break;
        case 3: y=3; break;
                                case 4: y=4; break;
        case 5: y=5; break;
        case 6: y=6; break;
                                case 7: y=7; break;
        case 8: y=2; break;
        
        default: break;  
      }
    }
  }
}
       
       
void port_mode()
        {
                P3M1=0X00;P3M0=0X00;P5M1=0X00;P5M0=0X00;
        }
       
void main()
        {   
                unsigned char i=0;
                RED = 0 ; GREEN = 0 ; BLUE = 0 ;               
                                       
                                        port_mode();
                                        P5=0XE0;
                                        P3=0X00;
                     
                                        while(1)
                 {
                          key();
                          fuxi();

                                                 
                        }   
        }
       
        void Delays(unsigned int t)
{
while(--t);
}

void RGB(unsigned char R ,unsigned char G ,unsigned char B)
{
    unsigned int pwm , set = 2000 ;        
    for(pwm=1;pwm<set;pwm++)//漸亮
    {
             RED    = 0;        //熄滅LED
             GREEN  = 0;
             BLUE   = 0;
             Delays(set-pwm);//延時長度
             RED    = R;        
             GREEN  = G;
             BLUE   = B;        
             Delays(pwm);//延時長度
    }
                for(pwm=set-1;pwm>0;pwm--)//漸暗
    {
             RED    = 0;        //熄滅LED
             GREEN  = 0;
             BLUE   = 0;
             Delays(set-pwm);//延時長度
             RED    = R;        
             GREEN  = G;
             BLUE   = B;        
             Delays(pwm);//延時長度
    }
}
回復

使用道具 舉報

ID:624769 發表于 2021-10-24 21:00 | 顯示全部樓層
unsigned char x;  放到全局變量
回復

使用道具 舉報

ID:957836 發表于 2021-10-24 21:06 | 顯示全部樓層
188610329 發表于 2021-10-24 21:00
unsigned char x;  放到全局變量

放到全局變量后還是和原來一樣。
回復

使用道具 舉報

ID:973695 發表于 2021-10-24 22:45 | 顯示全部樓層
執行case 2: y=8; break;再按下按鍵卻不能執行后面的程序了

是因為 void RGB() 函數里頭用了大量的 delay()空操作。單片機接收不了 按鍵操作。

解決的辦法可以用外部中斷來接收按鍵操作。

評分

參與人數 1黑幣 +20 收起 理由
admin + 20 回帖助人的獎勵!

查看全部評分

回復

使用道具 舉報

ID:57657 發表于 2021-10-24 23:37 | 顯示全部樓層
看了下你的程序太亂,需要重寫一份,其余全部用定時器中斷實現,軟件延時盡量不要用。
回復

使用道具 舉報

ID:957836 發表于 2021-10-25 07:31 來自觸屏版 | 顯示全部樓層
stycx 發表于 2021-10-24 22:45
執行case 2: y=8; break;再按下按鍵卻不能執行后面的程序了

是因為 void RGB() 函數里頭用了大量的 de ...

感謝您的寶貴建議。
回復

使用道具 舉報

ID:957836 發表于 2021-10-25 07:32 來自觸屏版 | 顯示全部樓層
npn 發表于 2021-10-24 23:37
看了下你的程序太亂,需要重寫一份,其余全部用定時器中斷實現,軟件延時盡量不要用。

好的,您的建議非常好。
回復

使用道具 舉報

ID:420836 發表于 2021-10-25 07:56 | 顯示全部樓層
確保新程序只有一個 main 函數,并且定義了所有其他函數和變量。
回復

使用道具 舉報

ID:517951 發表于 2021-10-25 20:15 | 顯示全部樓層
把第二個文件的功能函數復制到第一個文件中去,然后main主函數在自己想要執行的地方調用新加進來的函數。
回復

使用道具 舉報

ID:339654 發表于 2021-10-26 22:45 | 顯示全部樓層
使用時間片的方式運行代碼,可以執行多個任務
回復

使用道具 舉報

13#
無效樓層,該帖已經被刪除
您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 日韩欧美一区二区三区免费观看 | 亚洲一区二区三区四区视频 | 国产精品久久久久久妇女 | 国产成人99久久亚洲综合精品 | 亚洲97| 国产高清精品一区二区三区 | 91精品久久久 | 国产激情视频在线观看 | 91av在线免费观看 | 欧美日韩在线观看一区 | 欧美福利 | 中文字幕高清一区 | 日韩成人免费视频 | 成人深夜福利 | av影音| 日韩精品一区二区三区中文在线 | 欧美中文| 伊人久久国产 | 久免费视频 | 中文字幕av一区二区三区 | 99久久99热这里只有精品 | 国产一级淫片免费视频 | 美女爽到呻吟久久久久 | 夜夜爽99久久国产综合精品女不卡 | 在线免费观看黄色 | www亚洲精品 | 黑人巨大精品欧美一区二区免费 | 国产精品国产精品国产专区不蜜 | 日韩精品一区二区三区中文字幕 | 午夜一区二区三区 | 国产一区三区在线 | 欧美视频一区 | 天天躁日日躁aaaa视频 | 91视频网址| 国产精品明星裸体写真集 | 日本电影韩国电影免费观看 | 色精品| 国产一级毛片精品完整视频版 | 老牛嫩草一区二区三区av | 精品中文字幕一区二区三区 | 超碰免费在线 |