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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 3463|回復(fù): 2
打印 上一主題 下一主題
收起左側(cè)

##單片機交通燈 4個數(shù)碼管

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:198674 發(fā)表于 2017-5-9 16:37 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
#include <reg52.h>                 //調(diào)用單片機頭文件
#define uchar unsigned char   //宏定義"uchar"代替"unsigned char"。
#define uint  unsigned int          //宏定義"uint"用來定義無符號整型數(shù)。


//數(shù)碼管段選定義 0     1    2    3           4           5        6         7          8           9       
uchar code smg_du[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,
//                                           A        B         C          D           E   F        不顯示
                                         0x88,0x83,0xc6,0xa1,0x86,0x8e,0xff};         //斷碼       

uchar dis_smg[8] = {0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8};       
uchar smg_i = 4;    //顯示數(shù)碼管的個位數(shù)

//數(shù)碼管位選定義
sbit smg_we1 = P2^0;            //數(shù)碼管位選定義
sbit smg_we2 = P2^1;
sbit smg_we3 = P3^6;
sbit smg_we4 = P3^7;


char dx_s = 0;        //東西  南北 倒計時變量
sbit dx_red    = P2^4;            //東西紅燈
sbit dx_green  = P2^3;                //東西綠燈
sbit dx_yellow = P2^2;                //東西黃燈

sbit nb_red    = P2^7;                //南北紅燈
sbit nb_green  = P2^6;                //南北綠燈
sbit nb_yellow = P2^5;                //南北黃燈       

uchar flag_jtd_mode;  //交通燈的模式 根據(jù)時間
bit flag_1s = 0;
bit flag_500ms;
bit flag_dx_nb;                 //東西南北模式
uchar flag_5m_value;
uchar i;
uchar flag_alarm;        //模式
uchar dx_time = 30,nb_time = 20;   //東西、南北的時間
uchar flag_jdgz ;     //交通管制


/***********************數(shù)碼位選函數(shù)*****************************/
void smg_we_switch(uchar i)
{
        switch(i)
        {
                case 0: smg_we1 = 0;  smg_we2 = 1; smg_we3 = 1;  smg_we4 = 1; break;
                case 1: smg_we1 = 1;  smg_we2 = 0; smg_we3 = 1;  smg_we4 = 1; break;
                case 2: smg_we1 = 1;  smg_we2 = 1; smg_we3 = 0;  smg_we4 = 1; break;
                case 3: smg_we1 = 1;  smg_we2 = 1; smg_we3 = 1;  smg_we4 = 0; break;
        }       
}


/********************************************************************
* 名稱 : delay_1ms()
* 功能 : 延時1ms函數(shù)
* 輸入 : q
* 輸出 : 無
***********************************************************************/
void delay_1ms(uint q)
{
        uint i,j;
        for(i=0;i<q;i++)
                for(j=0;j<110;j++);
}


/********************************************************************
* 名稱 : display()
* 功能 : 數(shù)碼管顯示
* 輸入 : 無
* 輸出 : 無
***********************************************************************/
void display()
{
        uchar i;
        for(i=0;i<smg_i;i++)
        {               
                P0 = 0xff;                  //消隱
                smg_we_switch(i);            //位選
                P0 = dis_smg[i];          //段選          
                delay_1ms(3);
        }
}

/*********************定時器0、定時器1初始化******************/
void time0_init()          
{
        EA  = 1;                   //開總中斷
        TMOD = 0X11;          //定時器0、定時器1工作方式1
        ET0 = 1;                  //開定時器0中斷
        TR0 = 1;                  //允許定時器0定時
//        ET1 = 1;                  //開定時器1中斷
//        TR1 = 1;                  //允許定時器1定時       
}

/*********************交通燈處理函數(shù)*********************************/
void jiaotongdeng_dis()
{
        if(flag_1s == 1)
        {
                flag_1s = 0;
                if(dx_s == 0)
                {
                        if(flag_dx_nb == 1)
                                dx_s = nb_time;          //南北時間
                        else
                                dx_s = dx_time;          //東西時間
                        flag_dx_nb = ~flag_dx_nb;
                }
                dx_s --;
        }
        dis_smg[0] = smg_du[dx_s % 10] ;
        dis_smg[1] = smg_du[dx_s / 10] ;
        dis_smg[2] = smg_du[dx_s % 10] ;
        dis_smg[3] = smg_du[dx_s / 10] ;

/***********************南北時間*********************************/
                if(flag_dx_nb == 0)  
                {
                        if(dx_s > 5)
                        {
                                dx_red    = 1;  //滅
                                dx_green  =        0;        //亮
                                dx_yellow = 1;        //滅
                                nb_red    = 0;  //亮
                                nb_green  =        1;        //滅
                                nb_yellow = 1;        //滅
                                flag_5m_value = 0;       
                        }else if(dx_s <= 5)                 //當(dāng)小于5秒時  黃燈要閃了
                        {
                                dx_red    = 1;    //滅
                                dx_green  =        1;          //滅
                                nb_red    = 0;    //亮
                                nb_green  =        1;          //滅
                                nb_yellow = 1;          //滅
                                if(flag_500ms == 0)
                                {
                                        dx_yellow = 0;//亮       
                                }
                                else
                                {
                                        dx_yellow = 1;//滅       
                                }
                        }
                }
/***********************東西時間*********************************/
                if(flag_dx_nb == 1)  
                {
                        if(dx_s > 5)
                        {
                                dx_red    = 0;     //亮
                                dx_green  =        1;           //滅
                                dx_yellow = 1;           //滅
                                nb_red    = 1;     //滅
                                nb_green  =        0;           //亮
                                nb_yellow = 1;           //滅
                                flag_5m_value = 0;       
                        }else if(dx_s <= 5)                 //當(dāng)小于5秒時  黃燈要閃了
                        {
                                dx_red    = 0;     //滅
                                dx_green  =        1;           //滅
                                dx_yellow = 1;           //滅
                                nb_red    = 1;     //滅
                                nb_green  =        1;           //滅
                                if(flag_500ms == 0)           //黃燈閃爍
                                {
                                        nb_yellow = 0;        //亮       
                                }
                                else
                                {
                                        nb_yellow = 1;        //滅       
                                }
                        }
        }                       
}

/********************獨立按鍵程序*****************/
uchar key_can;         //按鍵值

void key()         //獨立按鍵程序
{
        static uchar key_new;
        key_can = 20;                   //按鍵值還原
        P1 |= 0x1f;
        if((P1 & 0x1f) != 0x1f)                //按鍵按下
        {
                delay_1ms(1);                     //按鍵消抖動
                if(((P1 & 0x1f) != 0x1f) && (key_new == 1))
                {                                                //確認(rèn)是按鍵按下
                        key_new = 0;
                        switch(P1 & 0x1f)
                        {
                                case 0x1e:  key_can = 1;  break;         //得到按鍵值
                                case 0x1d:  key_can = 2;  break;         //得到按鍵值
                                case 0x1b:  key_can = 3;  break;         //得到按鍵值
                                case 0x17:  key_can = 4;  break;         //得到按鍵值
                        }
                }                       
        }
        else
                key_new = 1;       
}

uchar menu_1,flag_s;


/********************設(shè)置函數(shù)*****************/
void key_with()
{
        if(key_can == 4)   //交通管制按鍵
        {
                flag_jdgz ++;
                if(flag_jdgz > 5)
                        flag_jdgz = 0;       
                if(flag_jdgz == 1)         //  全部亮紅燈
                {
                        dx_red    = 0;  //亮
                        dx_green  =        1;        //滅
                        dx_yellow = 1;        //滅
                        nb_red    = 0;  //亮
                        nb_green  =        1;        //滅
                        nb_yellow = 1;        //滅                       
                }
                if(flag_jdgz == 2)         //  東西紅燈  南北綠燈
                {
                        dx_red    = 0;  //亮
                        dx_green  =        1;        //滅
                        dx_yellow = 1;        //滅
                        nb_red    = 1;  //滅
                        nb_green  =        0;        //亮
                        nb_yellow = 1;        //滅                       
                }
                if(flag_jdgz == 3)         //  南北紅燈  東西綠燈
                {
                        dx_red    = 1;  //滅
                        dx_green  =        0;        //亮
                        dx_yellow = 1;        //滅
                        nb_red    = 0;  //亮
                        nb_green  =        1;        //滅
                        nb_yellow = 1;        //滅                       
                }
                if(flag_jdgz == 4)         //  南北綠燈  東西綠燈
                {
                        dx_red    = 1;  //滅
                        dx_green  =        0;        //亮
                        dx_yellow = 1;        //滅
                        nb_red    = 1;  //滅
                        nb_green  =        0;        //亮
                        nb_yellow = 1;        //滅                       
                }
                if(flag_jdgz == 5)         //  南北黃燈  東西黃燈
                {
                        dx_red    = 1;  //滅
                        dx_green  =        1;        //滅
                        dx_yellow = 0;        //亮
                        nb_red    = 1;  //滅
                        nb_green  =        1;        //滅
                        nb_yellow = 0;        //亮                       
                }
        }
        if(key_can == 1)          //設(shè)置鍵
        {
                menu_1 ++;
                if(menu_1 >= 3)
                {
                        menu_1  = 0;
                }
        }

        if(menu_1 == 1)           //設(shè)置東西的時間
        {
                if(key_can == 2)
                {
                        dx_time ++ ;                //加1
                        if(dx_time > 99)
                                dx_time = 99;
                }
                if(key_can == 3)
                {
                        dx_time -- ;                //減1
                        if(dx_time <= 10)
                                dx_time = 10;
                }
                dis_smg[0] = smg_du[10] ;        //顯示為A
                dis_smg[1] = smg_du[10] ;        //顯示為A
                dis_smg[2] = smg_du[dx_time % 10] ;                //顯示東西設(shè)置的時候
                dis_smg[3] = smg_du[dx_time / 10] ;       
        }       
        if(menu_1 == 2)           //設(shè)置南北的時間
        {
                if(key_can == 2)
                {
                        nb_time ++ ;                //加1
                        if(nb_time > 99)
                                nb_time = 99;
                }
                if(key_can == 3)
                {
                        nb_time -- ;                //減1
                        if(nb_time <= 10)
                                nb_time = 10;
                }
                dis_smg[0] = smg_du[11] ;        //顯示為B
                dis_smg[1] = smg_du[11] ;        //顯示為B
                dis_smg[2] = smg_du[nb_time % 10] ;                //顯示東西設(shè)置的時候
                dis_smg[3] = smg_du[nb_time / 10] ;       
        }
}


/********************************************************************
* 名稱 : main()
* 功能 : 實現(xiàn)燈的閃爍
* 輸入 : 無
* 輸出 : 無
***********************************************************************/
void main()
{
        time0_init();
        dx_s = nb_time;          //東西時間
        while(1)
        {
                key();
                if(key_can < 20)
                        key_with();
//                menu_dis();
                if((menu_1 == 0) && (flag_jdgz == 0))
                        jiaotongdeng_dis();
                display();       
        }
}  

/*********************定時器0中斷服務(wù)程序************************/
void time0_int() interrupt 1  
{                                                  
        static uchar value;                         //定時10ms中斷一次
        TH0 = 0x3c;
        TL0 = 0xb0;     //50ms
        value ++;
        flag_5m_value++;
        if(flag_5m_value % 10 == 0)
                flag_500ms = ~flag_500ms;
        if(value >= 20)
        {
                value = 0;
                flag_1s = 1;
        }
}

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

使用道具 舉報

沙發(fā)
ID:205496 發(fā)表于 2017-5-27 20:48 | 只看該作者
樓主,那個uchar dx_time = 30,nb_time = 200;是指設(shè)置東西紅燈30秒,南北紅燈20秒嗎?
回復(fù)

使用道具 舉報

板凳
ID:205496 發(fā)表于 2017-5-27 20:59 | 只看該作者
uchar dx_time = 30,nb_time = 20;   是指設(shè)置東西通行時間30秒,南北通行時間20秒還是指東西紅燈30秒,南北紅燈20秒
回復(fù)

使用道具 舉報

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

本版積分規(guī)則

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

Powered by 單片機教程網(wǎng)

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 激情久久网 | 欧美一级一 | www日韩高清 | 久久久久亚洲精品中文字幕 | 一区二区在线免费观看 | 日韩成人免费视频 | 99精品国自产在线观看 | 日本粉嫩一区二区三区视频 | 成人在线精品视频 | 成人免费精品 | 在线日韩 | www.三级 | 亚洲欧美激情国产综合久久久 | 久久久久精 | 国内精品99| 亚洲福利一区二区 | 精品一二区 | 91精品国产91久久久久福利 | 久久综合入口 | 不卡一区二区三区四区 | 伊人二区| 性一区 | 国产成人亚洲精品 | 日韩在线小视频 | 三级免费网 | 亚洲黄色av| 91麻豆精品国产91久久久资源速度 | 精品欧美一区二区三区久久久 | 黑人巨大精品欧美一区二区免费 | 国产视频91在线 | 亚洲国产偷 | 亚洲黄色视屏 | 国产电影一区二区三区爱妃记 | 久久久精品网 | 成人久久一区 | 亚洲成人一区 | 麻豆av在线| 欧美午夜精品 | 国产69久久精品成人看动漫 | 伊久在线| 欧美国产精品一区二区三区 |