找回密码
 立即注册

QQ登录

只需一步,快速开始

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

基于51单片机的红绿灯程序+Proteus仿真

[复制链接]
跳转到指定楼层
楼主
用单片机AT89C51T0中断模拟控制十字路口的交通信号指示灯(红、绿、蓝)。


单片机源程序如下:
  1. #include<reg51.h>
  2. #define uchar unsigned char  
  3. #define uint unsigned int         
  4. //定义控制端口
  5. sbit   RED_A = P0^0;        //东西向指示灯
  6. sbit   YELLOW_A = P0^1;
  7. sbit   GREEN_A = P0^2;
  8. sbit   RED_B = P0^3;        //南北向指示灯
  9. sbit   YELLOW_B = P0^4;
  10. sbit   GREEN_B = P0^5;
  11. //定义全局变量
  12. uchar Time_Count =0;        //延时倍数
  13. uchar Flash_Count =0;        //闪烁次数
  14. uchar Operation_Type =1;     //操作类型变量

  15. //T0中断子程序
  16. void   T0_INT () interrupt 1
  17. {  TH0 = -50000/256;
  18.    TL0 = -50000%256;
  19.    switch (Operation_Type)
  20.      { case 1:  //东西向绿灯与南北向红灯亮5s
  21.               RED_A = 0; YELLOW_A = 0; GREEN_A = 1;
  22.               RED_B = 1; YELLOW_B = 0; GREEN_B = 0;
  23.               //5s后切换操作(50ms*100=5s)
  24.               if(++ Time_Count != 100) return;
  25.               Time_Count = 0;
  26.               Operation_Type = 2;       //进入操作类型2
  27.               break;           
  28.          case 2:  //东西向黄灯开始闪烁,绿灯灭
  29.               if (++ Time_Count != 8) return;
  30.               Time_Count = 0;
  31.               YELLOW_A = ! YELLOW_A;
  32.               GREEN_A = 0;
  33.               //闪烁5次
  34.               if (++ Flash_Count != 10) return;
  35.               Flash_Count = 0;
  36.               Operation_Type = 3;        //进入操作类型3
  37.               break ;
  38.      case 3:  //东西向红灯与南北向绿灯亮5s
  39.               RED_A = 1; YELLOW_A = 0; GREEN_A = 0;
  40.               RED_B = 0; YELLOW_B = 0; GREEN_B = 1;
  41.               //南北向绿灯亮5s后切换
  42.               if(++ Time_Count != 100) return;
  43.               Time_Count = 0;
  44.               Operation_Type = 4;       //进入操作类型4
  45.               break;
  46.       case 4:  //南北向黄灯开始闪烁,绿灯灭
  47.               if (++ Time_Count != 8) return;
  48.               Time_Count =0;
  49.               YELLOW_B = ! YELLOW_B;
  50.               GREEN_B = 0;
  51.               //闪烁5次
  52.               if (++ Flash_Count != 10) return;
  53.               Flash_Count = 0;
  54.               Operation_Type = 1;      //回到操作类型1
  55.               break ;      
  56.      }
  57. }
  58. //主程序
  59. void   main ()
  60. {   TMOD = 0x01;      //T0工作在方式1
  61.     TH0 = -50000/256;   //赋初值,计数50000次
  62.     TL0 = -50000%256;
  63.     EA=1 ;            //允许总中断
  64.     ET0=1;            //允许T0中断
  65.     TR0 = 1 ;          //启动T0
  66.     while(1) ;
  67. }
复制代码

所有资料51hei提供下载:
基于51单片机的红绿灯.7z (32.8 KB, 下载次数: 94)

评分

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

查看全部评分

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

使用道具 举报

沙发
ID:693416 发表于 2021-12-10 16:59 | 只看该作者
有protect的文件吗
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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