资源简介
交通灯控制系统,附实验要求及图纸
利用单片机控制十字路口的红绿黄灯交替点亮和熄灭,并且用4只七段LED数码管(不能使用BCD数码管)显示十字路口两个方向的剩余时间。要求能用按键设置两个方向的通行时间(绿灯点亮的时间)和暂缓通行时间(黄灯点亮的时间),系统的工作符合一般交通灯控制要求。
代码片段和文件信息
#include “at89x51.h“
#include “control.h“ //用于显控制数码管示的函数
int EWNowCount; //东西向的显示秒数
int NSNowCount; //南北向德显示秒数
int temp ; // 临时变量,用以判断路灯转换条件及赋给count的值
unsigned int num; //计时次数,每4000次为一秒
unsigned char delay_time; //控制闪烁的延时
unsigned char edit; //可设置红绿灯初始值
unsigned char setClicks; //保存set键的按下次数
unsigned char FlashChange; //东西向与南北向计时器转换
char add; //加或者减后的值
int EWGreenDef = 60 ; //东西向的默认值
int EWYellowDef = 4 ;
int EWRedDef = 44 ;
int NSGreenDef = 40 ; //南北向的默认值
int NSYellowDef = 4 ;
int NSRedDef = 64 ;
int EWGreen;
int EWYellow; //定义六个变量 ,用来读秒
int EWRed;
int NSGreen;
int NSYellow;
int NSRed ;
int Sum1 ; // EWGreenDef +EWYellowDef+ EWRedDef
int Sum2 ; // EWGreenDef+EWYellowDef
int Sum3 ; // NSGreenDef+NSRedDef
unsigned char n; //用其值来判断是否为长按键
void T0_INT(void) interrupt 1 /*定时器T0,控制红绿灯的转换 */
{
num++;
Sum1 = EWGreenDef +EWYellowDef+ EWRedDef;
Sum2 = EWGreenDef+EWYellowDef;
Sum3 = NSGreenDef+NSRedDef ;
if( num ==4000 ) /*1s = 0.25ms *4000 */
{
if(temp<=EWGreenDef) /* 东西向绿灯读秒 */
{
EWNowCount = EWGreen;
EWGreenLight();
EWGreen--;
}
if(temp<=NSRedDef) /* 南北向红灯灯读秒 */
{
NSNowCount = NSRed;
NSRedLight();
NSRed--;
}
if(temp<=Sum2 && temp>EWGreenDef) /* 东西向黄灯读秒 */
{
EWNowCount = EWYellow;
EWYellowLight();
EWYellow--;
}
if(temp<=Sum3 && temp>NSRedDef) /* 南北向绿灯读秒 */
{
NSNowCount = NSGreen;
NSGreenLight();
NSGreen--;
}
if(temp<=Sum1+2 && temp > Sum2) /* 东西向红灯读秒 */
{
EWNowCount = EWRed;
EWRedLight();
EWRed--;
}
if(temp<=Sum1+2 && temp > Sum3) /* 南北向黄灯读秒 */
{
NSNowCount = NSYellow;
NSYellowLight();
NSYellow--;
}
if(EWGreen<0) EWGreen = EWGreenDef; /* 重新装载初值 */
if(EWYellow<0) EWYellow = EWYellowDef;
if(EWRed<0) EWRed = EWRedDef;
if(NSGreen<0) NSGreen = NSGreenDef;
if(NSYellow<0) NSYellow = NSYellowDef;
if(NSRed<0) NSRed = NSRedDef;
temp++;
if(temp>Sum1) temp = 0;
num=0;
}
}
void T1_INT(void) interrupt 3 /* 定时器 T1控制长按键 */
{
if(P0_1==0 || P0_0==0) n++;
if(P0_1==1 && P0_0==1)
{
n=0;
}
}
unsigned char getKey(void) /* 判断哪个键被按下并返回键值 */
{
unsigned char key ;
if(P0_0 == 0 || P0_1==0 || P3_3==0)
{
delay_ms(10);
if(P0_0==0) /* add键 */
{
key=2;
while(!P0_0);
if(n<100) add++;
if(n>100)
add=add+10;
if(add>=99) add=99;
}
if(P0_1==0) /* decrease键 */
{
key=3;
TR1 = 1;
while(!P0_1);
if(n<100) add--;
if(n>100)
add=add-10;
if(add<=0) add = 0;
}
if(P3_3==0) /* set键 */
{
while(!P3_3) ;
key = 1 ;
setClicks++;
}
}
else key=0; /* 无键按下 */
return key;
}
void run(void) /*根据键值,实现相应的功能(设置,加或减) */
{
unsi
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
文件 1797 2010-06-11 07:14 C51\Control.h
文件 7375 2010-06-11 07:14 C51\main.c
文件 22171 2010-06-11 07:15 C51\main.LST
文件 23005 2010-06-11 07:15 C51\main.OBJ
文件 18476 2010-06-11 07:15 C51\S18
文件 4794 2010-06-11 07:15 C51\S18.hex
文件 40 2010-06-11 07:15 C51\S18.lnp
文件 26519 2010-06-11 07:15 C51\S18.M51
文件 1839 2010-06-11 07:15 C51\S18.Opt
文件 98610 2010-06-11 07:15 C51\S18.plg
文件 2190 2010-06-11 03:44 C51\S18.Uv2
....... 1840 2010-06-11 07:15 C51\S18_Opt.Bak
....... 2190 2010-06-04 03:52 C51\S18_Uv2.Bak
文件 6376 2005-03-22 15:22 C51\STARTUP.A51
文件 14076 2010-06-11 07:15 C51\STARTUP.LST
文件 758 2010-06-11 07:15 C51\STARTUP.OBJ
文件 129869 2010-06-11 06:49 capture\at89c51.jpg
文件 187865 2010-06-11 06:49 capture\display.jpg
文件 302760 2010-06-11 06:48 capture\picture1.jpg
..A.SH. 16896 2010-06-11 08:46 capture\Thumbs.db
文件 116736 2010-05-23 10:19 考察项目.ppt
文件 113536 2010-06-09 17:11 ISIS设计图\Last Loaded s.DBK
文件 113536 2010-06-09 18:16 ISIS设计图\s.DSN
文件 768 2010-06-11 06:50 ISIS设计图\s.PWI
目录 0 2010-06-11 08:49 C51
目录 0 2010-06-11 08:00 capture
目录 0 2010-06-17 17:24 ISIS设计图
----------- --------- ---------- ----- ----
1214022 27
............此处省略0个文件信息
- 上一篇:linpop 聊天软件
- 下一篇:C语言课程设计——猜数字游戏
评论
共有 条评论