找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1712|回复: 2
收起左侧

单片机交通信号灯黄灯闪烁实现,请大神帮忙看看

[复制链接]
ID:961087 发表于 2021-9-22 09:19 | 显示全部楼层 |阅读模式
编写交通灯程序,下面程序能够实现红绿灯显示及对应流水灯的显示,但是怎么实现在黄灯时间流水灯闪烁不知道怎么调试了尝试过黄灯流水灯亮时直接加入延时函数发现数码管闪烁了,求大神指点实现黄灯闪烁。附录为单片机的原理图,图片为使用单片机。
#include <REGX52.H>
#define uint unsigned int
#define uchar unsigned char
sbit nsred=P1^0;
sbit nsgreen=P1^1;
sbit nsyellow=P1^2;
sbit ewred=P1^4;
sbit ewgreen=P1^5;
sbit ewyellow=P1^6;
sbit wela=P2^6;
sbit dula=P2^7;
#define nsred() do{nsred=0;nsgreen=1;nsyellow=1;} while(0);
#define nsgreen() do{nsred=1;nsgreen=0;nsyellow=1;} while(0);
#define nsyellow() do{nsred=1;nsgreen=1;nsyellow=0;} while(0);
#define ewred() do{ewred=0;ewgreen=1;ewyellow=1;} while(0);
#define ewgreen() do{ewred=1;ewgreen=0;ewyellow=1;} while(0);
#define ewyellow() do{ewred=1;ewgreen=1;ewyellow=0;} while(0);
#define yeltime 4
#define ewtime 28+yeltime
#define nstime 16+yeltime
uchar t=ewtime;
uchar flag=1;
uchar tt=0;
uchar keyflag=0;
uchar table1[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
uchar table2[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};
sbit key2=P3^4;
sbit key3=P3^5;
void delayms(uint xms)
{
IMG_20210909_145254.jpg

TX-1C增强版原理图.pdf

943.37 KB, 下载次数: 3

回复

使用道具 举报

ID:332444 发表于 2021-9-22 15:15 | 显示全部楼层
回复

使用道具 举报

ID:123289 发表于 2021-9-22 16:10 | 显示全部楼层
本帖最后由 yzwzfyz 于 2021-9-23 08:17 编辑

教你如何闪灯:
假设你的输出是P1.1。
通常你的做法是:P1.1 = X (X=0暗,X=2亮)。
我教你的做法是:P1.1 = X * (Y + Z * /Y) , 注:/Y = Y求反。
这里:
X:与你的定义相同,决定灯的明暗。
Y:决定是否闪烁,=1不闪,=0闪。
Z:闪烁因子,它每0.3秒反转一次,由0.3秒的定时器改变它的状态。
所以你要做的是:估计你已会做了,不讲了,否则太小看你了。
如果真的还不懂,可以联系我,面授机宜。
提醒:当需要改变显示时,不要做:P1.1 = X ,而是做:P1.1 = X * (Y + Z * /Y)
当需要闪烁时,清Y=0,不闪置1。逻辑相反时,将公式中的Y非一下。
简单吧。

回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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