找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1024|回复: 1
收起左侧

这是我做的交通灯

[复制链接]
ID:422533 发表于 2018-11-7 19:05 | 显示全部楼层 |阅读模式
这是我用一星期做的交通灯,请大家多多指教。
  1. #include <reg51.h>
  2. #include<rtx51tny.h>
  3. #include<intrins.h>
  4. #define uchar unsigned char
  5. #define uint unsigned int
  6. uchar table[16] = {0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};
  7. uchar table1[]={0xbf,0x86,0xdb,0xcf,0xe6,0xed,0xfd,0x87,0xff,0xef};
  8. uint time=0;
  9. uint num=0;
  10. uint dis_num=0;
  11. sbit key1=P1^0;
  12. sbit key2=P1^1;
  13. sbit Y1=P2^0;
  14. sbit Y2=P2^1;
  15. sbit led1=P2^5;         //东西红灯
  16. sbit led2=P2^7;         //东西黄灯
  17. sbit led3=P2^6;         //东西绿灯

  18. sbit led5=P2^3;         //南北绿灯
  19. sbit led6=P2^4;         //南北黄灯
  20. sbit led7=P2^2;         //南北红灯
  21. /*-------------------------1ms延时子函数(1T、12T、主时钟不同时,需做调整)------------*/
  22. void delay(uint t)
  23. {
  24.   uchar x;
  25.   while(t--)
  26.     for(x=0;x<250;x++);
  27. }

  28. void my_int() interrupt 3
  29. {
  30.         time++;
  31.         if(time==123)
  32.         {
  33.                 time=0;
  34.                    num++;
  35.                 if(num%60==0)
  36.                         dis_num++;
  37.         }  

  38.        
  39. }

  40. void timer()
  41. {
  42.         TMOD=0x00;
  43.         TH1=0x3c;
  44.         TL1=0xb0;
  45.         EA=1;
  46.         ET1=1;
  47.         TR1=1;
  48.         while(1)
  49.         {
  50.                 P0=0;
  51.                 Y1=0;Y2=1;
  52.                 P0=table[num%60/10];
  53.                 delay(2);
  54.                 P0=0;
  55.                 Y1=1;Y2=1;
  56.                 P0=table[num%60%10];
  57.                 delay(2);
  58.                 P0=0;
  59.                 Y1=0;Y2=0;
  60.                 P0=table[dis_num%60/10];
  61.                 delay(2);
  62.                 P0=0;
  63.                 Y1=1;Y2=0;
  64.                 P0=table1[dis_num%60%10];
  65.                 delay(2);
  66.         }
  67. }
  68. void key()
  69. {
  70.         if(P1!=0xff)
  71.         {
  72.                 delay(5);
  73.                 if(P1!=0Xff)
  74.                 {
  75.                         if(key1==0)
  76.                         {
  77.                             num++;
  78.                          while(key1==0)
  79.                          {
  80.                                  timer();
  81.                          }
  82.                         }
  83.                         if(key2==0)
  84.                         {
  85.                                 dis_num++;
  86.                                 while(key2==0)
  87.                                 {
  88.                                         timer();
  89.                                 }
  90.                         }
  91.                 }               
  92.         }
  93. }       
  94. /////////////////////////////////////////////

  95. /*---------------------键盘扫描子函数--------------------------------*/
  96. void job0() _task_ 0
  97. {
  98.    os_create_task(1);
  99.    os_create_task(2);
  100.    os_delete_task(0);

  101. }
  102. void job1() _task_ 1
  103. {
  104.         while(1)
  105.         {
  106.                 timer();
  107.                 key();
  108.         }       

  109. }
  110. void job2() _task_ 2
  111. {
  112.         uint i;
  113.         while(1)
  114.         {
  115.                 led7=0;                               //南北红灯亮
  116.                 led3=0;                                                  //东西绿灯亮,车辆东西方向通行
  117.                 delay(1000);                   //状态延时5s
  118.                 led3=1;                                      //东西绿灯灭,
  119.                
  120.                 for(i=0;i<3;i++)                //东西黄灯闪烁5次,
  121.                 {               
  122.                 led2=0;
  123.                 delay(100);
  124.                 led6=1,led2=1;
  125.                 delay(100);
  126.                 }
  127.                 _nop_ ();
  128.                 _nop_ ();
  129.                 led7=1;                                                        //南北红灯灭

  130.                 led5=0;                                                        //南北绿灯亮,车辆南北方向通行
  131.                 led1=0;                                                        //东西红灯亮
  132.                 delay(1000);                        //状态延时5s
  133.                 led5=1;                                                        //南北绿灯灭
  134.        
  135.                 for(i=0;i<3;i++)                //南北黄灯闪烁5次
  136.                 {
  137.                 led6=0;               
  138.                 delay(100);
  139.                 led6=1,led2=1;
  140.                 delay(100);
  141.                 }
  142.                 led1=1;                                                //东西红灯灭
  143.         }
  144. }
  145.        
复制代码


Z${_$8(BUY3YTC`J~_`(L9L.png
6W5P@Y}5NGL6W_P]7}]]K)F.png
回复

使用道具 举报

ID:313328 发表于 2018-11-12 20:18 | 显示全部楼层
很好用,值得学习
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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