分享

单片机交通灯按键控制程序

 lixinhecom 2017-07-27
交通灯仿真原理图如下,带按键控制(proteus仿真工程文件可到本帖附件中下载)


单片机源程序:
  1.    
  2. #include<reg51.H>                                       // ???????????
  3. #define uint unsigned int
  4. #define uchar unsigned char
  5. uchar code a[10]={0x40,0x79,0x24,0x30,0x19,0x12,0x02,0x78,0x00,0x10};//????,???
  6. uchar code b[4]={0x01,0x02,0x04,0x08}; //????         
  7. uchar code c[4]={0xcc,0xd4,0x78,0xb8};/*P1 ???????????*/
  8.                   
  9. //12MHz                          
  10. //*****************************************************************************
  11. uchar NB=25,DX=30,NBG=25,DXG=15,H=5;                      /*????????*/
  12. uchar  i,k=0,cnt=0,j=0;
  13. sbit K0=P3^4;                           /*?????*/
  14. sbit K1=P3^5;                           /*?????*/
  15. sbit K4=P3^6;                           /*??*/
  16. sbit K3=P3^2;                        /*????*/
  17. sbit K2=P3^3;                        /*????*/
  18. void delay(uchar t);               /*??????*/
  19. void key();                                /*??????*/
  20. void display();                        /*??????*/
  21. void settime();                /*??????????*/
  22. //************************????*********************************************
  23. void init(void)
  24. {
  25.         TMOD=0x01;                          /*?????0???*/
  26.         TH0=0x3c;                          /*(65536-5000)/256*/
  27.         TL0=0xb0;                          /*(65536-5000)%256*/
  28.         IT0=1;                                  //???
  29.         ET0=1;
  30.         TR0=1;
  31.         EA=1;
  32.         EX0=1;
  33.         EX1=1;
  34.         P1=c[k];                                  //?????
  35. }
  36. //*************************??0????***************************************
  37. void int0(void) interrupt 0                 //        ??????
  38. {         
  39.   EA=0;
  40.   P1=0xd8;                                /*????*/
  41.   
  42. for(;;)
  43.         {
  44.            settime();

  45.                    if(K1==0)                                          /*P3^6=0?????????*/
  46.            {  
  47.           delay(40);
  48.           if(K1==0)
  49.                   {
  50.              while(!K1)
  51.              {settime();}
  52.                                  DXG++;                                /*????????1*/
  53.              if(DXG==100)
  54.              DXG=0;                        
  55.           }
  56.            }
  57.          
  58.                    if(K0==0)                                                         /*P3^5=0?????????*/
  59.            {  
  60.              delay(40);
  61.              if(K0==0)
  62.                      {
  63.                while(!K0)
  64.                {settime();}
  65.                            NBG++;                                                /*????????1*/
  66.                if(NBG==100)
  67.                NBG=0;               
  68.              }
  69.            }
  70.          
  71.            if(K4==0)                                                           /*P3^7=0??*/
  72.        {  
  73.                 delay(40);        
  74.                     if(K4==0)
  75.                     {
  76.                        while(!K4)
  77.                            {
  78.                            }
  79.                            k=0;P1=c[k];
  80.                            NB=NBG,DX=NBG+H;        
  81.                        display();
  82.                            EA=1;
  83.                         
  84.                    break;
  85.                     }                       
  86.        }
  87.     }
  88. }


  89. //***********************************??1????********************
  90. void int1(void) interrupt 2                                         //????
  91. {                                                                                          
  92.                                                          /*???????*/
  93.         EA=0;                                                                        
  94.         TR0=!TR0;                                                            /*????*/

  95.         for(;;)                                                                   /*????????0*/
  96.         {         
  97.                 P1=0xd8,
  98.                 P0=a[0];
  99.            P2=b[0];
  100.            delay(20);
  101.            
  102.             P2=b[1];
  103.            delay(20);

  104.            P2=b[2];
  105.            delay(20);

  106.            P2=b[3];
  107.            delay(20);
  108.    

  109.            if(K4==0)                                                   /*??*/
  110.         {
  111.                  delay(20);
  112.                 EA=1;
  113.                   
  114.                 P1=c[k];                                          /*???????????*/
  115.                 TR0=!TR0;                                                /*????*/
  116.                 break;                                                           
  117.                 }
  118.         }
  119. }
  120. void time1(void) interrupt 1                                                /*???????*/
  121. {
  122.         TH0=0x3c;                                                                                /*??50ms*/
  123.         TL0=0xb0;                                                                                         
  124.         cnt++;
  125.         
  126.         if(cnt>=20)                                                                                  /*?20*50ms=1s???*/
  127.         {
  128.                 NB--;
  129.                 DX--;
  130.                 cnt=0;
  131.                 if(NB==0||DX==0)
  132.                 {
  133.                         k++;
  134.                         if(k>3)                                                                        /*k?0,1,2,3*/
  135.                         k=0;
  136.                         switch(k)
  137.                         {        
  138.                                 case 0:NB=NBG,DX=NBG+H;j=0;P1=c[k];break;          /*?????????*/
  139.                             case 1:NB=H;j=1;P1=c[k];break;                                           /*???????*/
  140.                                 case 2:NB=DXG+H,DX=DXG;j=0;P1=c[k];break;          /*?????????*/
  141.                                 case 3:DX=H;j=2;P1=c[k];break;                                           /*???????*/
  142.                         }
  143.                 }                 
  144.         }
  145. }
  146. void delay(uchar t)                         //??????0.1*nms   
  147. {
  148.   uchar i;
  149.   do
  150.    {
  151.      for(i=0;i<20;i++)
  152.      ;;;
  153.    } while(t--);
  154. }
  155. void settime()
  156. {
  157.            P2=b[0],P0=a[(NBG+H)%10];        /*?????????         */
  158.        delay(20);
  159.                   
  160.            P2=b[1],P0=a[(NBG+H)/10];        
  161.            delay(20);
  162.                   
  163.            P2=b[2],P0=a[(DXG+H)%10];                /*?????????*/
  164.            delay(20);
  165.                   
  166.        P2=b[3],P0=a[(DXG+H)/10];        
  167.            delay(20);
  168. }
  169. void  key()                                //?????KO K1??????????
  170. {
  171.             if(K1==0)                                           /*??????????*/
  172.     {  
  173.        delay(40);
  174.        if(K1==0)                        
  175.        {
  176.           while(!K1)
  177.           {  
  178.                                  display();
  179.           }
  180.              k=0,P1=c[k];cnt=0;
  181.           NB=NBG, DX=NBG+H;
  182.          display();
  183.        }
  184.     }
  185.            if(K0==0)                                            /*??????????*/
  186.     {  
  187.        delay(40);
  188.        if(K0==0)
  189.        {
  190.           while(!K0)
  191.           {
  192.            display();
  193.           }
  194.                 k=2,P1=c[k];cnt=0;
  195.           NB=DXG+H,DX=DXG;
  196.                    display();
  197.            }
  198.         }
  199. }
  200. void display()                                                        //????
  201.         {
  202.                 P2=b[0],P0=a[NB%10];                           /*?k????????????*/
  203.                 delay(20);
  204.         
  205.                 P2=b[1],P0=a[NB/10];
  206.                 delay(20);
  207.         
  208.                 P2=b[2],P0=a[DX%10];
  209.                 delay(20);
  210.                                                    
  211.                 P2=b[3],P0=a[DX/10];
  212.                 delay(20);
  213.         }
  214. ……………………

  215. …………限于本文篇幅 余下代码请从51黑下载附件………

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多