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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 3707|回復: 8
打印 上一主題 下一主題
收起左側

有人能幫我把這個單片機程序整合成只有1個頭文件的程序嗎?

  [復制鏈接]
回帖獎勵 40 黑幣 回復本帖可獲得 1 黑幣獎勵! 每人限 1 次
跳轉到指定樓層
樓主
網上尋找的程序由于是多個,h文件,嘗試多次整合失敗,希望有大神幫忙整合一下。萬分感謝

Keil4C語言實物程序.zip

51.84 KB, 下載次數: 13

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

使用道具 舉報

沙發
ID:437648 發表于 2018-12-22 15:49 | 只看該作者
有人嗎?
回復

使用道具 舉報

板凳
ID:388197 發表于 2018-12-23 09:44 | 只看該作者
一個程序分開多個.C .H是個好習慣,這樣各個功能塊之間條理更為清晰,需要改動的時候也更容易,為什么要全丟在一個文件里呢?
回復

使用道具 舉報

地板
ID:213173 發表于 2018-12-23 10:56 | 只看該作者
#include <reg52.h>
#define uint8 unsigned char
#define unused8 0xFF
#define ON       0
#define OFF      1
#define EWTime_Count  30  //東西紅燈60s
#define NSTime_Count  60  //南北紅燈57s
#define YELTime_Count 5   //黃燈 5s
/*---------------------------------IO對應關系定義---------------------*/
#define EW_RED_ON()   do { EW_RED=ON;EW_GRE=OFF;EW_YEL=OFF; } while (0)
#define EW_YEL_ON()   do { EW_RED=OFF;EW_GRE=OFF;EW_YEL=ON; } while (0)
#define EW_GRE_ON()   do { EW_RED=OFF;EW_GRE=ON;EW_YEL=OFF; } while (0)

#define NS_RED_ON()   do { NS_RED=ON;NS_GRE=OFF;NS_YEL=OFF; } while (0)
#define NS_YEL_ON()   do { NS_RED=OFF;NS_GRE=OFF;NS_YEL=ON; } while (0)
#define NS_GRE_ON()   do { NS_RED=OFF;NS_GRE=ON;NS_YEL=OFF; } while (0)

sbit LED_D1 = P3^1;
sbit LED_C1 = P3^0;  
sbit LED_B1 = P3^1;  
sbit LED_A1 = P3^0;
sbit Key = P3^2;
sbit NS_GRE = P2^5;      
sbit NS_YEL = P2^4;
sbit NS_RED = P2^3;   
sbit EW_GRE = P2^2;  
sbit EW_YEL = P2^1;  
sbit EW_RED = P2^0;   
//uint8 table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
//                  bc   abged abcdg bcfg afgcd acdefg
uint8 table[]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90};
uint8  EW_Timer = unused8;  //東西方向紅燈定時器
uint8  NS_Timer = unused8;  //南北方向紅燈定時器
uint8  YEL_Timer = unused8; //黃燈 5s定時器
uint8  Flag_Key = 0; //按鍵是否按下標識
uint8  EW_Timer;  //東西方向紅燈定時器
uint8  NS_Timer;  //南北方向紅燈定時器
uint8  YEL_Timer; //黃燈 5s定時器
uint8  Timer = 20;  //定時器  1s
void Delay10uS(uint8 z);
void display1(uint8 num1,uint8 num2);   
void display2(uint8 num3,uint8 num4);
void INT0_Init(void);
void Timer_Init(void);
uint8  Flag_Key; //按鍵是否按下標識

int main(void)
{
        Timer_Init();    //定時器初始化
        INT0_Init();     //外部中斷初始化   
        EA=1;            //打開全局中斷
       
        NS_GRE = OFF;    //所有的燈都滅   
        NS_YEL = OFF;
        NS_RED = OFF;   
        EW_GRE = OFF;  
        EW_YEL = OFF;  
        EW_RED = OFF;   
        P3 = 0xFF;      //所有顯示滅
       
        //先讓東西方向紅燈亮 南北方向通行
        EW_Timer = EWTime_Count;//東西方向開始計時
       
        while(1)
        {       
                if((EW_Timer != unused8) && (EW_Timer != 0)){ //東西方向做紅燈倒計時
                display1(EW_Timer/10, EW_Timer%10);      //東西方向顯示時間 南北方向不顯示
                EW_RED_ON();                             //東西方向保持紅燈
                NS_GRE_ON();                             //南北方向保持綠燈
                }
                else if((EW_Timer != unused8) && (EW_Timer == 0) && (YEL_Timer == unused8)){//東西方向紅燈計時到 東西方向保持紅燈 南北方向變黃燈 開始黃燈5s計時
                EW_RED_ON();                             //東西方向紅燈
                NS_YEL_ON();                             //南北方向黃燈
                YEL_Timer = YELTime_Count;               //5s計時
                }
                if((EW_Timer != unused8) && (YEL_Timer != unused8) && (YEL_Timer != 0)){
                display1(YEL_Timer/10, YEL_Timer%10);    //東西方向顯示時間 南北方向不顯示
                }
                if((EW_Timer != unused8) && (YEL_Timer == 0)){    //東西方向紅-南北方向黃燈5s計時到 東西紅燈定時器關 黃燈定時器關 南北紅燈 東西綠燈 南北計時器開
                EW_Timer = unused8;                      //東西紅燈定時器關
                YEL_Timer = unused8;                     //黃燈定時器關
                NS_RED_ON();                             //南北變紅燈
                EW_GRE_ON();                             //東西變綠燈
                NS_Timer = NSTime_Count;                 //南北紅燈定時器開
                }
               
               
               
                if((NS_Timer != unused8) && (NS_Timer != 0)){ //南北紅燈定時器正在計時
                display2(NS_Timer/10, NS_Timer%10);      //南北方向顯示時間 東西方向不顯示
                EW_GRE_ON();                             //東西保持綠燈
                NS_RED_ON();                             //南北保持紅燈
                }
                else if((NS_Timer != unused8) && (NS_Timer == 0) && (YEL_Timer == unused8)){ //南北方向紅燈計時到 南北方向保持紅燈 東西方向變黃燈 開始黃燈5s計時
                NS_RED_ON();                             //南北方向保持紅燈
                EW_YEL_ON();                             //東西方向變黃燈
                YEL_Timer = YELTime_Count;               //5s計時
                }
                if((NS_Timer != unused8) && (YEL_Timer != unused8) && (YEL_Timer != 0)){   
                display2(YEL_Timer/10, YEL_Timer%10);   //南北方向顯示時間 東西方向不顯示
                }
                if((NS_Timer != unused8) && (YEL_Timer == 0)){  //南北方向紅-東西方向黃燈5s計時到 南北方向定時器關 黃燈定時器關 東西方向變紅燈 南北方向變綠燈 東西方向紅燈計時器開始計時
                NS_Timer = unused8;
                YEL_Timer = unused8;
                EW_RED_ON();                           //東西方向變紅燈
                NS_GRE_ON();                           //南北方向變綠燈
                EW_Timer = EWTime_Count;               //東西方向開始計時
                }
               
               
                if(Flag_Key == 1){        //如果急停按鍵按下 則全紅燈 顯示滅
                P3 = 0xFF;           //所有顯示滅
                EW_RED_ON();         //東西方向紅燈
                NS_RED_ON();         //南北方向紅燈
               
                EW_Timer = unused8;  //關閉所有定時器
                NS_Timer = unused8;
                YEL_Timer = unused8;
                }
        }
}
/**********************************
                延時程序
**********************************/
void Delay10uS(uint8 z)
{
    uint8 i,a,b;
    for(i=0;i<z;i++){
    for(b=1;b>0;b--)
            for(a=2;a>0;a--);
    }
}
/***************************************************
*               定時器初始化
* 12M晶體 1us 計數一次
****************************************************/
void Timer_Init(void)
{
    TMOD=0x01;             //定時器工作方式
    TH0=(65536-50000)/256; //定時器初值     50ms中斷一次
    TL0=(65536-50000)%256;
    ET0=1;                 //使能定時器中斷
    TR0=1;                 //啟動定時器0
}
/***************************************************
*               定時器中斷函數
*裝入初值  
*計時變量遞減
****************************************************/
void timer1(void) interrupt 1
{               
    TH0=(65536-50000)/256;  //重新裝入初值
    TL0=(65536-50000)%256;

    if(Timer > 0){
        Timer--;

        if(Timer == 0){    //1s 定時時間到
            Timer = 20;

            //添加其他定時器
            if((EW_Timer != unused8) && (EW_Timer > 0)){  //東西紅燈定時器
                EW_Timer--;
            }
            if((NS_Timer != unused8) && (NS_Timer >0)){   //南北紅燈定時器
                NS_Timer--;
            }
            if((YEL_Timer != unused8) && (YEL_Timer >0)){ //黃燈計時
                YEL_Timer--;
            }
        }
    }
}     
/***************************************************
*               EW顯示函數
*num1 要顯示數值的十位  num2 要顯示數值的各位
***************************************************/
void display1(uint8 num1,uint8 num2)
{
        P3=0XFF;       
        P0=0XFF;   
        P0=table[num1];      
        LED_A1=ON;   
        Delay10uS(5);     
        LED_A1=OFF;
        P0=0XFF;   
        P0=table[num2];   
        LED_B1=ON;   
        Delay10uS(5);   
        LED_B1=OFF;
        P0=0XFF;  
}
/***************************************************
*               NS顯示函數
*num1 要顯示數值的十位  num2 要顯示數值的各位
***************************************************/
void display2(uint8 num3,uint8 num4)
{            
        P0=0XFF;
        P3=0XFF;
        P0=table[num3];   
        LED_C1=ON;   
        Delay10uS(1);   
        LED_C1=OFF;
        P0=0XFF;     
        P0=table[num4];     
        LED_D1=ON;      
        Delay10uS(1);   
        LED_D1=OFF;
        P0=0XFF;     
}
/****************************************
*外部中斷初始化
*INT0 下降沿觸發
*****************************************/
void INT0_Init(void)
{
        EX0 = 1; //INT0 使能
        IT0 = 1; //下降沿觸發
}
void Key_Stop(void) interrupt 0
{
        Delay10uS(200);
        if(Key == 0)   //確認按鍵按下
        {
                Flag_Key = 1;
        }
}

回復

使用道具 舉報

5#
ID:303383 發表于 2018-12-23 10:56 | 只看該作者
提示: 作者被禁止或刪除 內容自動屏蔽
回復

使用道具 舉報

6#
ID:452561 發表于 2018-12-23 13:01 | 只看該作者
應該還好吧,C51一般放一個文件夾里面吧
回復

使用道具 舉報

7#
ID:472242 發表于 2019-1-28 05:35 | 只看該作者
perfect123 發表于 2018-12-26 19:55
合并并不難,主要是要處理所有文件里頭的全局變量名稱。5樓已經幫你搞定了,你為什么不感謝人家

是啊!樓主為什么不給人家魚吃啊?哈哈哈!

評分

參與人數 5黑幣 +86 收起 理由
areyouok + 35
sheng7533967 + 12 很給力!
zhengchong60 + 12
#include51.h + 15
Trump1438 + 12 很給力!

查看全部評分

回復

使用道具 舉報

8#
ID:449525 發表于 2019-1-28 11:07 | 只看該作者
項目都是模塊各個文件,51那個一個文件,后面代碼多了,不方便查看。
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 高清一区二区三区 | 欧美日韩亚洲一区二区 | 99热首页| 久久久久久久国产精品视频 | 日韩中文字幕高清 | 中文字幕亚洲一区二区va在线 | 久久亚 | 91精品国产91久久久久久密臀 | 日韩中文字幕免费在线观看 | 欧美日韩亚洲三区 | 伊人色综合久久久天天蜜桃 | 国内精品久久久久久 | 色婷婷九月 | 亚洲精品在线91 | 欧美综合一区二区三区 | 91中文字幕在线 | 久久久九九 | 龙珠z国语版在线观看 | 久久国产精品视频 | 国产婷婷色一区二区三区 | 日韩精品一区二区三区久久 | 国产精品亚洲综合 | 网站国产| 九色在线视频 | 五月激情六月婷婷 | 日韩一区二区视频 | 国产重口老太伦 | 视频一二区| 中文字幕在线一区二区三区 | 91成人在线| 亚洲国产精品99久久久久久久久 | 日韩av在线一区 | 中文字幕av网 | 亚洲精品一二区 | 国产成人精品免费视频大全最热 | 国产精品美女一区二区 | 国产精品成人一区二区三区 | 国产一二三区在线 | 麻豆国产一区二区三区四区 | 粉嫩国产精品一区二区在线观看 | 日本在线免费视频 |