找回密码
 立即注册

QQ登录

只需一步,快速开始

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

基于51单片机控制的四组交通灯proteus+代码

[复制链接]
跳转到指定楼层
楼主
单片机控制的交通灯。仿真原理图如下(proteus仿真工程文件可到本帖附件中下载)


单片机源程序如下:
  1. #include <REG51.H>
  2. unsigned char t0,t1;     //定义全局变量,用来保存延时时间循环次数
  3. void delay0_5s1()
  4. {  
  5.    for(t0=0;t0<0x0a;t0++)        // 采用全局变量t0作为循环控制变量
  6.    {            
  7.       TH1=0x3c;                  // 设置定时器初值
  8.       TL1=0xb0;
  9.       TR1=1;               // 启动T1
  10.       while(!TF1);        // 查询计数是否溢出,即定时50ms时间到,TF1=1
  11.       TF1=0;               // 50ms定时时间到,将定时器溢出标志位TF1清零
  12.    }
  13. }
  14. //函数功能:实现0.5秒~128秒延时,延时时间为0.5秒×t
  15. void delay_t1(unsigned char t)
  16. {
  17.    for(t1=0;t1<t;t1++)         // 采用全局变量t0作为循环控制变量
  18.    delay0_5s1();
  19. }
  20. //函数功能:外部中断0中断函数,紧急情况处理,当CPU响应外部中断
  21. //0的中断请求时,自动执行该函数,实现两个方向红灯同时亮10秒
  22. void int_0() interrupt 0               // 紧急情况中断
  23. {
  24.    unsigned char i,j,k,l,m;
  25.    i=P1;                             // 保护现场,暂存P1口、t0、t1、TH1、TH0
  26.    j=t0;
  27.    k=t1;
  28.    l=TH1;
  29.    m=TH0;
  30.    P1=0xdb;                       // 两个方向都是红灯
  31.    delay_t1(20);                   // 延时10秒
  32.    P1=i;               // 恢复现场,恢复进入中断前P1口、t0、t1、TH1、TH0
  33.    t0=j;
  34.    t1=k;
  35.    TH1=l;
  36.    TH0=m;
  37. }
  38. //函数功能:外部中断1中断函数,特殊情况处理,当CPU响应外部中断
  39. //1的中断请求时,自动执行该函数,实现A道放行5秒
  40. void int_1() interrupt 2              // 特殊情况中断
  41. {
  42.    unsigned char i,j,k,l,m;
  43.    EA=0;                                //关中断
  44.    i=P1;                                // 保护现场,暂存P1口、t0、t1、TH1、TH0
  45.    j=t0;
  46.    k=t1;
  47.    l=TH1;
  48.    m=TH0;
  49.    EA=1;                                      // 开中断
  50.    P1=0xf3;                             // A道放行
  51.    delay_t1(10);                         // 延时5秒
  52.    EA=0;                                     // 关中断
  53.    P1=i;                   // 恢复现场,恢复进入中断前P1口、t0、t1、TH1、TH0
  54.    t0=j;
  55.    t1=k;
  56.    TH1=l;
  57.    TH0=m;
  58.    EA=1;                                      //开中断
  59. }
  60. void main()                //主函数                       
  61. {
  62.    unsigned char k;
  63.    TMOD=0x10;                // T1工作在方式1
  64.    EA=1;                        // 开放总中断允许位
  65.    EX0=1;                    // 开外部中断0中断允许位
  66.    IT0=1;                        // 设置外部中断0为下降沿触发
  67.    EX1=1;                    // 开外部中断1中断允许位
  68.    IT1=1;                        // 设置外部中断1为下降沿触发
  69.    while(1) {
  70.       P1=0xf3;                // A绿灯,B红灯,延时5秒
  71.       delay_t1(10);                                  
  72.       for(k=0;k<3;k++)         // A绿灯闪烁3次
  73.      {             
  74.          P1=0xf3;
  75.          delay0_5s1();                // 延时0.5秒
  76.          P1=0xfb;
  77.          delay0_5s1();                // 延时0.5秒
  78.       }
  79. P1=0xeb;                // A黄灯,B红灯,延时2秒
  80.    delay_t1(4);
  81.    P1=0xde;                // A红灯,B绿灯,延时5秒
  82.    delay_t1(10);
  83.    for(k=0;k<3;k++)        // B绿灯闪烁3次
  84.    {               
  85.       P1=0xde;
  86.       delay0_5s1();                // 延时0.5秒
  87.       P1=0xdf;
  88.       delay0_5s1();                // 延时0.5秒
  89.    }
  90.    P1=0xdd;                // A红灯,B黄灯,延时2秒
  91.    delay_t1(4);                               
  92.   }
  93. }
复制代码

所有资料51hei提供下载:
四组交通灯.rar (66.71 KB, 下载次数: 24)


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

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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