基于Proteus仿真51交通灯毕设Word格式文档下载.docx

上传人:b****5 文档编号:18782379 上传时间:2023-01-01 格式:DOCX 页数:10 大小:16.81KB
下载 相关 举报
基于Proteus仿真51交通灯毕设Word格式文档下载.docx_第1页
第1页 / 共10页
基于Proteus仿真51交通灯毕设Word格式文档下载.docx_第2页
第2页 / 共10页
基于Proteus仿真51交通灯毕设Word格式文档下载.docx_第3页
第3页 / 共10页
基于Proteus仿真51交通灯毕设Word格式文档下载.docx_第4页
第4页 / 共10页
基于Proteus仿真51交通灯毕设Word格式文档下载.docx_第5页
第5页 / 共10页
点击查看更多>>
下载资源
资源描述

基于Proteus仿真51交通灯毕设Word格式文档下载.docx

《基于Proteus仿真51交通灯毕设Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《基于Proteus仿真51交通灯毕设Word格式文档下载.docx(10页珍藏版)》请在冰豆网上搜索。

基于Proteus仿真51交通灯毕设Word格式文档下载.docx

uchardataset_timedx=30;

uchardataset_timenb=30;

intn;

uchardatab;

//定时器中断次数

sbitk1=P1^6;

//定义5组开关

sbitk2=P1^7;

sbitk3=P2^7;

sbitk4=P3^0;

sbitk5=P3^1;

sbitYellow_nb=P2^5;

//南北黄灯标志

sbitYellow_dx=P2^2;

//东西黄灯标志

sbitGreen_nb=P2^4;

sbitGreen_dx=P2^1;

sbitRed_nb=P2^6;

sbitRed_dx=P2^3;

sbitBuzz=P3^7;

bitBuzzer_Indicate;

bittime=0;

//灯状态循环标志

bitset=1;

//调时方向切换键标志

ucharcodetable[10]={//共阴极字型码

0x3f,//--0

0x06,//--1?

0x5b,//--2?

0x4f,//--3

0x66,//--4?

0x6d,//--5

0x7d,//--6

0x07,//--7?

0x7f,//--8

0x6f,//--9//0x00//--NULL

};

//函数的声明部分

voiddelay(intms);

//延时子程序

voidkey();

//按键扫描子程序

voidkey_to1();

//键处理子程序

voidkey_to2();

voidkey_to3();

voiddisplay();

//显示子程序

voidlogo();

//开机LOGO

voidBuzzer();

//主程序

voidmain()

{

TMOD=0X01;

TH0=0XD8;

TL0=0XF0;

EA=1;

ET0=1;

TR0=1;

EX0=1;

EX1=1;

logo();

P2=0Xc3;

//开始默认状态,东西绿灯,南北黄灯

sec_nb=sec_dx+5;

while

(1)

{

key();

//调用按键扫描程序

display();

//调用显示程序

Buzzer();

}

}

//函数的定义部分

voidkey()//按键扫描子程序

if(k1!

=1)

{

delay(10);

if(k1!

{

while(k1!

{

key_to1();

for(n=0;

n<

40;

n++)

{display();

}

}

}

if(k2!

if(k2!

while(k2!

key_to2();

}

if(k3!

=1)

{

TR0=1;

//启动定时器

Buzzer_Indicate=0;

sec_nb=set_timenb;

//从中断回复,仍显示设置过的数值

sec_dx=set_timedx;

if(time==0)

{P2=0X99;

sec_nb=sec_dx+5;

else{P2=0xC3;

sec_dx=sec_nb+5;

}

if(k4!

if(k4!

{

while(k4!

=1);

set=!

set;

if(k5!

if(k5!

while(k5!

key_to3();

voiddisplay()//显示子程序

{

buf[1]=sec_dx/10;

//第1位东西秒十位

buf[2]=sec_dx%10;

//第2位东西秒个位

buf[3]=sec_nb/10;

//第3位南北秒十位

buf[0]=sec_nb%10;

//第4位南北秒个位

P1=0xff;

//初始灯为灭的

P0=0x00;

P1=0xfe;

//片选LCD1

P0=table[buf[1]];

delay

(1);

P1=0xff;

P1=0xfd;

//片选LCD2

P0=table[buf[2]];

delay

(1);

P1=0xff;

P1=0Xfb;

//片选LCD3

P0=table[buf[3]];

P1=0Xf7;

P0=table[buf[0]];

//片选LCD4

voidtime0(void)interrupt1using1//定时中断子程序

b++;

if(b==19)//定时器中断次数

{b=0;

sec_dx--;

sec_nb--;

if(sec_nb<

=5&

&

time==0)//东西黄灯闪

{Green_nb=0;

Yellow_nb=!

Yellow_nb;

}

if(sec_dx<

time==1)//南北黄灯闪

{Green_dx=0;

Yellow_dx=!

Yellow_dx;

}

if(sec_dx==0&

sec_nb==5)

sec_dx=5;

if(sec_nb==0&

sec_dx==5)

sec_nb=5;

if(time==0&

sec_nb==0)

{P2=0x99;

time=!

time;

sec_nb=set_timenb;

sec_dx=set_timenb+5;

if(time==1&

sec_dx==0)

{P2=0Xc3;

sec_dx=set_timedx;

sec_nb=set_timedx+5;

}

voidkey_to1()//键盘处理子程序之+

TR0=0;

//关定时器

if(set==0)

set_timenb++;

//南北加1S

else

set_timedx++;

//东西加1S

if(set_timenb==100)

set_timenb=1;

if(set_timedx==100)

set_timedx=1;

//加到100置1

sec_nb=set_timenb;

//设置的数值赋给东西南北

sec_dx=set_timedx;

voidkey_to2()//键盘处理子程序之-

if(set==0)

set_timenb--;

//南北减1S

set_timedx--;

//东西减1S

if(set_timenb==0)

set_timenb=99;

if(set_timedx==0)

set_timedx=99;

//减到1重置99

sec_nb=set_timenb;

voidkey_to3()//键盘处理之紧急车通行

P2=0Xc9;

sec_dx=00;

sec_nb=00;

Buzzer_Indicate=1;

voidint0(void)interrupt0using1//只允许东西通行

Buzzer_Indicate=0;

sec_dx=00;

sec_nb=00;

voidint1(void)interrupt2using1//只允许南北通行

P2=0X99;

voidlogo()//开机的Logo"

----"

{for(n=0;

50;

P0=0x40;

P1=0Xfb;

P1=0Xf7;

P1=0xff;

voidBuzzer()

if(Buzzer_Indicate==1)

Buzz=!

Buzz;

elseBuzz=0;

voiddelay(intms)//延时子程序

uintj,k;

for(j=0;

j<

ms;

j++)

for(k=0;

k<

124;

k++);

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

当前位置:首页 > 医药卫生 > 基础医学

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

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