- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
单片机交灯控制器设计报告
《交通灯控制器》
设计报告
设计时间:2012-10-26
班 级:2011911班
小组成员:曾扬武
闵 菏
曹茵茵
单片机控制交通灯设计方案
一、单片机设计交通灯的设计要求:
状态一:南北绿灯亮,东西红灯亮,南北人行道绿灯,东西人行道红灯,南北左拐绿灯,东西左拐红灯。(时间为15S)
状态二:南北黄灯亮,东西红灯亮,南北人行道绿灯,东西人行道红灯,南北左拐绿灯,东西左拐红灯。(时间为5S)
状态三:南北红灯亮,东西绿灯亮,南北人行道红灯,东西人行道绿灯,南北左拐红灯,东西左拐绿灯。(时间为15S)
状态四:南北红灯亮,东西黄灯亮,南北人行道红灯,东西人行道绿灯,南北左拐红灯,东西左拐绿灯。(时间为5S)
二、设计原理分析
人行道人行道人行道 人行道 1、
人行道
人行道
人行道
人行道
2、对于交通信号灯来说,应该有东西南北共四组灯,但由于同一道上的两组的信号灯的显示情况是相同的,所以只要用两组就行了,因此,采用单片机内部的I/O口上的P1口中的6个引脚即可来控制6个信号灯。
3、通过编写程序,实现对发光二极管的控制,来模拟交通信号灯的管理。每延时一段时间,灯的显示情况都会按交通灯的显示规律进行状态转换。
4、通过延时时间送显,可以在原有的交通信号灯系统的基础上,增添其倒计时间的显示功能,实现其功能的扩展。
5.通过脉冲中断编写中断程序,可实现中断。
三、设计的仿真图如下;
其接法为:P0接数码管的端选段,
P1接数码管的位选端,
P2接交通灯,接法如下:
P20,P21,P22,分别接南北向的红黄绿灯,
P23接南北左拐绿灯,
P24,P25,P26,分别接东西向的红黄绿灯,
P27接东西左拐红灯
东西人行到红绿灯和南北红绿灯接到一起
南北人行到红绿灯和东西红绿灯接到一起
四、AT89C51的KILL程序
#include reg51.h
#define uchar unsigned char
#define uint unsigned int
uchar code wei[]={0x01,0x02,0x04,0x08}; //位码选择
uchar code duan[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};//段码选择
uchar table[4]={0,0,0,0};//四位为选端赋值区间
uchar num=0;
uchar ID=1;
uchar sec=15;
uchar n=0;
void init(void)
{
P0=0xff;//端口初始化
P1=0x00;//端口初始化
P2=0x00;//端口初始化
TMOD=0x01;//使用定时器0的工作方式
EA=1;//开总中断
ET0=1;//开定时器0的中断
TH0=(65536-10000)/256;//定时10毫秒
TL0=(65536-10000)%256;
TR0=1;
}
void main(void)
{
init();
while(1)
{
switch(ID)//选择函数
{
case 1:P2=0x14;break;//东西红,南北绿,
case 2:P2=0x12;break;//东西红,南北黄,
case 3:P2=0x41;break;//东西绿,南北红,
case 4:P2=0x21;break;//东西黄,南北红,
default:break;
}
}
}
void timer0() interrupt 1//对应中断定时器0
{
TH0=(65536-10000)/256;
TL0=(65536-10000)%256;
P1=wei[num];//位选端送值
P0=duan[table[num]];//端选端送值
num++;
if(num==4)
num=0;
table[0]=(sec-1)/10;
table[1]=(sec-1)%10;
table[2]=(sec-1)/10;
table[3]=(sec-1)%10;
n++;
if(n==100)//10毫秒执行一百次为一秒
{
n=0;
sec--;
if(sec==0)
{
ID++;
if(ID==5)//
ID=1;
switch(ID)
{
case 1:sec=15;break; //
case 2:sec=3;break;//
case 3:sec=15;break;//
c
原创力文档


文档评论(0)