交通灯设计.docx

上传人:b****4 文档编号:24212672 上传时间:2023-05-25 格式:DOCX 页数:35 大小:16.68KB
下载 相关 举报
交通灯设计.docx_第1页
第1页 / 共35页
交通灯设计.docx_第2页
第2页 / 共35页
交通灯设计.docx_第3页
第3页 / 共35页
交通灯设计.docx_第4页
第4页 / 共35页
交通灯设计.docx_第5页
第5页 / 共35页
点击查看更多>>
下载资源
资源描述

交通灯设计.docx

《交通灯设计.docx》由会员分享,可在线阅读,更多相关《交通灯设计.docx(35页珍藏版)》请在冰豆网上搜索。

交通灯设计.docx

交通灯设计

控制交通灯的程序设计

#include 

unsigned char code 

 

dis_7[21]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82, 

 0xf8,0x80,0x90,0x88,0x83,0xc6,0xa1, 

 0x86,0x8e,0xbf,0x89,0x8c,0x00,0xff};//

共阳数码管

 

段码

 

 

unsigned char data disbuf[6]={0x00,0x00,0x00,0x00,0x00,0x00};//

显示缓冲区

:

时分秒使用

 

unsigned char data count_timedx[]={2,10,5,10,25}; //

东西方向倒计时时间

 

unsigned char data count_timenb[]={2,25,10,5,10}; //

南北方向倒计时时间

 

unsigned char data Hour=14,Minite=06,Second=0,Halfsec=0; 

 

//

定义时钟位

 

unsigned char xdata *ledaddr=0x2000; //

锁存器选通地址

 

unsigned char data 

 

Ms=0,Lightcode=0,Light_step,Led_step,Light_num;

 

 

unsigned int 

 

data 

 

Fault_dx=0,Fault_nb=0,Fault_total=0,Countdx=0,Countnb=0; 

 

sbit p10=P1^0; //

0

位数码管位控制端

 

sbit p11=P1^1; //

1

位数码管位控制端

 

sbit p12=P1^2; //

2

位数码管位控制端

 

sbit p13=P1^3; //

3

位数码管位控制端

 

sbit p14=P1^4; //

4

位数码管位控制端

 

sbit p15=P1^5; //

5

位数码管位控制端

 

sbit p16=P1^6; //

发光二极管选通

 

sbit p17=P1^7; //

按键选通

 

sbit p33=P3^3; //k1

 

用于切换四种功能

 

/*****************************************************************************/ 

 

/****************************1

毫秒延时函数

*******************************/ 

void delay1ms(int t) 

unsigned int i,j; 

 

 

for(i=0;i

 

 

for(j=0;j<120;j++) 

 

 

/***************************************************************************/ 

 

/*************************

键盘扫描函数

****************************************/ 

unsigned char getkey(void) 

 

 

unsigned char Y

iwei; 

 

 

unsigned char test=0x00,tim; 

 

 

 

*ledaddr=test; 

 

 

if(p17==0 && tim==0) 

 

 

//

判断是否有按键按下

 

 

 

 

p17=1; 

 

 

 

 

tim=1; 

 

test=0xfe; 

 

delay1ms(5); 

 

 

 

 

for(Y

iwei=0;Yiwei<8;Yiwei++) 

 

//

处理按键

 

 

 

 

 

 

 

 

 

 

 

 

*ledaddr=test; 

 

 

 

 

 

 

if(p17==0)break; 

 

 

 

 

 

 

else test=(test<<1)+1; 

 

 

 

 

 

 

 

 

return Yiwei; 

 

 

 

 

 

else if(p17==0){} 

 

 

else {tim=0;} 

/*****************************************************************************/ 

 

/************************

六位

LED

数码管显示

***********************************/ 

void 

displed(unsigned 

int 

hour_shi,unsigned 

int 

hour_ge,unsigned 

int 

min_shi,unsigned 

int 

min_ge,unsigned int sec_shi,unsigned int sec_ge) 

 

 

*ledaddr=dis_7[hour_shi]; 

 

//

时的十位显示

 

 

 

p10=0; 

 

 

delay1ms

(1); 

 

 

p10=1; 

 

 

*ledaddr=dis_7[hour_ge]; 

 

//

时的个位显示

 

 

 

p11=0; 

 

 

delay1ms

(1); 

 

 

p11=1; 

 

 

*ledaddr=dis_7[min_shi]; 

 

//

分的十位显示

 

 

 

p12=0; 

 

 

delay1ms

(1); 

 

 

p12=1; 

 

 

 

 

*ledaddr=dis_7[min_ge]; 

 

//

分的个位显示

 

 

 

p13=0; 

 

 

delay1ms

(1); 

 

 

p13=1; 

 

 

 

 

*ledaddr=dis_7[sec_shi]; 

 

//

秒的十位显示

 

 

 

p14=0; 

 

 

delay1ms

(1); 

 

 

p14=1; 

 

 

 

 

 

*ledaddr=dis_7[sec_ge]; 

 

//

秒的个位显示

 

 

 

p15=0; 

 

 

delay1ms

(1); 

 

 

p15=1; 

/*****************************************************************************/ 

 

/******************************

发光二极管显示函数

*****************************/ 

void displight(unsigned int state) 

 

 

if(state==0) 

 

 

 

 

 

 

//

状态

0

各方向红灯全亮

 

 

 

 

 

 

 

Lightcode=0xbb; 

 

 

 

 

else if(state==1) 

 

//

状态

1

东西绿灯亮,南北红灯亮

 

 

 

 

 

 

 

Lightcode=0xbe; 

 

 

 

 

else if(state==2) 

 

//

状态

2

东西黄灯闪烁,南北红灯亮

 

 

 

 

 

 

 

Lightcode=0xbd; 

 

 

 

 

else if(state==3) 

 

//

状态

3

东西红灯亮,左行亮,南北红灯亮

 

 

 

 

 

 

 

Lightcode=0xb3; 

 

 

 

 

else if(state==4) 

 

//

状态

4

东西红灯亮,南北直行绿灯亮

 

 

 

 

 

 

 

Lightcode=0xeb; 

 

 

 

 

 

 

else if(state==5) //

状态

5

东西红灯亮,南北黄灯闪烁

 

 

 

 

 

 

 

Lightcode=0xdb; 

 

 

 

 

else if(state==6) 

 

 

//

状态

6

东西红灯亮,南北红灯亮,左行亮

 

 

 

 

 

 

 

Lightcode=0x3b; 

 

 

 

 

 

//

黄灯闪烁

 

 

 

if((Halfsec%2)==0) 

 

 

 

 

 

 

 

 

 

if(state==2) 

 

 

 

 

Lightcode=0xbf; 

 

//

东西闪烁

 

 

if(state==5) 

 

 

 

 

Lightcode=0xfb; 

 

 

//

南北闪烁

 

 

 

 

 

 

 

 

 

 

*ledaddr=Lightcode; //

送交通灯显示状态

 

 

 

 

p16=0; 

 

 

 

delay1ms

(1); 

 

 

 

p16=1; 

 

/****************************************************************************/ 

 

/****************************

违章车辆统计函数

********************************/ 

void weizhang(void) 

 

 

// 

红灯亮的时候是否有车通过,

KL1

键显示东西,

KL2

键显示南北

 

 

 

 

 

 

unsigned char key1; 

 

 

 

 

key1=getkey(); 

 

//

获得键值

 

 

 

 

if((key1==0)&&(Light_step>=4)&&(Light_step<=6)) 

//KL1

键显示南北方向违章车辆,且

只在南北方向为红灯时加

 

 

 

 

 

 

 

 

Fault_dx++; 

 

 

 

 

 

if(Fault_dx==99) 

 

//

最大计数

99

 

 

 

 

 

 

 

 

 

 

Fault_dx=0; 

 

 

 

 

else if((key1==2)&&(Light_step>=1)&&(Light_step<=3)) 

 

 

//KL3

键显示东西方向违章车辆,

且只在东西方向为红灯时加

 

 

 

 

 

 

 

 

Fault_nb++; 

 

if(Fault_nb==99) 

 

 

//

最大计数

99

 

 

 

 

 

Fault_nb=0; 

 

 

 

/***************************************************************************/ 

 

/****************************

数字钟函数

***********************************/ 

void shuzizhong(void) 

 

//

数字钟:

KL3

键调节秒,

KL4

键调节分,

KL5

键调节时

 

 

 

unsigned char data key2; 

 

 

key2=getkey(); 

 

//

获得键值

 

 

 

if(key2==2) 

 

//

调节秒,按一次

KL3

,则加一秒

 

 

 

 

 

 

 

 

 

Second++; 

 

 

 

 

 

 

if(Second==60) 

 

 

 

 

 

 

Second=0; 

 

 

 

 

 

 

 

if(key2==3) 

 

//

调节分,按一次

KL4

,则加一分

 

 

 

 

 

 

 

 

 

Minite++; 

 

 

 

 

 

 

if(Minite==60) 

 

 

 

 

 

 

Minite=0; 

 

 

 

 

 

 

 

 

if(key2==4) 

 

//

调节时,按一次

KL5

,则加一时

 

 

 

{ Hour++; 

if(Hour==24) 

Hour=0; 

 } 

 disbuf[0]=Second%10; //时钟显示,送缓冲区

 disbuf[1]=Second/10; 

 

 

 

 

 

disbuf[2]=Minite%10; 

 

 

 

 

disbuf[3]=Minite/10; 

 

 

 

 

 

 

 

disbuf[4]=Hour%10; 

 

 

 

 

disbuf[5]=Hour/10; 

 

/*****************************************************************************/ 

 

/**************

修改倒计时间函数

*********************************************/ 

void change_time(void) 

 

//

注意:

只修改绿灯、黄灯或左行灯时间,红灯时间自动求出

 

 

 

unsigned int data key3=0; 

 

 

key3=getkey(); 

 

 

if(key3==4) 

 

//KL5

键选择要修改东西向倒计时

 

 

 

 

 

 

 

 

Light_num++; 

 

 

 

 

 

if(Light_num>4) Light_num=0; 

 

 

 

 

 

if(key3==5) //KL2

键用于修改东西方向倒计时,加

 

 

 

 

 

 

 

 

count_timedx[Light_num]++; 

 

 

 

 

 

 

if(count_timedx[Light_num]>=99) 

 

 

 

 

 

 

 

 

 

count_timedx[Light_num]=99; 

 

 

 

 

if(key3==1)//KL6

键用于修改东西方向倒计时,减

 

 

 count_timedx[Light_num]--; 

 if(count_timedx[Light_num]<1) 

 count_timedx[Light_num]=1; }

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 表格模板 > 合同协议

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1