单片机交通灯程序C语言.docx

上传人:b****6 文档编号:6317520 上传时间:2023-01-05 格式:DOCX 页数:7 大小:15.25KB
下载 相关 举报
单片机交通灯程序C语言.docx_第1页
第1页 / 共7页
单片机交通灯程序C语言.docx_第2页
第2页 / 共7页
单片机交通灯程序C语言.docx_第3页
第3页 / 共7页
单片机交通灯程序C语言.docx_第4页
第4页 / 共7页
单片机交通灯程序C语言.docx_第5页
第5页 / 共7页
点击查看更多>>
下载资源
资源描述

单片机交通灯程序C语言.docx

《单片机交通灯程序C语言.docx》由会员分享,可在线阅读,更多相关《单片机交通灯程序C语言.docx(7页珍藏版)》请在冰豆网上搜索。

单片机交通灯程序C语言.docx

单片机交通灯程序C语言

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

*实验名:

动态显示数码管实验

*使用的IO:

*实验效果:

数码管显示76543210。

*注意:

当位选用P1口的时候注意可能会有一位不亮,那么调整J21

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

#include

//--定义使用的IO口--//

#defineGPIO_DIGP0

#defineGPIO_PLACEP1

#defineGPIO_TRAFFICP2

sbitRED10=P2^0;//上人行道红灯

sbitGREEN10=P2^1;//上人行道绿灯

sbitRED11=P2^2;

sbitYELLOW11=P2^3;

sbitGREEN11=P2^4;

sbitRED00=P3^0;//右人行道红灯

sbitGREEN00=P3^1;//右人行道绿灯

sbitRED01=P2^5;

sbitYELLOW01=P2^6;

sbitGREEN01=P2^7;

//--定义全局变量--//

unsignedcharcodeDIG_PLACE[8]={

0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};//位选控制查表的方法控制

unsignedcharcodeDIG_CODE[17]={

0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,

0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};

//0、1、2、3、4、5、6、7、8、9、A、b、C、d、E、F的显示码

unsignedcharDisplayData[8];

//用来存放要显示的8位数的值

unsignedcharTime,Second;//用来存放定时时间

//--声明全局函数--//

voidDigDisplay();//动态显示函数

voidTimer0Cofig(void);

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

*函数名:

main

*函数功能:

主函数

*输入:

*输出:

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

voidmain(void)

{

Second=1;

Timer0Cofig();

while

(1)

{

if(Second==70)

{

Second=1;

}

//--宝田路通行,30秒--//

if(Second<31)

{

DisplayData[0]=0x00;

DisplayData[1]=0x00;

DisplayData[2]=DIG_CODE[(30-Second)%100/10];

DisplayData[3]=DIG_CODE[(30-Second)%10];

DisplayData[4]=0x00;

DisplayData[5]=0x00;

DisplayData[6]=DisplayData[2];

DisplayData[7]=DisplayData[3];

DigDisplay();

//--宝田路通行--//

GPIO_TRAFFIC=0xFF;//将所有的灯熄灭

RED00=1;

GREEN00=1;

GREEN11=0;//宝田路绿灯亮

GREEN10=0;//宝田路人行道绿灯亮

RED01=0;//前进路红灯亮

RED00=0;//前进路人行道红灯亮

}

//--黄灯等待切换状态,5秒--//

elseif(Second<36)

{

DisplayData[0]=0x00;

DisplayData[1]=0x00;

DisplayData[2]=DIG_CODE[(35-Second)%100/10];

DisplayData[3]=DIG_CODE[(35-Second)%10];

DisplayData[4]=0x00;

DisplayData[5]=0x00;

DisplayData[6]=DisplayData[2];

DisplayData[7]=DisplayData[3];

DigDisplay();

//--黄灯阶段--//

GPIO_TRAFFIC=0xFF;//将所有的灯熄灭

RED00=1;

GREEN00=1;

YELLOW11=0;//宝田路黄灯亮

RED10=0;//宝田路人行道红灯亮

YELLOW01=0;//前进路红灯亮

RED00=0;//前进路人行道红灯亮

}

//--前进路通行--//

elseif(Second<66)

{

DisplayData[0]=0x00;

DisplayData[1]=0x00;

DisplayData[2]=DIG_CODE[(65-Second)%100/10];

DisplayData[3]=DIG_CODE[(65-Second)%10];

DisplayData[4]=0x00;

DisplayData[5]=0x00;

DisplayData[6]=DisplayData[2];

DisplayData[7]=DisplayData[3];

DigDisplay();

//--黄灯阶段--//

GPIO_TRAFFIC=0xFF;//将所有的灯熄灭

RED00=1;

GREEN00=1;

RED11=0;//宝田路红灯亮

RED10=0;//宝田路人行道红灯亮

GREEN01=0;//前进路绿灯亮

GREEN00=0;//前进路人行道绿灯亮

}

//--黄灯等待切换状态,5秒--//

else

{

DisplayData[0]=0x00;

DisplayData[1]=0x00;

DisplayData[2]=DIG_CODE[(70-Second)%100/10];

DisplayData[3]=DIG_CODE[(70-Second)%10];

DisplayData[4]=0x00;

DisplayData[5]=0x00;

DisplayData[6]=DisplayData[2];

DisplayData[7]=DisplayData[3];

DigDisplay();

//--黄灯阶段--//

GPIO_TRAFFIC=0xFF;//将所有的灯熄灭

RED00=1;

GREEN00=1;

YELLOW11=0;//宝田路黄灯亮

RED10=0;//宝田路人行道红灯亮

YELLOW01=0;//前进路红灯亮

RED00=0;//前进路人行道红灯亮

}

}

}

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

*函数名:

DigDisplay

*函数功能:

使用数码管显示

*输入:

*输出:

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

voidDigDisplay()

{

unsignedchari;

unsignedintj;

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

{

GPIO_PLACE=DIG_PLACE[i];//发送位选

GPIO_DIG=DisplayData[i];//发送段码

j=10;//扫描间隔时间设定

while(j--);

GPIO_DIG=0x00;//消隐

}

}

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

*函数名:

Timer0Cofig

*函数功能:

配置定时器

*输入:

*输出:

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

voidTimer0Cofig(void)

{

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

TH0=0x3C;//设置初始值,定时50MS

TL0=0xB0;

EA=1;//打开总中断

ET0=1;//打开定时器0中断

TR0=1;//启动定时器0

}

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

*函数名:

Timer0

*函数功能:

定时器0中断函数

*输入:

*输出:

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

voidTimer0()interrupt1

{

TH0=0x3C;//设置初始值

TL0=0xB0;

Time++;

if(Time==20)

{

Second++;

Time=0;

}

}

 

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

当前位置:首页 > PPT模板 > 艺术创意

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

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