#include<reg51.h>
#define u8 unsigned char
#define u16 unsigned int
sbit start = P1^4; //开始按钮
sbit northred=P2^0; //北面路口红灯
sbit northyellow=P2^1; //北面路口黄灯
sbit northgreen=P2^2; //北面路口绿灯
sbit southgreen=P2^3; //南面路口绿灯
sbit southyellow=P2^4; //南面路口黄灯
sbit southred=P2^5; //南面路口红灯
sbit westred=P2^6; //西面路口红灯
sbit westyellow=P2^7; //西面路口黄灯
sbit westgreen=P1^0; //西面路口绿灯
sbit eastgreen=P1^1; //东面路口绿灯
sbit eastyellow=P1^2; //东面路口黄灯
sbit eastred=P1^3; //东面路口红灯
sbit highone = P3^0; //选择数码管接通标志位
sbit lowone = P3^1; //选择数码管接通标志位
sbit hightwo = P3^2; //选择数码管接通标志位
sbit lowtwo = P3^3; //选择数码管接通标志位
u8 code number[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f}; //共阴极
u8 xianshi[]={0x3f,0x3f,0x3f,0x3f};
u8 Tpointer=146; //时间指针。
u8 done = 0; //开始标志
u16 i;
void delay(u16 h) //延时函数
{
while(h--);
}
void shujuchuli() //时间数据处理函数
{ if(Tpointer>63)
{
xianshi[0]=number[(Tpointer-63)/10];
xianshi[1]=number[(Tpointer-63)%10];
if(Tpointer>66)
{
xianshi[2]=number[(Tpointer-66)/10];
xianshi[3]=number[(Tpointer-66)%10];
}
if((Tpointer>63)&&(Tpointer<=66) )
{
xianshi[2]=number[(Tpointer-63)/10];
xianshi[3]=number[(Tpointer-63)%10];
}
}
if(Tpointer<=63)
{
xianshi[2]=number[Tpointer/10];
xianshi[3]=number[Tpointer%10];
if(Tpointer>3)
{
xianshi[0]=number[(Tpointer-3)/10];
xianshi[1]=number[(Tpointer-3)%10];
}
if((Tpointer>0)&&(Tpointer<=3))
{
xianshi[0]=number[Tpointer/10];
xianshi[1]=number[Tpointer%10];
}
}
}
void xuanze() //选择函数函数
{ //选择标志位接通对应的数码管
u8 k;
for(k=0;k<4;k++)
{
switch(k)
{
case(0):
lowone=1;hightwo=1;lowtwo=1;highone=0;break;
case(1):
highone=1;hightwo=1;lowtwo=1;lowone=0;break;
case(2):
highone=1;lowone=1;lowtwo=1;hightwo=0;break;
case(3):
highone=1;lowone=1;hightwo=1;lowtwo=0;break;
}
P0=xianshi[k];
delay(500);
}
}
void checkstartkey() //检测开始按钮函数
{
if(start==0)
{
delay(1000); //消抖
if(start==0)
{
done=1;
}
while(!start)
{
xuanze();
}
}
}
void InitTimer0() //定时器函数
{
TMOD = 0x01; //定时器T0为模式1
TH0 = 0xd8; //设置定时器初值
TL0 = 0xef;
EA = 1; //总中断允许
ET0 = 1;
}
void main() //主函数
{
InitTimer0();
while(1)
{
shujuchuli();
delay(100);
xuanze();
checkstartkey();
if(done==1)
{
TR0 = 1;
if ((Tpointer>63)&&(Tpointer<=146))
{
westred=1;
eastred=1;
southgreen=1;
southyellow=1;
northgreen=1;
northyellow=1;
southred=0;
northred=0;
if(Tpointer>66)
{
westgreen=0;
eastgreen=0;
}
else
{
westgreen=1;
eastgreen=1;
westyellow=0;
eastyellow=0;
}
}
if ((Tpointer>0)&&(Tpointer<=63))
{
southred=1;
northred=1;
westgreen=1;
westyellow=1;
eastgreen=1;
eastyellow=1;
westred=0;
eastred=0;
if(Tpointer>3)
{
southgreen=0;
northgreen=0;
}
else
{
southgreen=1;
northgreen=1;
southyellow=0;
northyellow=0;
}
}
}
}
}
void Timer0() interrupt 1 //定时器中断
{
TH0 = 0xd8;
TL0 = 0xef;
i++;
if(i==100)
{
i=0;
Tpointer--;
if(Tpointer==0)
{
Tpointer=146;
}
}
}
没有合适的资源?快使用搜索试试~ 我知道了~
温馨提示
里面包含了protues2.7版本仿真和单片机程序。 课设要求: 设计一个十字路口交通灯控制器。用单片机控制LED灯模拟指示。模拟东西方向的十字路口交通信号控制情况。东西向通行时间为80s,南北向通行时间为60s,缓冲时间为3s。
资源推荐
资源详情
资源评论
收起资源包目录
十字路口交通灯.zip (15个子文件)
十字路口交通灯
程序
main.OBJ 8KB
十字路口交通灯_uvopt.bak 54KB
main.c 4KB
十字路口交通灯.uvopt 54KB
main.LST 12KB
十字路口交通灯.hex 3KB
十字路口交通灯.uvproj 13KB
十字路口交通灯.lnp 35B
十字路口交通灯.plg 900B
十字路口交通灯_uvproj.bak 13KB
十字路口交通灯 8KB
十字路口交通灯.M51 11KB
仿真
Last Loaded 十字交通灯.DBK 163KB
十字交通灯.PWI 742B
十字交通灯.DSN 163KB
共 15 条
- 1
緑豆君
- 粉丝: 296
- 资源: 49
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功
- 1
- 2
- 3
- 4
- 5
- 6
前往页