交通灯信号灯自动控制系统

更新时间:2024-04-27 02:43:01 阅读量: 综合文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

《C51程序设计》大作业

设计题目:交通灯信号灯自动控制系统

班 级: 学 号: 姓 名: 成 绩:

2013年5月

一、 设计任务 设计功能要求如下

(1) 以秒为计时单位,两位数码管以十进制递减计数形式作定时

显示,在递减计数回零瞬间完成换灯操作。

(2) 通过键盘红黄绿三色信号灯所亮时间在0~99秒内任意

设定。

(3) 十字路口的通行起始状态可人工设定,运行中可通过人工干

预使十字路口通行状态固定于任何一种工作模式。

二、电路原理图

三、 系统流程图

1、主程序流程图

开始 时钟初值设置子程序 开时钟2 绿灯初值设置子程序 黄灯初值设置子程序 开时钟1,倒计时 状态固定 状态选择

2、时钟初值控制子程序

时钟键盘扫描 N N 是否按下时钟键 Y 扫描加一,减一键盘 N 是否有键盘按下 Y 各个位的加一,减一

3、绿灯,黄灯初值设置子程序

扫描绿灯键盘控制N 是否键盘按下 Y 扫描加一,减一键 N 键盘是否按下 Y 相应位加一或

4、时钟控制与倒计时控制

时钟,倒计时初值通过键盘输入。倒计时使用52单片机

内部定时器1实现计数,时钟控制部分是使用定时、计数器2 实现计时,以秒为基本单位在数码管中显示。时钟部分:当秒的 个位计时到了10,则秒个位清0,同时十位进一,以此类推;倒 计时部分显示是则递减显示。此过程通过判断语句实现。

5、.灯状态控制

灯的状态通过键盘扫描控制。状态固定键按下时,关闭定

时器1;再次按下此键时,打开定时器。状态选择键按下时,程 序跳至下一个状态的程序控制部分,从而实现状态改变。

}

delay(1); p3_2=1;

void display3(uchar aa,uchar bb,uchar cc,uchar dd,uchar ee,uchar ff) {

p3_2=1;p3_3=1; P1=0xff;

wela=1;

dula=1;

dula=1; P1=table[bb]; dula=0; P1= 0xff; wela=1; P1=wei[6]; wela=0; delay(1); P1=wei[7];

wela=0; P1=0x00; dula=1; P1=table[aa]; dula=0;

delay(1);

P1=table[10];

dula=0; P1=0xff; wela=1; P1= wei[5]; wela=0;

delay(1);

dula=1;

P1=table[cc];

dula=0; P1=0xff; wela=1; P1= wei[4]; wela=0;

delay(1);

dula=1; P1=table[dd]; dula=0; P1= 0xff; wela=1; P1=wei[3]; wela=0; delay(1);

dula=1;

}

P1=table[10];

dula=0; P1=0xff; wela=1; P1= wei[2]; wela=0;

delay(1);

dula=1;

P1=table[ee];

dula=0; P1=0xff; wela=1; P1= wei[1]; wela=0;

delay(1);

dula=1; P1=table[ff]; dula=0; P1= 0xff; wela=1; P1=wei[0]; wela=0; delay(1);

void init() { }

//************************绿灯键盘扫描程序 keyscan1() {

if(key0==0) wela=0; dula=0;

TH1=(65536-50000)/256; TL1=(65536-50000)%6; TMOD=0x11; EA=1; ET1=1;TR1=0;

TH0=(65536-50000)/256; TL0=(65536-50000)%6; ET0=1;TR0=0;

{

//b=0;

delay(12);

while(key0==0) ; delay(12);

con++;

//b++;

}

if(con!=0) //con=1||2时的加一运算

if(key2==0)

{

delay(12); while(key2==0) ; delay(12); timedate1[con]++;

if(timedate1[con]>9)timedate1[con]=0;

shi1=timedate1[1]; ge1=timedate1[2];

display(shi1,ge1);

n1=10*shi1+ge1;

}

if(con!=0) //con=1||2时的减一运算

shi1=timedate1[1];

if(key3==0)

{

delay(12); while(key3==0) ; delay(12); timedate1[con]--;

if(timedate1[con]==255)timedate1[con]=9;

ge1=timedate1[2];

display(shi1,ge1);

n1=10*shi1+ge1;

}

}

//*********************黄灯控制键扫描 keyscan2() {

if(key1==0)

{

b=0;

delay(12);

while(key1==0) ; delay(12);

ye++;

b++;

}

if(ye!=0) //con=1||2时的加一运算

if(key2==0)

{

delay(12); while(key2==0) ; delay(12); timedate2[ye]++;

if(timedate2[ye]>9)timedate2[ye]=0;

shi2=timedate2[1];

ge2=timedate2[2]; display(shi2,ge2) ; n2=10*shi2+ge2;

}

}

if(ye!=0) //con=1||2时的减一运算

shi2=timedate2[1];

if(key3==0)

{

delay(12); while(key3==0) ; delay(12); timedate2[ye]--;

if(timedate2[ye]==255)timedate2[ye]=9;

ge2=timedate2[2];

display(shi2,ge2);

n2=10*shi2+ge2;

}

void timer0() interrupt 1 { }

//******************时钟控制键扫描程序 keyscan3() {

if(key6==0)

TH0=(65536-50000)/256; TL0=(65536-50000)%6; a1++;

{

delay(12);

while(key6==0) ; delay(12);

con3++;

TR1=0;

if(con3==5){TR0=1;con3=0; }

}

if(con3!=0) //con=1||2时的加一运算

if(key2==0)

{ }

delay(12); while(key2==0) ; delay(12); timedate3[con3]++; if(con3==1)con31=2; else if(con3==2)con31=9; else if(con3==3)con31=5; else if(con3==4)con31=9;

if(timedate3[con3]>con31)timedate3[con3]=0; if(timedate3[1]==2&&timedate3[2]==4)

{timedate3[2]=0;timedate3[1]=0;}

if(con3!=0)

if(key3==0) {

delay(12);

}

}

while(key3==0) ; delay(12); timedate3[con3]--;

if(con3==1) con32=2; else if(con3==2) con32=9; else if(con3==3) con32=5; else if(con3==4) con32=9;

if(timedate3[con3]==255)timedate3[con3]=con32; if(timedate3[1]==2&&timedate3[2]==9)

timedate3[2]=3;

aa=timedate3[1]; //小时的十是位 bb=timedate3[2]; cc=timedate3[3]; dd=timedate3[4]; ee=timedate3[5]; ff=timedate3[6]; t=10*aa+bb;

void time_intt3(void) interrupt 3 {

TH0=(65536-50000)/256; TL0=(65536-50000)%6; a3++; if(a3==20)

}

{

a3=0;timedate3[6]++; if(timedate3[6]==10)

{timedate3[6]=0;timedate3[5]++;}

if(timedate3[5]==6)

{timedate3[5]=0;timedate3[4]++;}

if(timedate3[4]==10)

{timedate3[4]=0;timedate3[3]++;}

if(timedate3[3]==6)

{timedate3[3]=0;timedate3[2]++;}

if(timedate3[2]==10)

{timedate3[2]=0;timedate3[1]++;}

if(timedate3[1]==2&&timedate3[2]==4)

{timedate3[1]=0;timedate3[2]=0;}

aa=timedate3[1]; bb=timedate3[2]; cc=timedate3[3]; dd=timedate3[4]; ee=timedate3[5]; ff=timedate3[6]; t=10*aa+bb; }

附:参考文献

(1)祁伟 杨亭 单片机C51程序设计教程与实验. 北京:北京航空航天大学出版社2010

(2)何立民上编.单机应用文集. 北京:北京航空航天大学出版社2009 (3)何立民 主编,C51系列单片机应用系统设计,北京:北京航空航天大学出版

社2010

本文来源:https://www.bwwdw.com/article/8cyg.html

Top