欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 3156|回復: 3
收起左側

求一個單片機交通燈程序的編寫思路

[復制鏈接]
ID:949775 發表于 2021-7-6 11:14 | 顯示全部樓層 |閱讀模式
由于本論壇禁止直接求程序,禁止伸手黨,所以向大家請教一下大致的實現方法與思路,理清頭緒后我自己來寫程序去實現,謝謝大家

基于單片機設計實現十字路口交通燈控制。
要求具有以下:
1)搭建硬件電路。
2)控制器軟件設計。
3)使用8個二極管(南紅D1、南綠D2、北紅D3、北綠D4、東紅D5、東綠D6、西紅D7、西綠D8)模擬十字路口交通燈管理;
4)用綠燈閃爍3s代替黃燈;
5)南北向做主路口;
6)6個LED數碼管分別作為南向、北向、東向的2位倒計時顯示裝置
7)具備斷電記憶功能。
1.3發揮部分
1)增加其它自主創新功能;
2)進行實物類設計并對設計進行驗證。
stc89C52的單片機
51hei圖片_20210706111714.jpg
回復

使用道具 舉報

ID:954312 發表于 2021-7-19 23:48 | 顯示全部樓層
#include<reg51.h>
#include<intrins.h>
#include<absacc.h>
#define uint unsigned int
#define uchar unsigned char

#define PA         XBYTE[0x7F00]   //PA端口地址
#define PB         XBYTE[0x7F01]               
#define PC         XBYTE[0x7F02]
#define COM         XBYTE[0x7F03]

        uchar temp,aa,nn;
        
        sbit shi=P3^0;
        sbit ge=P3^1;        /*對要使用的單片機各個口進行定義*/
        bit flag=0;
   sbit key1=P2^0;
        sbit key2=P2^1;
        sbit key3=P2^2;
   sbit key4=P2^3;
   sbit key5=P2^4;
   sbit key6=P3^3;
        uchar code table[]={
        0x3f,0x06,0x5b,0x4f,
        0x66,0x6d,0x7d,0x07,
        0x7f,0x6f,0x77,0x7c,
        0x39,0x5e,0x79,0x71};         /*將數字0123456789的16進制數定義成數組用以顯示*/
   //定義所有函數
        void delay(uint z);
        void disp(uint n);
        void  xint0();
        void  xint1();
        void timer0();
        void nb_flash(void);
        void dx_flash(void);
        void nanbei();
        void dongxi();                 
   void nanbeizuo();
        void dongxizuo();
   void dongxizuogreen();
        void nanbeizuogreen();
        void  dongxigreen();
        void  nanbeigreen();
        void allred();
        void allyellow();
        //主函數
        void main()        
        {
                uint num;
                num=0;
                aa=0;
                COM =0x82;        //PA口輸出,PB口輸入,PC口輸出
                TMOD=0x01;        //定時器工作方式1
                TH0=(65536-50000)/256;
                TL0=(65536-50000)%256;
                EA=1;            //開啟總中斷
                ET0=1;           //開啟定時器中斷
                TR0=1;           //開啟定時器0
                EX0=1;           //外部中斷0允許標志
                IT0=0;           //外部中斷0電平觸發
                EX1=1;           //外部中斷1允許標志
                IT1=0;                      //外部中斷1電平觸發
               
                while(1){
                         nanbei();
                         nb_flash();
                         nanbeizuo();
                         dongxi();
                         dx_flash();
                         dongxizuo();
          }
               
  }

        void delay(uint z)                    //延時函數
        {
                uint x,y;
                for(x=z;x>0;x--)
                        for(y=110;y>0;y--);
        }

        void timer0() interrupt 1            //定時器0中斷
        {
                TH0=(65536-50000)/256;
                TL0=(65536-50000)%256;
                aa++;
                if(aa==18)
                {
                        aa=0;
                        flag=1;
                }        
               
        }
        void disp(uint n)                    //數碼管顯示函數
        {
          while(!flag)
          {
                  ge=0;
                  PC=table[n%10];
                  delay(50);
                  shi=1;ge=1;
                  shi=0;
                  PC=table[n/10];
                  delay(50);
                  shi=1;ge=1;
           }
          if(flag==1)
             flag=0;
        }
        void nanbei()                    //南北綠燈東西紅燈及數碼管顯示
        {                //南北通行
                uint num;
                        num=60;
                        disp(num);
                  
                        while(num<=60&&num>0)
                        {        PA=0xd8;
                                num--;
                           P1=0xe1;
                                disp(num);                        
                        }                        
        }
        void nanbeizuo()                    //南北方向左轉及數碼管顯示
        {                uint num;
                        num=15;
                  
                        disp(num);
                        while(num<=15&&num>0)
                        {        P1=0xe4;         
                                num--;
                             PA=0xe9;
                           disp(num);                        
                        }
        }
        void dongxizuo()                     //東西方向左轉及數碼管顯示
        {                uint num;                        
                         num=15;
                  
                        while(num<=15&&num>0)
                        {        P1=0xe4;
                                PA=0xea;         
                                disp(num);
                                num--;
                        }
        }
        void dongxi()                     //東西綠燈南北紅燈及數碼管顯示
        {                uint num;

                         num=45;
                   disp(num);
                        while(num<=45&&num>0)
                        {        
            PA=0xe4;        
                                P1=0xcc;         
                                disp(num);
                                num--;
                        }
        }
        void nb_flash(void)              //南北方向黃燈閃爍及數碼管顯示
        {
                uint a;
               
                for(a=3;a>0;a--)
                {        PA=0xd8;
                        disp(a);
                        P1=0xe2;
                        
                         delay(100);
                        P1=0xe0;
                        
                }
        }
        void dx_flash(void)                //東西方向黃燈閃爍及數碼管顯示
        {
                uint a;
               
                for(a=3;a>0;a--)
                {         PA=0xe4;
                         disp(a);
                         P1=0xd4;
                         delay(100);
                         P1=0xa4;
                        
                }
        }
void  xint0()  interrupt 0               //外部中斷0
{        
        TH0=(65536-50000)/256;
        TL0=(65536-50000)%256;
   if(key1==0){
                if(key1==0)
                {
                        delay(20);
                        allred();
                        
                }
        }        
        if(key2==0){
                if(key2==0)
                {
                        
                        delay(20);
                        allyellow();
                        
                }               
        }
        if(key3==0){
                if(key3==0)
                {
                        delay(20);
                        nanbeigreen();
                }               
        }
        if(key4==0){
                if(key4==0)
                {
                        delay(20);
                        dongxigreen();
                }               
        }
        if(key5==0){
                if(key5==0)
                {
                        delay(20);
                        nanbeizuogreen();
                }               
        }
        
}
void  allred()                         //南北東西方向全部紅燈   
{                        
              
                        P1=0xe4;
              PC=0x00;
         PA=0xe8;                          
                        return;
}
void  allyellow()                       //南北東西方向全部黃燈   
{               
              
                   P1=0xd2;
              PC=0x00;
         PA=0x00;                          
                        return;
}

void  nanbeizuogreen()                    //南北方向左轉綠燈  
{                        
                        P1=0xe4;
              PC=0x00;
         PA=0xe9;                          
                        return;
}
void  dongxizuogreen()                    //東西方向左轉綠燈  
{                        
                        P1=0xe4;
              PC=0x00;
         PA=0xea;                          
                        return;
}

void  nanbeigreen()                       //南北方向綠燈  
{                        
                        P1=0xe1;
              PC=0x00;
         PA=0xe8;  
                        return;
}
void  dongxigreen()                       //東西方向綠燈  
{                        
                        P1=0xcc;
              PC=0x00;
         PA=0xe8;         
                        return;
}
void  xint1()  interrupt 2                     //外部中斷1
{        
        TH0=(65536-50000)/256;
        TL0=(65536-50000)%256;
          dongxizuogreen();
}


回復

使用道具 舉報

ID:752974 發表于 2021-7-21 10:47 | 顯示全部樓層
這種問題去十字路口仔細觀察一下,就知道其控制規律了。
回復

使用道具 舉報

ID:332444 發表于 2021-7-21 13:03 | 顯示全部樓層
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表