找回密码
 立即注册

QQ登录

只需一步,快速开始

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

请问单片机让交通灯闪烁5s的思路是什么?定时器还是设置空程序

[复制链接]
跳转到指定楼层
楼主
ID:897410 发表于 2021-4-12 16:57 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
是让信号通1s断1s吗?这个1s是用定时器 还是 直接设置空程序
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:716656 发表于 2021-4-12 20:29 | 只看该作者
  1. /*******************************************************

  2. 红绿灯//需验证程序

  3. *******************************************************/

  4. #include "reg51.h"
  5. #define uchar unsigned char
  6. #define uint unsigned int
  7. sfr AUXR=0x8E;

  8. uchar shijian=0,aa=0,deng=3;

  9. void init()
  10. {
  11.         AUXR &= 0x7F;
  12.         TMOD &= 0xF0;
  13.         TL0 = 0x00;
  14.         TH0 = 0x4C;
  15.         TF0 = 0;
  16.         TR0 = 1;
  17.         ET0=1;
  18.         EA=1;
  19.         P0 = 0xff;
  20. }

  21. void main()
  22. {
  23.         init();
  24.         while(1)
  25.         {
  26.                 if(shijian==0)
  27.                 {
  28.                         switch(deng)
  29.                         {
  30.                                 case 0:shijian=70;deng=1;break;//绿
  31.                                 case 1:shijian=70;deng=2;break;//黄
  32.                                 case 2:shijian=70;deng=3;break;//红
  33.                                 case 3:shijian=70;deng=0;break;//黄
  34.                         }
  35.                 }
  36.         /*时间每秒减一*/

  37.                 switch(deng)
  38.                 {
  39.                         case 0:
  40.                                                 if(shijian%2==0)
  41.                                                 P1=0x00;
  42.                                                 if(shijian%2==1)
  43.                                                 P1=0xff;
  44.                                                 break;
  45.                         case 1:P1=0xff;break;//绿
  46.                         case 2:
  47.                                                 if(shijian%2==0)
  48.                                                 P1=0x00;
  49.                                                 if(shijian%2==1)
  50.                                                 P1=0xff;
  51.                                                 break;
  52.                         case 3:P1=0x00;break;//红
  53.                 }
  54.         }
  55. }

  56. void T0_time() interrupt 1
  57. {

  58.         aa++;
  59.                 if(aa==50)
  60.         {
  61.                 aa=0;
  62.                 shijian--;
  63.         }
  64. }
  65. 简单的这样写就可以
复制代码
回复

使用道具 举报

板凳
ID:476215 发表于 2021-4-12 23:25 | 只看该作者
从稳定性来看一定是使用定时器,然后在定时器里面加计数判断是否到了时间。
回复

使用道具 举报

地板
ID:894154 发表于 2021-4-13 07:57 | 只看该作者
通一断一闪的太慢了 通0.5断0.5吧
0.5s进一次定时器对IO进行一次取反就可以实现闪烁了
回复

使用道具 举报

5#
ID:897410 发表于 2021-4-13 14:08 | 只看该作者
ANT1987 发表于 2021-4-13 07:57
通一断一闪的太慢了 通0.5断0.5吧
0.5s进一次定时器对IO进行一次取反就可以实现闪烁了

感谢, 已经写好了 就是用的 取反
回复

使用道具 举报

6#
ID:900662 发表于 2021-4-13 17:07 | 只看该作者
定时器定5毫秒进中断取反就可以了,程序的话太麻烦了吧。我觉得你可以设置一个标志位,计数器进一次中断,标志位改变一次,对应你的各种灯,用循环通过你进中断的次数控制换灯。
回复

使用道具 举报

7#
ID:897410 发表于 2021-4-13 17:32 | 只看该作者

感谢 ,不过我没学过C,已经用汇编写出来了
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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