找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2128|回复: 0
打印 上一主题 下一主题
收起左侧

基于89c51单片机的交通灯变换程序设计

[复制链接]
跳转到指定楼层
楼主
  利用89c51单片机进行交通灯的变换:  利用定时器T0,外部中断0,外部中断1。实现的一个可以路口交通灯转换,并且带有东西(南北)道路的通行禁行,用于交通拥堵时疏导道路交通
  还有当救护车通过时的紧急情况全面禁行道路的功能。
  同时进行现场保护,使得程序可以无限循环而不怕打断。

正常通行状况:





东西通行南北禁行



紧急情况全面禁行

单片机源程序如下:
  1. #include <reg51.h>
  2. #define uchar unsigned char
  3. #define uint unsigned int
  4. uint timer0=0;
  5. uint timer1=0;
  6. uint timer2=0;
  7. uint timer3=0;
  8. uchar second;
  9. uchar second1;
  10. uchar a,b,c,d,e,f,m,n,x,v,j,h;
  11. uchar code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
  12. sbit g=P1^5;
  13. sbit y=P1^6;
  14. sbit r=P1^7;
  15. sbit G1=P3^5;
  16. sbit Y1=P3^6;
  17. sbit R1=P3^7;
  18. sbit ZUO1=P1^0;
  19. sbit YOU1=P1^1;
  20. sbit ZUO2=P1^2;
  21. sbit YOU2=P1^3;
  22. sbit key1=P3^0;
  23. sbit key2=P3^1;


  24. void delay(uint i)
  25. {
  26.         uint j,k;
  27.         for(j=0;j<i;j++)
  28.         for(k=0;k<115;k++);
  29. }


  30. void init()
  31. {
  32.         second=25;
  33.         second1=30;
  34.         TMOD=0x01;
  35.         TH0=(65536-50000)/256;
  36.         TL0=(65536-50000)%256;
  37.         EA=1;
  38.         ET0=1;
  39.         EX0=1;
  40.         IT0=1;
  41.         EX1=1;
  42.         IT1=1;
  43.         IP=0x02;
  44.         TR0=1;
  45.         a=0;
  46.         b=0;
  47.         c=10;
  48.         d=10;
  49.         e=10;
  50.         f=10;
  51. }


  52. void main()
  53. {
  54.         init();
  55.         while(1)
  56.                 {
  57. //                        P1=0x02;
  58.                         YOU1=1;ZUO1=0;ZUO2=0;YOU2=0;
  59.                         P2=~table[second/10];
  60.                         delay(10);
  61. //                        P1=0x01;
  62.                         YOU1=0;ZUO1=1;ZUO2=0;YOU2=0;
  63.                         P2=~table[second%10];
  64.                         delay(10);
  65. //                        P1=0x04;
  66.                         ZUO1=0;YOU1=0;ZUO2=1;YOU2=0;
  67.                         P0=~table[second1/10];
  68.                         delay(10);
  69. //                        P1=0x08;
  70.                         ZUO1=0;YOU1=0;ZUO2=0;YOU2=1;
  71.                         P0=~table[second1%10];
  72.                         delay(10);                       
  73.                         if(a==0)
  74.                         {g=0;r=1;}
  75.                         if(a==1)
  76.                         {y=0;g=1;}
  77.                         if(a==2)
  78.                         {r=0;y=1;}
  79.                         if(b==0)
  80.                         {R1=0;Y1=1;}
  81.                         if(b==1)
  82.                         {G1=0;R1=1;}
  83.                         if(b==2)
  84.                         {Y1=0;G1=1;}
  85.                 }
  86. }


  87. void T_0timer0() interrupt 1
  88. {                              
  89.                                 TH0=(65536-50000)/256;
  90.                                 TL0=(65536-50000)%256;
  91.                                 if(a==0)
  92.                                         {
  93.                                                 timer0++;
  94.                                                 if(timer0==15)
  95.                                                 {
  96.                                                         timer0=0;
  97.                                                         second--;
  98.                                                 }
  99.                                                 if(second==0)
  100.                                                 {
  101.                                                         second=5;
  102.                                                         a=1;
  103.                                                         timer0=0;
  104.                                                       
  105.                                                 }
  106.                                         }
  107.                                         if(a==1)
  108.                                         {
  109.                                                
  110.                                                 timer0++;
  111.                                                 if(timer0==15)
  112.                                                 {
  113.                                                         timer0=0;
  114.                                                         second--;
  115.                                                 }
  116.                                                 if(second==0)
  117.                                                 {
  118.                                                         second=20;
  119.                                                         timer0=0;
  120.                                                         a=2;
  121.                                                       
  122.                                                 }
  123.                                         }
  124.                                         if(a==2)
  125.                                         {
  126.                                        
  127.                                                 timer0++;
  128.                                                 if(timer0==15)
  129.                                                 {
  130.                                                         timer0=0;
  131.                                                         second--;
  132.                                                 }
  133.                                                 if(second==0)
  134.                                                 {
  135.                                                         a=3;
  136.                                                
  137.                                                 }
  138.                                         }
  139.                                         if(a==3)
  140.                                         {
  141.                                                 a=0;
  142.                                                 second=25;
  143.                                         }
  144.                                         if(b==0)
  145.                                         {
  146.                                                 timer1++;
  147.                                                 if(timer1==15)
  148.                                                 {
  149.                                                         timer1=0;
  150.                                                         second1--;
  151.                                                 }
  152.                                                 if(second1==0)
  153.                                                 {
  154.                                                         second1=15;
  155.                                                         b=1;
  156.                                                         timer1=0;      
  157.                                                 }
  158.                                         }
  159.                                         if(b==1)
  160.                                         {
  161.                                                 timer1++;
  162.                                                 if(timer1==15)
  163.                                                 {
  164.                                                         timer1=0;
  165.                                                         second1--;
  166.                                                 }
  167.                                                 if(second1==0)
  168.                                                 {
  169.                                                         second1=5;
  170.                                                         timer1=0;
  171.                                                         b=2;
  172.                                                 }
  173.                                         }
  174.                                         if(b==2)
  175.                                         {
  176.                                                 timer1++;
  177.                                                 if(timer1==15)
  178.                                                 {
  179.                                                         timer1=0;
  180.                                                         second1--;
  181.                                                 }
  182.                                                 if(second1==0)
  183.                                                 {
  184.                                                         b=3;
  185.                                                 }
  186.                                         }
  187.                                         if(b==3)
  188.                                         {
  189.                                                 b=0;
  190.                                                 second1=30;
  191.                                         }
  192.                                         if(c==0)
  193.                                         {
  194.                                                 timer2++;
  195.                                                 if(timer2==15)
  196.                                                 {
  197.                                                         timer2=0;
  198.                                                         second--;
  199.                                                 }
  200.                                                 if(second==0)
  201.                                                 {
  202.                                                         c=0;d=0;
  203.                                                         second=j;second1=h;
  204.                                                 }
  205.                                         }
  206.       
  207.                                         if(d==0)
  208.                                         {
  209.                                                 timer2++;
  210.                                                 if(timer2==15)
  211.                                                 {
  212.                                                         timer2=0;
  213.                                                         second1--;
  214.                                                 }
  215.                                         }
  216.                                         if(e==0)
  217.                                         {
  218.                                                 timer3++;
  219.                                                 if(timer3==15)
  220.                                         {
  221.                                                 timer3=0;
  222.                                                 second--;
  223.                                         }
  224.                                                 if(second==0)
  225.                                         {
  226.                                                 a=m;b=n;
  227.                                                 e=10;f=10;
  228.                                                 second=v;second1=x;
  229.                                         }
  230.                                         if(f==0)
  231.                                         {
  232.                                                 timer3++;
  233.                                                 if(timer3==15)
  234.                                                 {
  235.                                                         timer3=0;
  236.                                                         second1--;
  237.                                                 }
  238.                                         }
  239.                                 }
  240. }


  241. void waibu1(void) interrupt 2
  242. {
  243.         TR0=0;
  244.         if(key1==0)
  245.         {
  246.                         TR0=0;
  247.                         j=second;h=second1;
  248.                         second=20;
  249.                         second1=20;
  250.                         a=10;b=10;
  251.                         c=0;d=0;
  252.                         e=10;f=10;
  253.                         TR0=1;
  254.                         g=1;r=0;y=1;
  255.                         G1=0;R1=1;Y1=1;      
  256.         }
  257.         if(key2==0)
  258.         {
  259.                         TR0=0;
  260.                         j=second;h=second1;
  261.                         second=20;
  262.                         second1=20;
  263.                         a=10;b=10;
  264.                         c=0;d=0;
  265.                         e=10;f=10;
  266.                         TR0=1;
  267.                         g=0;r=1;y=1;
  268.                         G1=1;R1=0;Y1=1;
  269.                 }
  270. }


  271. void waibu0(void) interrupt 0
  272. {
  273.                         TR0=0;
  274.                         m=a;n=b;v=second;x=second1;
  275.                         second=20;
  276.                         second1=20;               
  277.                         a=10;b=10;
  278.                         c=10;d=10;
  279.                         e=0;f=0;
  280.                         EX0=0;
  281.                         EX1=0;
  282.                         TR0=1;
  283.                         g=1;r=0;y=1;
  284.                         G1=1;R1=0;Y1=1;               
  285. }
复制代码


分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表