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

標(biāo)題: 我的交通燈的課程設(shè)計(jì) [打印本頁(yè)]

作者: 短發(fā)    時(shí)間: 2017-6-26 10:10
標(biāo)題: 我的交通燈的課程設(shè)計(jì)
這是之前做的一個(gè)交通燈的仿真和原理圖,很實(shí)用,可以用來參考和課程設(shè)計(jì),分享給大家。
#include <REGX52.H>

typedef unsigned char u8;
typedef unsigned int u16;

void Time_Initialize(void);
void SEG_Display_4(u8 *BUFF);
//管腳定義

#define SEG_PORT_D P0//數(shù)碼管端口定義
sbit SEG_PORT_W1 = P2^0;
sbit SEG_PORT_W2 = P2^1;
sbit SEG_PORT_W3 = P2^2;
sbit SEG_PORT_W4 = P2^3;

//變量定義
code u8 SEG_CODE[] = {0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90,0xFF};//數(shù)碼管顯示的編碼0--9
u8 SEG_SWITCH_NUM = 0;//數(shù)碼管切換變量
u8 SEG_SWITCH_TEMP = 0x01;//用作移位的變量

sbit LED_RED_EW = P3^0;//東西走向燈控制
sbit LED_YELLOW_EW = P3^1;
sbit LED_GREEN_EW = P3^2;

sbit LED_RED_SN = P3^3;//南北走向燈控制
sbit LED_YELLOW_SN = P3^4;
sbit LED_GREEN_SN = P3^5;

sbit KEY_MODE = P1^0;//正常或者緊急模式切換按鍵

u8 RunModeNom = 0;//正常運(yùn)行步驟

u8 RunTime = 25;//時(shí)間
u8 RunTime_SN = 25;//時(shí)間
u8 RunTime_EW = 25;//時(shí)間

u8 SysMode = 0;//0表示正常運(yùn)行模式 1表示非正常運(yùn)行

void main(void)//主程序
{
        u8 DisplayBuff[4] = {10,10,10,10};
        Time_Initialize();//定時(shí)器初始化
        while(1)
        {
                if(!KEY_MODE)//模式按鍵按下
                {
                        SysMode = ~SysMode;
                        while(!KEY_MODE);
                }
                if(SysMode == 0)
                {
                        TR0 = 1;//打開定時(shí)器
                        DisplayBuff[0] = RunTime_EW / 10;//顯示時(shí)間倒計(jì)時(shí)
                        DisplayBuff[1] = RunTime_EW % 10;
                        DisplayBuff[2] = RunTime_SN / 10;
                        DisplayBuff[3] = RunTime_SN % 10;
                }
                else
                {
                        TR0 = 0;//關(guān)閉定時(shí)器
                        DisplayBuff[0] = 10;//不顯示
                        DisplayBuff[1] = 10;
                        DisplayBuff[2] = 10;
                        DisplayBuff[3] = 10;
                        LED_RED_SN = 1;
                        LED_YELLOW_SN = 0;//東西亮黃燈
                        LED_GREEN_SN = 0;
                        LED_RED_EW = 1;
                        LED_YELLOW_EW = 0;
                        LED_GREEN_EW = 0;//東西亮綠燈
                }
                SEG_Display_4(DisplayBuff);
        }
}

void Time_Initialize(void)//定時(shí)50ms
{
        TMOD = 0x01;
        TL0 = 0xb0 ;                     
        TH0 = 0x3c ;
        TR0 = 1;
        ET0 = 1;
        EA = 1;
}

u16 TIM_Count = 0;

void Tm0_Isr() interrupt 1//定時(shí)器中斷
{
        TL0 = 0xb0 ;                     
        TH0 = 0x3c ;
        TIM_Count ++;
        if(TIM_Count >= 20)//表示1s
        {
                TIM_Count = 0;
                if(RunTime == 0)
                {
                        RunModeNom ++;
                        if(RunModeNom >= 2) RunModeNom = 0;//循環(huán)
                        if(RunModeNom == 0)
                        {
                                RunTime = 25;
                        }
                        else if(RunModeNom == 1)
                        {
                                RunTime = 30;
                        }
                }
                else
                {
                        RunTime --;
                }
                if(RunModeNom == 0)
                {
                        LED_RED_SN = 1;
                        LED_YELLOW_SN = 0;
                        LED_GREEN_SN = 0;//都是紅燈
                        RunTime_SN = RunTime;
                        if(RunTime > 5)
                        {
                                LED_RED_EW = 0;
                                LED_YELLOW_EW = 0;
                                LED_GREEN_EW = 1;//東西亮綠燈
                                RunTime_EW = RunTime - 2;
                        }
                        else if((RunTime <= 5)&&(RunTime > 2))
                        {
                                LED_RED_EW = 0;
                                LED_YELLOW_EW = 0;
                                LED_GREEN_EW = !LED_GREEN_EW;//東西綠燈閃爍
                                RunTime_EW = RunTime - 2;
                        }
                        else if(RunTime <= 2)
                        {
                                RunTime_EW = RunTime;
                                LED_RED_EW = 0;
                                LED_YELLOW_EW = 1;//東西亮黃燈
                                LED_GREEN_EW = 0;
                        }
                }
                else if(RunModeNom == 1)
                {
                        LED_RED_EW = 1;
                        LED_YELLOW_EW = 0;
                        LED_GREEN_EW = 0;//都是紅燈
                        RunTime_EW = RunTime;
                        if(RunTime > 5)
                        {
                                LED_RED_SN = 0;
                                LED_YELLOW_SN = 0;
                                LED_GREEN_SN = 1;//東西亮綠燈
                                RunTime_SN = RunTime - 2;
                        }
                        else if((RunTime <= 5)&&(RunTime > 2))
                        {
                                LED_RED_SN = 0;
                                LED_YELLOW_SN = 0;
                                LED_GREEN_SN = !LED_GREEN_SN;//東西綠燈閃爍
                                RunTime_SN = RunTime - 2;
                        }
                        else if(RunTime <= 2)
                        {
                                LED_RED_SN = 0;
                                LED_YELLOW_SN = 1;//東西亮黃燈#include <REGX52.H>

typedef unsigned char u8;
typedef unsigned int u16;

void Time_Initialize(void);
void SEG_Display_4(u8 *BUFF);
//管腳定義

#define SEG_PORT_D P0//數(shù)碼管端口定義
sbit SEG_PORT_W1 = P2^0;
sbit SEG_PORT_W2 = P2^1;
sbit SEG_PORT_W3 = P2^2;
sbit SEG_PORT_W4 = P2^3;

//變量定義
code u8 SEG_CODE[] = {0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90,0xFF};//數(shù)碼管顯示的編碼0--9
u8 SEG_SWITCH_NUM = 0;//數(shù)碼管切換變量
u8 SEG_SWITCH_TEMP = 0x01;//用作移位的變量

sbit LED_RED_EW = P3^0;//東西走向燈控制
sbit LED_YELLOW_EW = P3^1;
sbit LED_GREEN_EW = P3^2;

sbit LED_RED_SN = P3^3;//南北走向燈控制
sbit LED_YELLOW_SN = P3^4;
sbit LED_GREEN_SN = P3^5;

sbit KEY_MODE = P1^0;//正常或者緊急模式切換按鍵

u8 RunModeNom = 0;//正常運(yùn)行步驟

u8 RunTime = 25;//時(shí)間
u8 RunTime_SN = 25;//時(shí)間
u8 RunTime_EW = 25;//時(shí)間

u8 SysMode = 0;//0表示正常運(yùn)行模式 1表示非正常運(yùn)行

void main(void)//主程序
{
        u8 DisplayBuff[4] = {10,10,10,10};
        Time_Initialize();//定時(shí)器初始化
        while(1)
        {
                if(!KEY_MODE)//模式按鍵按下
                {
                        SysMode = ~SysMode;
                        while(!KEY_MODE);
                }
                if(SysMode == 0)
                {
                        TR0 = 1;//打開定時(shí)器
                        DisplayBuff[0] = RunTime_EW / 10;//顯示時(shí)間倒計(jì)時(shí)
                        DisplayBuff[1] = RunTime_EW % 10;
                        DisplayBuff[2] = RunTime_SN / 10;
                        DisplayBuff[3] = RunTime_SN % 10;
                }
                else
                {
                        TR0 = 0;//關(guān)閉定時(shí)器
                        DisplayBuff[0] = 10;//不顯示
                        DisplayBuff[1] = 10;
                        DisplayBuff[2] = 10;
                        DisplayBuff[3] = 10;
                        LED_RED_SN = 1;
                        LED_YELLOW_SN = 0;//東西亮黃燈
                        LED_GREEN_SN = 0;
                        LED_RED_EW = 1;
                        LED_YELLOW_EW = 0;
                        LED_GREEN_EW = 0;//東西亮綠燈
                }
                SEG_Display_4(DisplayBuff);
        }
}

void Time_Initialize(void)//定時(shí)50ms
{
        TMOD = 0x01;
        TL0 = 0xb0 ;                     
        TH0 = 0x3c ;
        TR0 = 1;
        ET0 = 1;
        EA = 1;
}

u16 TIM_Count = 0;

void Tm0_Isr() interrupt 1//定時(shí)器中斷
{
        TL0 = 0xb0 ;                     
        TH0 = 0x3c ;
        TIM_Count ++;
        if(TIM_Count >= 20)//表示1s
        {
                TIM_Count = 0;
                if(RunTime == 0)
                {
                        RunModeNom ++;
                        if(RunModeNom >= 2) RunModeNom = 0;//循環(huán)
                        if(RunModeNom == 0)
                        {
                                RunTime = 25;
                        }
                        else if(RunModeNom == 1)
                        {
                                RunTime = 30;
                        }
                }
                else
                {
                        RunTime --;
                }
                if(RunModeNom == 0)
                {
                        LED_RED_SN = 1;
                        LED_YELLOW_SN = 0;
                        LED_GREEN_SN = 0;//都是紅燈
                        RunTime_SN = RunTime;
                        if(RunTime > 5)
                        {
                                LED_RED_EW = 0;
                                LED_YELLOW_EW = 0;
                                LED_GREEN_EW = 1;//東西亮綠燈
                                RunTime_EW = RunTime - 2;
                        }
                        else if((RunTime <= 5)&&(RunTime > 2))
                        {
                                LED_RED_EW = 0;
                                LED_YELLOW_EW = 0;
                                LED_GREEN_EW = !LED_GREEN_EW;//東西綠燈閃爍
                                RunTime_EW = RunTime - 2;
                        }
                        else if(RunTime <= 2)
                        {
                                RunTime_EW = RunTime;
                                LED_RED_EW = 0;
                                LED_YELLOW_EW = 1;//東西亮黃燈
                                LED_GREEN_EW = 0;
                        }
                }
                else if(RunModeNom == 1)
                {
                        LED_RED_EW = 1;
                        LED_YELLOW_EW = 0;
                        LED_GREEN_EW = 0;//都是紅燈
                        RunTime_EW = RunTime;
                        if(RunTime > 5)
                        {
                                LED_RED_SN = 0;
                                LED_YELLOW_SN = 0;
                                LED_GREEN_SN = 1;//東西亮綠燈
                                RunTime_SN = RunTime - 2;
                        }
                        else if((RunTime <= 5)&&(RunTime > 2))
                        {
                                LED_RED_SN = 0;
                                LED_YELLOW_SN = 0;
                                LED_GREEN_SN = !LED_GREEN_SN;//東西綠燈閃爍
                                RunTime_SN = RunTime - 2;
                        }
                        else if(RunTime <= 2)
                        {
                                LED_RED_SN = 0;
                                LED_YELLOW_SN = 1;//東西亮黃燈
                                LED_GREEN_SN = 0;
                                RunTime_SN = RunTime;
                        }
                }
        }
}

void SEG_Display_4(u8 *BUFF)//一共顯示4位
{
        SEG_PORT_D =         SEG_CODE[10];//段選都不亮
        if(SEG_SWITCH_NUM == 0)
        {
                SEG_PORT_W1 = 1;
                SEG_PORT_W2 = 0;
                SEG_PORT_W3 = 0;
                SEG_PORT_W4 = 0;
        }
        else if(SEG_SWITCH_NUM == 1)
        {
                SEG_PORT_W1 = 0;
                SEG_PORT_W2 = 1;
                SEG_PORT_W3 = 0;
                SEG_PORT_W4 = 0;
        }
        else if(SEG_SWITCH_NUM == 2)
        {
                SEG_PORT_W1 = 0;
                SEG_PORT_W2 = 0;
                SEG_PORT_W3 = 1;
                SEG_PORT_W4 = 0;
        }
        else if(SEG_SWITCH_NUM == 3)
        {
                SEG_PORT_W1 = 0;
                SEG_PORT_W2 = 0;
                SEG_PORT_W3 = 0;
                SEG_PORT_W4 = 1;
        }
        SEG_PORT_D =         SEG_CODE[*(BUFF + SEG_SWITCH_NUM)];
        SEG_SWITCH_NUM ++;
        if(SEG_SWITCH_NUM >= 4)
        {
                SEG_SWITCH_NUM = 0;
        }
}
                                LED_GREEN_SN = 0;
                                RunTime_SN = RunTime;
                        }
                }
        }
}

void SEG_Display_4(u8 *BUFF)//一共顯示4位
{
        SEG_PORT_D =         SEG_CODE[10];//段選都不亮
        if(SEG_SWITCH_NUM == 0)
        {
                SEG_PORT_W1 = 1;
                SEG_PORT_W2 = 0;
                SEG_PORT_W3 = 0;
                SEG_PORT_W4 = 0;
        }
        else if(SEG_SWITCH_NUM == 1)
        {
                SEG_PORT_W1 = 0;
                SEG_PORT_W2 = 1;
                SEG_PORT_W3 = 0;
                SEG_PORT_W4 = 0;
        }
        else if(SEG_SWITCH_NUM == 2)
        {
                SEG_PORT_W1 = 0;
                SEG_PORT_W2 = 0;
                SEG_PORT_W3 = 1;
                SEG_PORT_W4 = 0;
        }
        else if(SEG_SWITCH_NUM == 3)
        {
                SEG_PORT_W1 = 0;
                SEG_PORT_W2 = 0;
                SEG_PORT_W3 = 0;
                SEG_PORT_W4 = 1;
        }
        SEG_PORT_D =         SEG_CODE[*(BUFF + SEG_SWITCH_NUM)];
        SEG_SWITCH_NUM ++;
        if(SEG_SWITCH_NUM >= 4)
        {
                SEG_SWITCH_NUM = 0;
        }
} 交通燈2.zip (56.46 KB, 下載次數(shù): 12)






歡迎光臨 (http://m.zg4o1577.cn/bbs/) Powered by Discuz! X3.1
主站蜘蛛池模板: 欧美精品欧美精品系列 | 精品一区二区三区在线视频 | 激情影院久久 | 日干夜干 | 天天拍夜夜爽 | 亚洲精品专区 | 国产精品美女久久久久久久网站 | 逼逼网| 久久9热 | 久久婷婷国产香蕉 | 日日av| 亚洲精品第一 | 亚洲成人毛片 | 欧美综合精品 | 国产真实乱对白精彩久久小说 | 久久精品一区二区三区四区 | 精品一二区 | 日韩精品久久久 | 国产精品久久久久久久久久久久冷 | 欧美激情在线精品一区二区三区 | 一区二区三区不卡视频 | 精品国产久 | 福利网址 | 一区二区三区精品视频 | 日本精品在线播放 | 精品国产一区二区三区性色 | 成人av在线播放 | 美女黄频| 国产精品国产三级国产aⅴ中文 | 又黄又色 | 欧美精品久久久久 | 日韩成人专区 | 久久久久网站 | 免费一区| 亚洲最大成人综合 | 欧美日韩第一页 | 99久久精品免费看国产四区 | 人人玩人人干 | 欧美一级在线免费 | 日日骚视频 | 91影院在线观看 |