网站首页 > 技术教程 正文
本例的控制程序未使用80C51的(定时器)中断功能, 而是以for循环作为延时函数, 以粗略提供0.5s和1s的时延.
本例的控制逻辑为①南北方向圆饼灯为红灯时, 南北方向车辆停止在停车线内等待. ②南北方向圆饼灯为绿灯时, 南北方向车辆(直行和左转)同时放行. ③东西方向圆饼灯为红灯时, 东西方向车辆停止在停车线内等待. ④东西方向圆饼灯为绿灯时, 东西方向车辆(直行和左转)同时放行. ⑤圆饼灯为黄灯时, 未越过停车线的车辆应停车等待. ⑥南北方向和东西方向的右转车辆在不影响交通秩序的前提下, 可不用看圆饼灯通行.
本例的设计逻辑其实并不复杂. 我先将南北方向的信号控制设计好, 之后相对于南北方向设计东西方向即可. 如果非要说明本例的设计点睛之笔的话, 那么一定是记录南北方向数码管显示数字的变量t (东西方向以南北信号灯颜色和变量t作为依据).
电路原理图:
控制程序源代码(无绿灯倒计时):
#include
#include
void delay()//时延1s
{
int i, j;
for(i=0;i<124;i++)
for(j=0;j<1000;j++)
;
}
void main()
{
short int t=0;
P1=0;
P2=0;
P3=0;
while(1)
{
//南北方向绿灯周期
P2=0x14;//南北方向绿灯亮+东西方向红灯亮
t=14;
while(t>=0)
{
P1=t/10*pow(2,4)+t%10;//南北方向数码管设置
P3=(t+3)/10*pow(2,4)+(t+3)%10;//东西方向数码管设置
delay();
t--;
}
//南北方向黄灯周期
P2=0x12;//南北方向黄灯亮+东西方向红灯亮
t=2;
while(t>=0)
{
P1=t/10*pow(2,4)+t%10;//南北方向数码管设置
P3=t/10*pow(2,4)+t%10;//东西方向数码管设置
delay();
t--;
}
//南北方向红灯周期
P2=0x41;//南北方向红灯亮+东西方向绿灯亮
t=16;
while(t>=0)
{
if(t>2)
{
P1=t/10*pow(2,4)+t%10;//南北方向数码管设置
P3=(t-3)/10+pow(2,4)+(t-3)%10;//东西方向数码管设置
}
else//南北方向红灯亮+东西方向黄灯亮
{
P2=0x21;//南北方向红灯亮+东西方向黄灯亮
P1=t/10*pow(2,4)+t%10;//南北方向数码管设置
P3=t/10*pow(2,4)+t%10;//东西方向数码管设置
}
delay();
t--;
}
}
}
控制程序源代码(绿灯倒计时):
#include
#include
void delay()//时延0.5s
{
int i, j;
for(i=0;i<124;i++)
for(j=0;j<500;j++)
;
}
void main()
{
short int t=0;
P1=0;
P2=0;
P3=0;
while(1)
{
//南北方向绿灯周期
P2=0x14;//南北方向绿灯亮+东西方向红灯亮
t=29;
while(t>=0)
{
P1=t/2/10*pow(2,4)+t/2%10;//南北方向数码管设置
P3=(t/2+3)/10*pow(2,4)+(t/2+3)%10;//东西方向数码管设置
if(t<=5)//南北方向绿灯最后3s
{
if(t%2!=0)
{
P2=0x10;//南北方向绿灯灭+东西方向红灯亮
}
else
{
P2=0x14;//南北方向绿灯亮+东西方向红灯灭
}
}
delay();
t--;
}
//南北方向黄灯周期
P2=0x12;//南北方向黄灯亮+东西方向红灯亮
t=5;
while(t>=0)
{
P1=t/2/10*pow(2,4)+t/2%10;//南北方向数码管设置
P3=t/2/10*pow(2,4)+t/2%10;//东西方向数码管设置
delay();
t--;
}
//南北方向红灯周期
P2=0x41;//南北方向红灯亮+东西方向绿灯亮
t=33;
while(t>=0)
{
if(t/2>2)
{
P1=t/2/10*pow(2,4)+t/2%10;//南北方向数码管设置
P3=(t/2-3)/10*pow(2,4)+(t/2-3)%10;//东西方向数码管设置
if(t/2<=5)//东西方向绿灯最后3s
{
if(t%2!=0)
{
P2=0x01;//南北方向红灯亮+东西方向绿灯灭
}
else
{
P2=0x41;//南北方向红灯亮+东西方向绿灯亮
}
}
}
else//南北方向红灯亮+东西方向黄灯亮
{
P2=0x21;//南北方向红灯亮+东西方向黄灯亮
P1=t/2/10*pow(2,4)+t/2%10;//南北方向数码管设置
P3=t/2/10*pow(2,4)+t/2%10;//东西方向数码管设置
}
delay();
t--;
}
}
}
猜你喜欢
- 2024-11-03 同学先别急着看单片机,先看看这个软件吧
- 2024-11-03 基于proteus的51单片机开发实例37-DAC0832
- 2024-11-03 单片机常用电路3-按键检测、LED驱动电路
- 2024-11-03 51单片机教程 第一个51程序 :点亮一个发光二极管(含代码)
- 2024-11-03 1. 基于proteus的51单片机开发实例(2)--闪烁的灯光
- 2024-11-03 1. 基于proteus的51单片机开发实例(13)-LED指示那个按键被按下
- 2024-11-03 1. 基于proteus的51单片机开发实例30-模块化程序设计
- 2024-11-03 从一个简单的项目,学会单片机的使用:51单片机设计的8路抢答器
- 2024-11-03 PROTEUS仿真DHT11(1)(proteus仿真dht11一直为0)
- 2024-11-03 售前/售后技术支持工程师简历专业技能怎么写
你 发表评论:
欢迎- 最近发表
-
- linux日志文件的管理、备份及日志服务器的搭建
- Linux下挂载windows的共享目录操作方法
- Linux系统中的备份文件命令(linux系统中的备份文件命令有哪些)
- 麒麟KYLINOS|通过不同方法设置用户访问文件及目录权限
- 「Linux笔记」系统目录结构(linux目录的结构及含义)
- linux中修改归属权chown命令和chgrp命令
- 工作日报 2021.10.27 Android-SEAndroid权限问题指南
- Windows和Linux环境下,修改Ollama的模型默认保存路径
- 如何强制用户在 Linux 上下次登录时更改密码?
- 如何删除Linux文件夹中除某些扩展名之外的所有文件?
- 标签列表
-
- 下划线是什么 (87)
- 精美网站 (58)
- qq登录界面 (90)
- nginx 命令 (82)
- nginx .http (73)
- nginx lua (70)
- nginx 重定向 (68)
- Nginx超时 (65)
- nginx 监控 (57)
- odbc (59)
- rar密码破解工具 (62)
- annotation (71)
- 红黑树 (57)
- 智力题 (62)
- php空间申请 (61)
- 按键精灵 注册码 (69)
- 软件测试报告 (59)
- ntcreatefile (64)
- 闪动文字 (56)
- guid (66)
- abap (63)
- mpeg 2 (65)
- column (63)
- dreamweaver教程 (57)
- excel行列转换 (56)
本文暂时没有评论,来添加一个吧(●'◡'●)