资源简介

模拟十字路口交通灯,设有紧急按钮,当有紧急情况能改变红绿灯状态。(如救护车需优先通过时)

资源截图

代码片段和文件信息

#include 
#define uchar unsigned char
#define uint unsigned int

sbit NUM_F = P3^2;

bit URGENT_F = 0;


/********************************
定义交通灯各个状态
********************************/
#define GREEN_RED  0xDD    //横的绿灯亮,竖的红灯亮
#define YELLOW_RED  0xF5    //横的黄灯亮,竖的红灯亮
#define _RED  0xFD    //横的绿灯灭,竖的红灯亮  用来做黄灯闪烁。
#define RED_GREEN  0xEB    //横的红灯亮,竖的绿灯亮
#define RED_YELLOW  0xEE    //横的红灯亮,竖的黄灯亮
#define RED_  0xEF    //横的红灯亮,竖的黄灯灭  用来做黄灯闪烁
#define YELLOW_YELLOW  0xF6
#define _ 0xFF
#define RED_RED 0xED

/********************************
变量定义
********************************/
uchar iticktime=10numtime1=14;   

/**************************************************************
i用来扫描数码管,tick用来1S定时,time、time1用来显示
时间,一个是红灯时间,另一个是绿灯和黄灯时间,num是用来
标记当前交通灯属于哪种状态。num=1 横的绿灯亮,竖的红灯亮
num=2  横的黄灯亮,竖的红灯亮 。。。。。 参考上方的交通
灯各个状态定义
**************************************************************/

/********************************
 数码管段码、位选定义
********************************/   
uchar table[]={  
0xc00xf90xa40xb00x99
0x920x820xf80x800x90};
uchar tabledu[]={0000};
uchar tablewe[]={0x010x020x100x20};
/********************************
可直接通过改变tabledu中的值可改
变数码管显示值
********************************/

/*------------------------------------------------
                  延时函数
------------------------------------------------*/

void delay(uint z)
{
uint xy;
for(x=z;x>0;x--)
for(y=110;y>0;y--);
}

/*------------------------------------------------
        定时器、外部中断初始化
------------------------------------------------*/

void init()
{

TMOD=0x01; //定时器工作方式
TH0=0x3c; //高位送值
TL0=0xb0; //低位送值
ET0=1; //开定时器0
TR0=1; //启动定时器0
IT0 = 1;    //指定外部中断0下降沿触发,INT0 (P3.2)
EX0 = 1;     //使能外部中断
IT1 = 1;    //指定外部中断1下降沿触发,INT0 (P3.3)
EX1 = 1;     //使能外部中断
EA=1; //开总中断
}

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

void display(void)
{
P2=tablewe[i];
P0=table[tabledu[i]];
i++;
delay(1);
if(i==4)
i=0;
}

/*------------------------------------------------
                  交通灯控制
------------------------------------------------*/

void light(void)
{
if(num==0)
P1 =  GREEN_RED;
if(num==1)
{
if(tick<8)
P1 = YELLOW_RED;
else
P1 = _RED;
}
if(num==2)
P1 = RED_GREEN;
if(num==3)
{
if(tick<8)
P1 = RED_YELLOW;
else
P1 = RED_;
}
if(num==4)
{
if(tick<8)
P1 = YELLOW_YELLOW;
else
P1 = _;
}
if(num==5)
P1 = RED_RED;
}

/*------------------------------------------------
                  主函数
------------------------------------------------*/

void main(void)
{
init();
while(1)
{
if(num==0|num==1)
{
tabledu[0] = time/10;
tabledu[1] = time%10;
tabledu[2] = time1/10;
tabledu[3] = tim

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----

     文件     126537  2012-12-20 18:42  交通灯\Last Loaded 交通灯.DBK

    ..A..H.       162  2012-12-20 21:02  交通灯\~$通灯实训报告.doc

     文件       6936  2012-12-20 21:30  交通灯\交通灯

     文件       1078  2012-12-16 22:15  交通灯\交通灯.asm

     文件       4656  2012-12-20 21:30  交通灯\交通灯.c

     文件     126537  2012-12-20 21:31  交通灯\交通灯.dsn

     文件       1967  2012-12-20 21:30  交通灯\交通灯.hex

     文件         29  2012-12-20 21:30  交通灯\交通灯.lnp

     文件      11244  2012-12-20 21:30  交通灯\交通灯.LST

     文件      10279  2012-12-20 21:30  交通灯\交通灯.M51

     文件       8194  2012-12-20 21:30  交通灯\交通灯.OBJ

     文件       2918  2012-12-20 21:32  交通灯\交通灯.plg

     文件       1388  2012-12-20 21:32  交通灯\交通灯.PWI

    .......     80839  2012-12-20 21:32  交通灯\交通灯.uvgui.Lerny

    .......     80838  2012-12-20 21:29  交通灯\交通灯.uvgui_Lerny.bak

    .......      5600  2012-12-20 21:32  交通灯\交通灯.uvopt

    .......     13269  2012-12-19 22:47  交通灯\交通灯.uvproj

    .......      5598  2012-12-20 21:29  交通灯\交通灯_uvopt.bak

    .......     13239  2012-12-16 23:45  交通灯\交通灯_uvproj.bak

     目录          0  2012-12-20 21:32  交通灯

     文件      28160  2012-12-20 21:32  交通灯\交通灯实训报告.doc

----------- ---------  ---------- -----  ----

               529468                    21


评论

共有 条评论