找回密码
 立即注册

QQ登录

只需一步,快速开始

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

简易红绿灯的仿真设计与单片机源代码(注释很详细)

[复制链接]
跳转到指定楼层
楼主
自己设计的红绿灯

仿真原理图如下(proteus仿真工程文件可到本帖附件中下载)


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

Keil2代码与Proteus7.5版本仿真下载:资料51hei提供下载:
注意版本
模拟交通灯控制系统.rar (34.05 KB, 下载次数: 102)


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

使用道具 举报

沙发
ID:668084 发表于 2019-12-19 10:28 | 只看该作者
设计描述是什么?看不出来
回复

使用道具 举报

板凳
ID:836375 发表于 2020-10-29 20:13 | 只看该作者
这算不算很基础的仿真图?
回复

使用道具 举报

地板
ID:869544 发表于 2022-5-7 14:00 来自手机 | 只看该作者
设计描述有吗
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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