交通灯控制器 C程序 PCL.docx

上传人:b****5 文档编号:28622278 上传时间:2023-07-19 格式:DOCX 页数:15 大小:46.23KB
下载 相关 举报
交通灯控制器 C程序 PCL.docx_第1页
第1页 / 共15页
交通灯控制器 C程序 PCL.docx_第2页
第2页 / 共15页
交通灯控制器 C程序 PCL.docx_第3页
第3页 / 共15页
交通灯控制器 C程序 PCL.docx_第4页
第4页 / 共15页
交通灯控制器 C程序 PCL.docx_第5页
第5页 / 共15页
点击查看更多>>
下载资源
资源描述

交通灯控制器 C程序 PCL.docx

《交通灯控制器 C程序 PCL.docx》由会员分享,可在线阅读,更多相关《交通灯控制器 C程序 PCL.docx(15页珍藏版)》请在冰豆网上搜索。

交通灯控制器 C程序 PCL.docx

交通灯控制器C程序PCL

C语言主程序:

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

*11.0592MHz晶振

*初始化、开机自检*

*第一个状态:

主干道、支干道均亮红灯5S*

*第二个状态:

主干道亮绿灯27S、支干道亮红灯*

*第三个状态:

主干道黄灯闪烁、支干道红灯闪烁*

*第四个状态:

主干道亮红灯、支干道亮绿灯22S*

*第五个状态:

主干道红灯闪烁、支干道黄灯闪烁*

*返回到第二个状态*

*其中外部中断INTO、INT1分别控制主、支干道亮绿灯*

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

#include//头文件

#include//头文件

#defineucharunsignedchar//宏定义

#defineuintunsignedint//宏定义

sbitRED_ZHU=P1^0;

sbitYELLOW_ZHU=P1^1;

sbitGREEN_ZHU=P1^2;

sbitRED_ZHI=P1^3;

sbitYELLOW_ZHI=P1^4;

sbitGREEN_ZHI=P1^5;

uintaa,bai,shi,ge,bb;

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

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

/*子函数声明*/

voiddelay(uintz);

voiddelay0(uintz);

voiddisplay(uintge,uintshi);

voidxtimer0();

voidcheck();

voidinit1();

voidinit2();

voidinit3();

voidinit4();

voidinit5();

voidxint0();

voidxint1();

voidGREEN_ZHU_ON();

voidGREEN_ZHI_ON();

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

主函数

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

voidmain()

{

EA=1;//开中断

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

IT0=0;//定义INT0触发方式

PX0=1;//中断优先级高

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

IT1=0;//定义INT1触发方式

PX1=1;//中断优先级高

check();//开机自检

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

while

(1)

{

init2();//第2个状态

init3();//第3个状态

init4();//第4个状态

init5();//第5个状态

}

}

voidinit1()//第一个状态:

主干道、支干道均亮红灯5S

{

inttemp;

temp=6;//变量赋初值

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

TH0=0x4c;

TL0=0x00;//定时器赋初值

EA=1;//开中断

ET0=1;//开定时中断

TR0=1;//开定时器T0

while

(1)

{

RED_ZHU=0;

RED_ZHI=0;

GREEN_ZHU=1;

GREEN_ZHI=1;

YELLOW_ZHU=1;

YELLOW_ZHI=1;

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

{

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

temp--;//变量自减

if(temp<0)

{

break;

}

shi=temp%100/10;//显示十位

ge=temp%10;//显示个位

}

display(ge,shi);

}

}

voidinit2()//第二个状态:

主干道亮绿灯27S、支干道亮红灯

{

inttemp;

temp=31;//变量赋初值

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

TH0=0x4c;

TL0=0x00;//定时器赋初值

EA=1;//开中断

ET0=1;//开定时中断

TR0=1;//开定时器T0

while

(1)

{

RED_ZHU=1;

RED_ZHI=0;

GREEN_ZHU=0;

GREEN_ZHI=1;

YELLOW_ZHU=1;

YELLOW_ZHI=1;

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

{

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

temp--;//变量自减

if(temp==3)

{

break;

}

shi=temp%100/10;//显示十位

ge=temp%10;//显示个位

}

display(ge,shi);

}

}

voidinit3()//第三个状态:

主干道黄灯闪烁、支干道红灯闪烁

{

inttemp;

temp=4;//变量赋初值

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

TH0=0x4c;

TL0=0x00;//定时器赋初值

EA=1;//开中断

ET0=1;//开定时中断

TR0=1;//开定时器T0

while

(1)

{

GREEN_ZHU=1;

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

{

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

temp--;//变量自减

YELLOW_ZHU=~YELLOW_ZHU;

RED_ZHI=~RED_ZHI;

if(temp<0)

{

break;

}

shi=temp%100/10;//显示十位

ge=temp%10;//显示个位

}

display(ge,shi);;

}

}

voidinit4()//第四个状态:

主干道亮红灯、支干道亮绿灯22S

{

inttemp;

temp=26;//变量赋初值

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

TH0=0x4c;

TL0=0x00;//定时器赋初值

EA=1;//开中断

ET0=1;//开定时中断

TR0=1;//开定时器T0

while

(1)

{

RED_ZHU=0;

RED_ZHI=1;

YELLOW_ZHU=1;

GREEN_ZHI=0;

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

{

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

temp--;//变量自减

if(temp==3)

{

break;

}

shi=temp%100/10;//显示十位

ge=temp%10;//显示个位

}

display(ge,shi);

}

}

voidinit5()//第五个状态:

主干道红灯闪烁、支干道黄灯闪烁

{

inttemp;

temp=4;//变量赋初值

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

TH0=0x4c;

TL0=0x00;//定时器赋初值

EA=1;//开中断

ET0=1;//开定时中断

TR0=1;//开定时器T0

while

(1)

{

RED_ZHI=1;

GREEN_ZHU=1;

GREEN_ZHI=1;

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

{

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

temp--;//变量自减

YELLOW_ZHI=~YELLOW_ZHI;

RED_ZHU=~RED_ZHU;

if(temp<0)

{

break;

}

shi=temp%100/10;//显示十位

ge=temp%10;//显示个位

}

display(ge,shi);

}

}

/*显示子函数*/

voiddisplay(uintge,uintshi)

{

P0=0xfd;

P2=table[shi];//显示十位

delay0(5);

P0=0xfe;

P2=table[ge];//显示个位

delay0(5);

}

voidxint0()interrupt0//外部中断INT0

{

GREEN_ZHU_ON();

}

voidxint1()interrupt2//外部中断INT1

{

GREEN_ZHI_ON();

}

voidGREEN_ZHU_ON()//外部中断INT0显示子程序

{

RED_ZHI=0;

RED_ZHU=1;

GREEN_ZHI=1;

GREEN_ZHU=0;

YELLOW_ZHI=1;

YELLOW_ZHU=1;

P0=0x00;

P2=0Xff;

delay0(1000);

return;

}

voidGREEN_ZHI_ON()//外部中断INT1显示子程序

{

RED_ZHI=1;

RED_ZHU=0;

GREEN_ZHI=0;

GREEN_ZHU=1;

YELLOW_ZHI=1;

YELLOW_ZHU=1;

P0=0x00;

P2=0xff;

delay0(1000);

return;

}

voidcheck()//开机自检子程序

{

RED_ZHI=0;

RED_ZHU=0;

GREEN_ZHI=0;

GREEN_ZHU=0;

YELLOW_ZHI=0;

YELLOW_ZHU=0;

P0=0x00;

P2=0Xff;

delay

(2);

RED_ZHI=1;

RED_ZHU=1;

GREEN_ZHI=1;

GREEN_ZHU=1;

YELLOW_ZHI=1;

YELLOW_ZHU=1;

P0=0xff;

P2=0xff;

}

/*定时中断子函数*/

voidxtimer0()interrupt1

{

TH0=0x4c;

TL0=0x00;

aa++;

}

/*延时子函数*/

voiddelay0(uintz)

{

uinti,j;

for(i=0;i

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

}

辅助程序:

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

500ms延时函数

晶振:

11.0592MHz

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

voiddelay(ucharj)

{

uchark;

uinti;

for(;j>0;j--)

{

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

{

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

}

}

}

#include

#defineucharunsignedchar

#defineuintunsignedint

ucharcodeTAB1[]={0xe7,0xc3,0x81,0x00,0xe7,0xe7,0xe7,0xe7};

ucharcodeTAB2[]={0xf7,0xf3,0xf1,0x00,0x00,0xf1,0xf3,0xf7};

uchari,t,k,j,l,m;

sbitlv=P2^7;

delay(uchart)

{

while(t--);

}

voidmain(void)

{

if(lv==1)

{

P1=0x01;

for(j=46;j>0;j--)

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

for(i=0;i<8;i++)

{

P0=TAB1[i];

delay(100);

P1=P1<<1|P1>>7;

}

P1=0x01;

for(j=40;j>0;j--)

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

for(i=0;i<8;i++)

{

P0=TAB2[i];

delay(100);

P1=P1<<1|P1>>7;

}

lv=0;

}

else

{

P1=0xff;

P0=0xff;

for(m=1;m>0;m--)

for(j=221;j>0;j--)

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

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

lv=1;

}

}

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

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

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

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