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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 3474|回復: 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);
                        }   
        }

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

使用道具 舉報

沙發
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;  放到全局變量
回復

使用道具 舉報

5#
ID:957836 發表于 2021-10-24 21:06 | 只看該作者
188610329 發表于 2021-10-24 21:00
unsigned char x;  放到全局變量

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

使用道具 舉報

6#
ID:973695 發表于 2021-10-24 22:45 | 只看該作者
執行case 2: y=8; break;再按下按鍵卻不能執行后面的程序了

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

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

評分

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

查看全部評分

回復

使用道具 舉報

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

使用道具 舉報

8#
ID:957836 發表于 2021-10-25 07:31 來自手機 | 只看該作者
stycx 發表于 2021-10-24 22:45
執行case 2: y=8; break;再按下按鍵卻不能執行后面的程序了

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

感謝您的寶貴建議。
回復

使用道具 舉報

9#
ID:957836 發表于 2021-10-25 07:32 來自手機 | 只看該作者
npn 發表于 2021-10-24 23:37
看了下你的程序太亂,需要重寫一份,其余全部用定時器中斷實現,軟件延時盡量不要用。

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

使用道具 舉報

10#
ID:420836 發表于 2021-10-25 07:56 | 只看該作者
確保新程序只有一個 main 函數,并且定義了所有其他函數和變量。
回復

使用道具 舉報

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

使用道具 舉報

12#
ID:339654 發表于 2021-10-26 22:45 | 只看該作者
使用時間片的方式運行代碼,可以執行多個任務
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 欧美一级在线 | 国产精品自拍一区 | 日本久久久久久 | 一区二区小视频 | 国产区第一页 | 91电影院| 国产免费一级片 | 欧美日韩久| 欧美在线观看一区 | 欧美精品欧美精品系列 | 亚洲一区二区三区免费观看 | 九九久久精品 | 九九av | 国产一区二区三区四区五区加勒比 | 免费一区二区 | www.狠狠操 | 中文字幕一区二区三区不卡 | www久久久| 日本特黄特色aaa大片免费 | 精品欧美一区免费观看α√ | 性生生活大片免费看视频 | 国产精品视频二区三区 | 亚洲乱码一区二区三区在线观看 | 国产91色在线 | 亚洲 | 一级国产精品一级国产精品片 | 日本在线网址 | 久久久国产精品 | 欧美日韩一区二区三区在线观看 | 人人做人人澡人人爽欧美 | 国产精品不卡 | 精品日韩一区二区 | 日本精品999 | 国产99小视频| 国产精品2区 | 亚洲精品免费视频 | 欧美5区| 久久精品国产一区二区电影 | 亚洲精品一区中文字幕乱码 | 亚洲一区 中文字幕 | 欧美性网站 | 成人国产精品久久久 |