单片机交通灯设计(含箭头指示)
单片机交通灯课程设计
单片机交通灯设计(含箭头指示)
大家好,我是Alex,这篇文章是我做课程设计总结后想拿出来跟大家分享。我在完成交通灯的基本显示后,我对任务提出了更高的要求,增加了交通灯箭头显示,由于我对扩展芯片不熟悉,时间紧迫,我采用了增加AT89C51芯片的方法来对LED点阵进行控制。
在编程过程中发现了平时学习遗漏的问题,将所学的知识运用到实践中是非常关键的。编写程序是一个需要试错的过程,尝试不同种方法寻找最优解。有些复杂的程序也是通过不断的完善,由实现简单功能到实现多种功能。编程非常考验耐心,要坚持下来问题才有突破的可能。
希望你看了这篇文章后能有收获。
设计概况
(1)用P1.0、P1.1、P1.2控制东西通道的红、黄、绿灯;用P1.3、P1.4、P1.5控制南北通道的红、黄、绿灯;
(2)开始时,南北红灯亮并保持25秒,同时东西绿灯亮,保持20秒,20秒钟到了之后,东西绿灯闪烁3次(周期为1秒)后熄灭。继而东西黄灯亮并保持2秒,到2秒后,东西黄灯灭,东西红灯亮并保持25秒,同时南北红灯灭,南北绿灯亮20秒,20秒到了之后,南北绿灯闪烁3次(周期为1秒)后熄灭。继而南北黄灯亮并保持2秒,到2秒后,南北黄灯灭,南北红灯亮,同时东西红灯灭,东西绿灯亮。到此完成一个循环。
(3)出现紧急情况时,用中断方式实现南北、东西红灯持续亮10秒。注意保护现场。其中,要求使用P3.2引脚接收紧急控制信号,通过外部中断0实现紧急情况的交通灯控制操作。
实现在两位LED数码管上显示时间。
Proteus仿真模型
这里我使用的Proteus是ISIS7的版本和keil5进行C语言的编程。
序号 | 名称 | 数量 |
---|---|---|
1 | 两位数共阳极数码管 | 4 |
2 | AT89C51芯片 | 3 |
3 | 按键 | 4 |
4 | 电容器 | 9 |
5 | 12MHZ晶振 | 3 |
6 | LED-Green | 4 |
7 | LED-Red | 4 |
8 | LED-Yellow | 4 |
9 | 电阻 | 15 |
10 | 8x8点阵-Green | 4 |
11 | 8接口电阻排 | 1 |
仿真效果截图
效果图
主芯片
东西走向点阵接线
南北走向点阵
东西走向局部
南北走向局部
主芯片代码
#include<reg51.h>
unsigned char count=0;//count计数变量time倒计时初始值
unsigned int time;//time倒计时初始值
unsigned char led[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};//共阳极数码管段选
void delay(unsigned int i)
{unsigned int k;for(k=0;k<i;k++);
}
void time0_5() interrupt 3
{TH1=(65536-50000)/256;TL1=(65536-50000)%256;count++;
}
void init0() //定时器初始函数
{TMOD=0x10;TH1=(65536-50000)/256;TL1=(65536-50000)%256;EA=1;ET1=1;TR1=1;
}
void disp()
{delay(50);P2=0x01; //十位位选P0=led[time/10];delay(50);P0=0xff; //段选关闭P2=0x02; //个位位选P0=led[time%10];delay(50);
}void init1()//南北红灯20秒,东西绿灯20秒
{time=20;init0(); //初始化while(1){P0=0xff;P1=0x0c;if(count==20)//1S到{count=0; //计数清零time--;if(time==0){time=20;break;} }disp();}
}
void init2()//东西绿灯闪3次,南北红灯3秒
{time=3;init0(); //初始化while(1){P0=0xff;P1=0x08; //东西绿灯灭,南北红灯亮if(count==10) //0.5S到{P1=0x0c;}else if(count==20){P1=0x08;count=0;time--;if(time==0){time=3;break;}}disp();}
}
void init3()//东西黄灯,南北红灯2秒
{time=2;init0(); //初始化while(1){P0=0xff;P1=0x0a;if(count==20)//1S到{count=0; //计数清零time--;if(time==0){time=2;break;} }disp();}
}
void init4()//东西红灯20秒,南北绿灯20秒
{time=20;init0(); //初始化while(1){P0=0xff;P1=0x21;if(count==20)//1S到{count=0; //计数清零time--;if(time==0){time=20;break;} }disp();}
}
void init5()//南北绿灯闪3次,东西红灯3秒
{time=3;init0(); //初始化while(1){P0=0xff;P1=0x01; //南北绿灯灭,东西红灯亮if(count==10) //0.5S到{P1=0x21;}else if(count==20){P1=0x01;count=0;time--;if(time==0){time=3;break;}}disp();}
}
void init6()//南北黄灯,东西红灯2秒
{time=2;init0(); //初始化while(1){P0=0xff;P1=0x11;if(count==20)//1S到{count=0; //计数清零time--;if(time==0){time=2;break;} }disp();}
}
void emergency() interrupt 0 //紧急情况,禁止通行
{unsigned char L,m,n,o;EA=0;L=P1;m=TH1;n=TL1;o=time;P1=0x09;time=10;while(1){TH1=(65536-50000)/256;TL1=(65536-50000)%256;while(!TF1){disp();}TF1=0;count++;if(count==20){count=0;time--;}if(time==0)break;}EA=0;P1=L;TH1=m;TL1=n;time=o;EA=1;
}
void main()
{TMOD=0x10; //定时器工作方式1TH1=(65536-50000)/256;TL1=(65536-50000)%256;EA=1; //总中断PX0=1; //外部中断0位高优先级EX0=1; //外部中断0IT0=1; //外部中断0下降沿触发ET1=1; //T1中断允许P1=0x00;while(1) {init1();//南北红灯20秒,东西绿灯20秒init2();//东西绿灯闪3次,南北红灯3秒init3();//东西黄灯,南北红灯2秒init4();//东西红灯20秒,南北绿灯20秒init5();//南北绿灯闪3次,东西红灯3秒init6();//南北黄灯,东西红灯2秒}
}
##副芯片代码1
#include<reg51.h>
unsigned char w,i,count=0;
unsigned int time;
void delay(unsigned int i)
{unsigned int k;for(k=0;k<i;k++);
}void time0_5() interrupt 3
{TH1=(65536-50000)/256;TL1=(65536-50000)%256;count++;
}
void init0() //定时器初始函数
{TMOD=0x10;TH1=(65536-50000)/256;TL1=(65536-50000)%256;EA=1;ET1=1;TR1=1;
}
void init1()//东西绿灯,直行右转10s
{unsigned char led[]={0x7f,0x7b,0x79,0x00,0x79,0x1b,0x3f,0x7f}; init0();time=10;while(1){w=0x01;for(i=0;i<8;i++){P1=w; //行P2=led[i];//列delay(20);w<<=1;}if(count==20)//1S到{count=0; //计数清零time--;if(time==0){time=10;break;} }}
}
%
此处省略**行void init3()//关灯函数
{P1=0x00;P2=0xff;init0();time=30;while(1) {if(count==20)//1S到{count=0; //计数清零time--;if(time==0){time=30;break;} }}
}
void emergency() interrupt 0 //紧急情况,禁止通行
{unsigned char k,L,m,n,o;EA=0;k=P1;L=P2;m=TH1;n=TL1;o=time;time=10;while(1){delay(20); TH1=(65536-50000)/256;TL1=(65536-50000)%256;while(!TF1){unsigned char led[]={0x7e,0xbd,0xdb,0xe7,0xe7,0xdb,0xbd,0x7e};w=0x01;for(i=0;i<8;i++){P1=w; //行P2=led[i]; //列delay(20);w<<=1;}}TF1=0;count++;if(count==20){count=0;time--;}if(time==0)break;}EA=0;P1=L;TH1=m;TL1=n;time=o;EA=1;
}void main()
{%此处省略**行%while(1){init1();//东西直行右转10sinit2();//东西左转10sinit3();//间隔30s}
}
结束语
希望我的分享对你的学习有帮助。
加油学习人!!!
从简单的程序入手不断尝试,多试几次就可以了,最后祝你学习进步天天开心。
单片机交通灯设计(含箭头指示)相关推荐
- 基于51单片机交通灯设计时间可设置仿真红绿灯十字路口
演示视频:https://www.bilibili.com/video/BV1Tt4y1y7s8/ 将链接复制至IE浏览器打开!!! 功能操作说明: 从上到下,设置键,加键,减键,特殊键.单独一个按键 ...
- 52单片机交通灯课程设计
单片机交通灯课程设计 1. 实验目的和器件 1.1实验目的 (1)通过单片机课程设计,熟练掌握C语言的编写方法,将理论联系到实际中去,提高我们的动手和动脑能力. (2)通过交通信号灯控制系统的设计,掌 ...
- 基于单片机的交通灯设计
摘要 本系统由单片机系统.键盘.LED 显示.交通灯演示系统组成.系统包括人行道.左转.右转.以及基本的交通灯的功能.系统除基本交通灯功能外,还具有倒计时.时间设置.紧急情况处理.分时段调整信号灯的点 ...
- 基于红外技术的交通灯设计
目录 基于红外技术的交通灯设计 1 摘 要 1 Abstract 2 1 引言 1 1.1基于红外技术的交通灯的选题背景 1 1.2基于红外技术的交通灯选题的现实意义 1 1.3国内外研究现状及其发展 ...
- 简易交通灯控制系统设计c语言,基于单片机交通灯控制系统设计毕业设计.doc
您所在位置:网站首页 > 海量文档  > 计算机 > Java 基于单片机交通灯控制系统设计毕业设计.doc30页 本 ...
- 基于51单片机交通灯控制系统
51单片机交通灯控制系统 可调时间+紧急+行人+黄灯5s 仿真:proteus 7.8 程序编译器:keil 4/keil 5 编程语言:C语言 设计编号:J008 目录标题 51单片机交通灯控制系统 ...
- 51单片机交通灯(定时器+38译码器+中断)
51单片机交通灯这个实例主要用到的知识点有: >如何点亮LED >38译码器位选与段选 >定时器控制 >中断控制 #include <reg52.h>/****** ...
- 【FPGA】EDA技术综合设计 交通灯设计
交通灯设计: 1.设计原理 (1)对项目进行模块划分.对各模块的功能及其端口进行说明. ①分频器部分 降低实验板固有频率,分出频率用来计数和数码管动态扫描. ②状态机部分 0,1,2,3四个基础状态以 ...
- 微型计算机接口与技术的交通灯,微机原理与接口技术课程设计——交通灯设计.doc...
微机原理与接口技术课程设计--交通灯设计.doc 1 任务及要求 1.1设计任务 交通信号灯的控制: (1)通过8255A并口来控制LED发光二极管的亮灭. (2)A口控制红灯,B口控制黄灯,C口控制 ...
- ewb交通灯报告和文件_基于EWB的交通灯设计
本文着眼于目前普遍应用在城市道路上的交通灯控制系统,从课程设计的题目要求出发,设计了一个十字路口主次街道的交通灯控制电路. 首先进行交通灯状态变换的分析和交通灯总体框架的设计,接着提出了2种电路设计方 ...
最新文章
- linux,mac,unix 系统下cd 进入有空格的目录或者打开有空格的文件
- git学习4:分支管理
- Java-进阶:Java-File--IO—2
- erwin模型导入mysql_使用erwin进行mysql建模
- 【Java例题】1.3给朋友的贺卡
- mysql存储过程删除_MySQL 存储过程删除大表
- mysql从一个表查询插入另一个表存在时更新_漫谈MySQL的锁机制
- R中读取文件,找不到路径问题 No such file or directory
- CF 504E Misha and LCP on Tree——后缀数组+树链剖分
- X5 浏览器内核调研报告
- 简单的jsp代码(登录界面)
- 判断USB打印机离线状态
- 清理C盘——这个操作让你的C盘多出20G空间
- 诺基亚5320XM 上的最好的手机浏览器,UCWEB 6
- Deecamp夏令营面试及结营体验
- 中企海外周报 | 华为在德国发布mate30系列手机;一汽新车亮相法兰克福车展
- SUMX2MY2函数,你知道什么意思吗?
- 数字信号处理——绪论总结
- 操作系统中的进程调度策略有哪几种
- 基于PID控制的电机速度闭环控制系统演示和讲解
热门文章
- 0204UNIFORM SIZE=10M?index?insert分裂
- donet 微服务开发 学习-AOP框架基础
- jenkins+donet core持续集成环境搭建
- 基于android个人记账本的软件设计,基于Android的个人记账软件的设计与实现-开题报告...
- 基于微信小程序的毕业设计题目(19)php菜谱美食小程序(含开题报告、任务书、中期报告、答辩PPT、论文模板)
- Rwordseg包如何加载本地词典
- 论文总结(3):Intelligent Traffic Monitoring Systems for Vehicle Classification: A Survey
- windows下安装yarn
- 非线性拟合(C++版)
- 麦克风阵列语音增强(二)