基于单片机的交通灯设计.docx

上传人:b****1 文档编号:2650662 上传时间:2023-05-04 格式:DOCX 页数:16 大小:50.88KB
下载 相关 举报
基于单片机的交通灯设计.docx_第1页
第1页 / 共16页
基于单片机的交通灯设计.docx_第2页
第2页 / 共16页
基于单片机的交通灯设计.docx_第3页
第3页 / 共16页
基于单片机的交通灯设计.docx_第4页
第4页 / 共16页
基于单片机的交通灯设计.docx_第5页
第5页 / 共16页
基于单片机的交通灯设计.docx_第6页
第6页 / 共16页
基于单片机的交通灯设计.docx_第7页
第7页 / 共16页
基于单片机的交通灯设计.docx_第8页
第8页 / 共16页
基于单片机的交通灯设计.docx_第9页
第9页 / 共16页
基于单片机的交通灯设计.docx_第10页
第10页 / 共16页
基于单片机的交通灯设计.docx_第11页
第11页 / 共16页
基于单片机的交通灯设计.docx_第12页
第12页 / 共16页
基于单片机的交通灯设计.docx_第13页
第13页 / 共16页
基于单片机的交通灯设计.docx_第14页
第14页 / 共16页
基于单片机的交通灯设计.docx_第15页
第15页 / 共16页
基于单片机的交通灯设计.docx_第16页
第16页 / 共16页
亲,该文档总共16页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

基于单片机的交通灯设计.docx

《基于单片机的交通灯设计.docx》由会员分享,可在线阅读,更多相关《基于单片机的交通灯设计.docx(16页珍藏版)》请在冰点文库上搜索。

基于单片机的交通灯设计.docx

基于单片机的交通灯设计

基于at89c51的交通灯设计

该设计的功能有交通灯倒计时,红绿黄显示,手动控制,日历显示(初始值为11月20日7时01分)。

要做实验设计的拿去用吧,设计思路什么的就自己写。

原创

东北大学秦皇岛分校

交通灯程序:

#include

#defineucharunsignedchar//宏定义uchar

#defineuintunsignedint//宏定义uint

sbitRED_DONGXI=P1^0;//南北方向红灯亮

sbitYELLOW_DONGXI=P1^1;//南北方向黄灯亮

sbitRED_NANBEI=P1^3;//东西方向红灯亮

sbitGREEN_DONGXI=P1^2;//南北方向绿灯亮

sbitYELLOW_NANBEI=P1^4;//东西方向黄灯亮

sbitGREEN_NANBEI=P1^5;//东西方向绿灯亮

sbitDXweixuan1=P1^6;//南北方向数码管位选1

sbitDXweixuan2=P1^7;//南北方向数码管位选2

sbitNBweixuan1=P3^0;//东西方向数码管位选1

sbitNBweixuan2=P3^1;//东西方向数码管位选2

sbitL1=P3^5;

sbitL2=P3^6;

sbitL3=P3^7;//数码管显示位月、日、时、分选控制端

uintaa,bai,shi,ge,bb;

uintshi1,ge1,shi2,ge2,minute=00,hour=07,day=20,month=11;//月日时分初始值设定

uintmonth1,month2,day1,day2,hour1,hour2,minute1,minute2;//定义变量

/*数码管显示0-9*/

uintcodetable[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};

uintcodetable1[]={0xfc,0x60,0xda,0xf2,0x66,0xb6,0xbe,0xe0,0xfe,0xf6};

/*子函数声明*/

voiddelay(uintz);

voiddelay0(uintz);

voidinit(uinta);

voiddisplay(uintshi1,uintge1,uintshi2,uintge2);

voidxtimer0();

voidinit1();

voidinit2();

voidinit3();

voidinit4();

voidinit5();

voidinit6();

voiddisplay1();

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

主函数

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

voidmain()

{

P0=0xFF;

P1=0xFF;

P2=0x00;

P3=0xFF;

EA=1;//打开外部中断

EX0=1;//允许外部中断0中断

IT0=0;

EX1=1;//允许外部中断1中断

IT1=0;

display1();//INT0为沿触发方式

init1();//第1个位状态

while

(1)

{

init6();//第6个状态

init2();//第2个状态

init3();//第3个状态

init4();//第4个状态

init5();//第5个状态

}

}

voidinit1()//预备状态东、西、南、北方向均亮红灯3S

{

uinttemp;

temp=3;//变量赋初值

TMOD=0x01;//定时器0工作于方式1

TH0=(65535-50000)/256;

TL0=(65535-50000)%256;//定时器赋初值

EA=1;//开外部中断

ET0=1;//开定时中断

TR0=1;//开定时器0

while

(1)

{

RED_DONGXI=0;

RED_NANBEI=0;

GREEN_DONGXI=1;

GREEN_NANBEI=1;

YELLOW_DONGXI=1;

YELLOW_NANBEI=1;

if(aa==20)//定时20*50MS=1S

{

aa=0;//定时完成一次后清0

temp--;//变量自减

}

shi1=shi2=temp/10;//显示十位

ge1=ge2=temp%10;//显示个位

if(temp==0)

{

temp=5;//变量赋值为5

break;

}

display(ge1,shi1,ge2,shi2);//显示红绿灯显示剩余时间

display1();//显示年、月、日

}

}

voidinit2()//第二个状态:

东西亮红灯30S~5S、南北亮绿灯25~0S;

{

uinttemp;

temp=26;//变量赋初值

TMOD=0x01;//定时器0工作于方式1

TH0=(65535-50000)/256;

TL0=(65535-50000)%256;//定时器赋初值

EA=1;//开外部中断

ET0=1;//开定时中断

TR0=1;//开定时器0

while

(1)

{

RED_DONGXI=1;

RED_NANBEI=0;

GREEN_DONGXI=0;

GREEN_NANBEI=1;

YELLOW_DONGXI=1;

YELLOW_NANBEI=1;

if(aa==20)//定时20*50MS=1S

{

aa=0;//定时完成一次后清0

temp--;//变量自增

shi1=(temp+5)/10;//显示十位

ge1=(temp+5)%10;//显示个位

shi2=temp/10;

ge2=temp%10;

if(temp==0)//定时25S

{

temp=26;//变量清0

break;

}

}

display(ge1,shi1,ge2,shi2);

display1();

}

}

voidinit3()//第三个状态:

南北绿灯变为黄灯闪5s、东西方向亮红灯5S

{

uinttemp;

temp=6;//变量赋初值

TMOD=0x01;//定时器0工作于方式1

TH0=(65535-50000)/256;

TL0=(65535-50000)%256;//定时器赋初值

EA=1;//开外部中断

ET0=1;//开定时中断

TR0=1;//开定时器0

while

(1)

{

RED_NANBEI=0;

GREEN_DONGXI=1;

if(aa==20)//定时20*50MS=1S

{

aa=0;//定时完成一次后清0

temp--;//变量自增

YELLOW_DONGXI=~YELLOW_DONGXI;

shi1=temp/10;

shi2=shi1;//显示十位

ge1=temp%10;

ge2=ge1;//显示个位

}

if(temp==0)//定时5S

{

temp=6;//变量赋值

break;

}

display(ge1,shi1,ge2,shi2);

display1();

}

}

voidinit4()//第四个状态:

东西亮绿灯25~0S,南北方向亮红灯30~5S;

{

uinttemp;

temp=26;//变量赋初值

TMOD=0x01;//定时器0工作于方式1

TH0=(65535-50000)/256;

TL0=(65535-50000)%256;//定时器赋初值

EA=1;//开外部中断

ET0=1;//开定时中断

TR0=1;//开定时器0

while

(1)

{

RED_DONGXI=0;

RED_NANBEI=1;

YELLOW_DONGXI=1;

GREEN_NANBEI=0;

if(aa==20)//定时20*50MS=1S

{

aa=0;//定时完成一次后清0

temp--;//变量自增

shi1=temp/10;

shi2=(temp+5)/10;//显示十位

ge1=temp%10;

ge2=(temp+5)%10;//显示个位

if(temp==0)//定时25S

{

temp=26;//变量清0

break;

}

}

display(ge1,shi1,ge2,shi2);

display1();

}

}

voidinit5()//第五个状态:

东西闪黄灯5~0s、南北红灯5S

{

uinttemp;

temp=6;//变量赋初值

TMOD=0x01;//定时器0工作于方式1

TH0=(65535-50000)/256;

TL0=(65535-50000)%256;//定时器赋初值

EA=1;//开外部中断

ET0=1;//开定时中断

TR0=1;//开定时器0

while

(1)

{

RED_NANBEI=1;

RED_DONGXI=0;

GREEN_DONGXI=1;

GREEN_NANBEI=1;

if(aa==20)//定时20*50MS=1S

{

aa=0;//定时完成一次后清0

temp--;//变量自增

YELLOW_NANBEI=~YELLOW_NANBEI;

shi1=temp/10;

shi2=shi2;//显示十位

ge1=temp%10;

ge2=ge1;//显示个位

if(temp==0)//定时100S

{

temp=6;//变量清0

break;

}

}

display(ge1,shi1,ge2,shi2);

display1();

}

}

voidinit6()//显示年、月、日

{

minute++;

month1=month/10;

month2=month%10;

day1=day/10;

day2=day%10;

hour1=hour/10;

hour2=hour%10;

minute1=minute/10;

minute2=minute%10;

if(minute==60)

{

hour++;

if(hour==24)

{

day++;

if(day==30)

{

month++;

}

}

}

}

/*显示子函数*/

voiddisplay1()

{

L1=0,L2=0,L3=0;

P2=table1[month1];delay0

(2);

L1=1,L2=0,L3=0;

P2=table1[month2];delay0

(2);

L1=0,L2=1,L3=0;

P2=table1[day1];delay0

(2);

L1=1,L2=1,L3=0;

P2=table1[day2];delay0

(2);

L1=0,L2=0,L3=1;

P2=table1[hour1];delay0

(2);

L1=1,L2=0,L3=1;

P2=table1[hour2];delay0

(2);

L1=0,L2=1,L3=1;

P2=table1[minute1];delay0

(2);

L1=1,L2=1,L3=1;

P2=table1[minute2];delay0

(2);

}

voiddisplay(uintshi1,uintge1,uintshi2,uintge2)

{

DXweixuan1=0;

DXweixuan2=1;

NBweixuan1=1;

NBweixuan2=1;

P0=table[ge1];//显示十位

delay0(5);

DXweixuan1=1;

DXweixuan2=0;

NBweixuan1=1;

NBweixuan2=1;

P0=table[shi1];//显示个位

delay0(5);

DXweixuan1=1;

DXweixuan2=1;

NBweixuan1=0;

NBweixuan2=1;

P0=table[ge2];//显十位

delay0(5);

DXweixuan1=1;

DXweixuan2=1;

NBweixuan1=1;

NBweixuan2=0;

P0=table[shi2];//显示个位

delay0(5);

}

voidxint0()interrupt0//外部中断0

{

RED_NANBEI=0;

RED_DONGXI=0;

GREEN_NANBEI=1;

GREEN_DONGXI=1;

YELLOW_NANBEI=1;

YELLOW_DONGXI=1;

P0=0x00;

NBweixuan1=0;

NBweixuan2=0;

DXweixuan1=0;

DXweixuan2=0;

display1();

return;

}

voidxint1()interrupt2//外部中断1

{

RED_NANBEI=1;

RED_DONGXI=1;

GREEN_NANBEI=0;

GREEN_DONGXI=0;

YELLOW_NANBEI=1;

YELLOW_DONGXI=1;

P0=0x00;

NBweixuan1=0;

NBweixuan2=0;

DXweixuan1=0;

DXweixuan2=0;

display1();

return;

}

/*定时中断子函数*/

voidxtimer0()interrupt1

{

TH0=(65535-50000)/256;

TL0=(65535-50000)%256;

aa++;

}

/*延时子函数*/

voiddelay0(uintz)

{uinti,j;

for(i=0;i

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

}

voiddelay(unsignedintj)

{

unsignedchark;

unsignedinti;

for(;j>0;j--)

{

for(i=1250;i>0;i--)

{

for(k=180;k>0;k--);

}

}

}

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

当前位置:首页 > 人文社科 > 法律资料

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2