找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1020|回复: 0
收起左侧

单片机定时器控制交通指示灯代码与Proteus仿真图

[复制链接]
ID:430133 发表于 2022-4-25 15:07 | 显示全部楼层 |阅读模式
喜欢的可以下载,为了便于快速测试运行效果,本例调短了指示灯切换时间
仿真原理图如下(proteus仿真工程文件可到本帖附件中下载)
51hei.gif


单片机源程序如下:
  1. /***************   writer:shopping.w   ******************/
  2. #include <reg52.h>
  3. #define uint unsigned int
  4. #define uchar unsigned char

  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. uchar Time_Count = 0,Flash_Count = 0,Operation_Type = 1;

  12. void T0_INT() interrupt 1
  13. {
  14.          TH0 = -50000/256;
  15.         TL0 = -50000%256;
  16.         switch(Operation_Type)
  17.         {
  18.                  case 1:
  19.                         RED_A=0;YELLOW_A=0;GREEN_A=1;
  20.                         RED_B=1;YELLOW_B=0;GREEN_B=0;
  21.                         if(++Time_Count != 100) return;
  22.                         Time_Count=0;
  23.                         Operation_Type = 2;
  24.                         break;
  25.                 case 2:
  26.                         if(++Time_Count != 8) return;
  27.                         Time_Count=0;
  28.                         YELLOW_A=!YELLOW_A;
  29.                         GREEN_A=0;
  30.                         if(++Flash_Count != 10) return;
  31.                         Flash_Count=0;
  32.                         Operation_Type = 3;
  33.                         break;
  34.                 case 3:
  35.                         RED_A=1;YELLOW_A=0;GREEN_A=0;
  36.                         RED_B=0;YELLOW_B=0;GREEN_B=1;
  37.                         if(++Time_Count != 100) return;
  38.                         Time_Count=0;
  39.                         Operation_Type = 4;
  40.                         break;        
  41.                 case 4:
  42.                         if(++Time_Count != 8) return;
  43.                         Time_Count=0;
  44.                         YELLOW_B=!YELLOW_B;
  45.                         GREEN_B=0;
  46.                         if(++Flash_Count !=10)
  47.                                 return;
  48.                         Flash_Count=0;
  49.                         Operation_Type = 1;
  50.                         break;        
  51.         }
  52. }

  53. void main()
  54. {
  55.          TMOD = 0x01;
  56.         IE = 0x82;
  57.         TR0 = 1;
  58.         while(1);
  59. }
复制代码
51hei.png
51hei附件下载:
Keil2代码与Proteus7.5仿真下载(注意版本一定要是Keil2和Proteus7.5):
41 定时器控制交通指示灯.zip (26.45 KB, 下载次数: 13)

评分

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

查看全部评分

回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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