找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 12028|回复: 10
收起左侧

基于51单片机十字路口红绿灯控制设计

  [复制链接]
ID:351608 发表于 2019-4-10 08:10 | 显示全部楼层 |阅读模式
学习51单片机时做的交通灯课程设计,分享给大家,附件含Protues仿真,源程序和设计文档
未命名.jpg 捕获.JPG

单片机源程序如下:
  1. #include<stdio.h>
  2. #include<reg52.h>
  3. sbit ST=P3^0;
  4. sbit Ho1=P1^7;
  5. sbit Ho2=P1^4;
  6. sbit L1=P1^5;
  7. sbit L2=P1^2;
  8. sbit Hu1=P1^6;
  9. sbit Hu2=P1^3;
  10. sbit Q0=P3^2;
  11. sbit Q1=P3^3;
  12. int second=65,p=1,count_t0=0,
  13.         count_t1=0,below_second=60,scan=0;
  14. void debouncer(void);
  15. char Tab[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};                        //数码管显示数组,共阳
  16. char Ma[]={0x01,0x02,0x04,0x08};                                                                                //扫描数组
  17. char disp[]={0xc0,0xc0,0xc0,0xc0};                                                                                //数码管输出数组
  18. char Count[]={0xc0,0xc0,0xc0,0xc0,0xc0,0xc0};                                                        //数据存储数组
  19. void main()                                                                                                                                //主函数
  20. {
  21.         IE=0x8f;                                                                                                                        //中断初值定义
  22.         TCON=0x55;
  23.         TMOD=0x21;
  24.         TH0=(65536-50000)/256;
  25.         TL0=(65536-50000)%256;
  26.         TH1=256-250;
  27.         TH2=256-250;
  28.         while(1)                                                 //数码管与交通灯显示
  29.                 {
  30.                 if(p==1)
  31.                 {
  32.                 if(second>5)                                                         //南北通行60秒
  33.                 {
  34.                 disp[1]=Tab[below_second%10];
  35.                 disp[0]=Tab[below_second/10];
  36.                 disp[3]=Tab[second%10];
  37.                 disp[2]=Tab[second/10];
  38.                 L1=0;
  39.                 L2=1;
  40.                 Ho1=1;
  41.                 Ho2=0;
  42.                 Hu1=0;
  43.                 Hu2=0;
  44.                 }
  45.                 else                                                                         //黄灯5秒
  46.                 {
  47.                 disp[1]=Tab[second%10];
  48.                                                         disp[0]=Tab[second/10];
  49.                                                         disp[3]=Tab[second%10];
  50.                                                         disp[2]=Tab[second/10];
  51.                                                         L1=0;
  52.                                                         L2=0;
  53.                                                         Hu1=0;
  54.                                                         Hu2=1;
  55.                                                         Ho1=1;
  56.                                                         Ho2=0;
  57.                                                 }
  58.                                 }
  59.                         else
  60.                                 {
  61.                                         if(second>5)                                                          //东西通行60秒
  62.                                                 {
  63.                                                         disp[1]=Tab[second%10];
  64.                                                         disp[0]=Tab[second/10];
  65.                                                         disp[3]=Tab[below_second%10];
  66.                                                         disp[2]=Tab[below_second/10];
  67.                                                         L1=1;
  68.                                                         L2=0;
  69.                                                         Ho1=0;
  70.                                                         Ho2=1;
  71.                                                         Hu1=0;
  72.                                                         Hu2=0;
  73.                                                 }
  74.                                         else                                                                          //黄灯5秒
  75.                                                 {
  76.                                                         disp[1]=Tab[second%10];
  77.                                                         disp[0]=Tab[second/10];
  78.                                                         disp[3]=Tab[second%10];
  79.                                                         disp[2]=Tab[second/10];
  80.                                                         L2=0;
  81.                                                         L1=0;
  82.                                                         Hu1=1;
  83.                                                         Hu2=0;
  84.                                                         Ho1=0;
  85.                                                         Ho2=1;
  86.                                                 }
  87.                                 }
  88.                 }
  89. }
  90. void int0(void) interrupt 0           //中断int0,全为红灯。
  91. {        
  92.         Count[0]=Ho1;
  93.         Count[1]=Ho2;
  94.         Count[2]=Hu1;
  95.         Count[3]=Hu2;
  96.         Count[4]=L1;
  97.         Count[5]=L2;
  98.         Count[6]=p;
  99.         P0=0x00;
  100.         L1=0;
  101.         L2=0;
  102.         Ho1=1;
  103.         Ho2=1;
  104.         Hu1=0;
  105.         Hu2=0;
  106.         debouncer();
  107.         while(Q0==0);
  108.         Ho1=Count[0];
  109.         Ho2=Count[1];
  110.         Hu1=Count[2];
  111.         Hu2=Count[3];
  112.         L1=Count[4];
  113.         L2=Count[5];
  114.         p=Count[6];
  115.         second=65;
  116.         below_second=60;
  117.         count_t0=0;
  118.         Tab[0]=0xc0;
  119. }
  120. void int1(void) interrupt 2           //中断int1,单方向绿灯。
  121. {
  122.         Count[0]=Ho1;
  123.         Count[1]=Ho2;
  124.         Count[2]=Hu1;
  125.         Count[3]=Hu2;
  126.         Count[4]=L1;
  127.         Count[5]=L2;
  128.         Count[6]=p;
  129.         P0=0x00;
  130.         if(ST==0)
  131.                  {
  132.                          L1=1;
  133.                         L2=0;
  134.                         Ho1=0;
  135.                         Ho2=1;               
  136.                  }
  137.          else
  138.                  {
  139.                          L1=0;
  140.                         L2=1;
  141.                         Ho1=1;
  142.                         Ho2=0;
  143.                  }
  144.         Hu1=0;
  145.         Hu2=0;
  146.         debouncer();
  147.         while(Q1==0);
  148.         Ho1=Count[0];
  149.         Ho2=Count[1];
  150.         Hu1=Count[2];
  151.         Hu2=Count[3];
  152.         L1=Count[4];
  153.         L2=Count[5];
  154.         p=Count[6];
  155.         second=65;
  156.         below_second=60;
  157.         count_t0=0;
  158.         Tab[0]=0xc0;
  159. }
复制代码

全部资料51hei下载地址:
交通灯控制.zip (149.51 KB, 下载次数: 239)

评分

参与人数 1黑币 +50 收起 理由
admin + 50 共享资料的黑币奖励!

查看全部评分

回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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