#include <reg52.h> //调用单片机头文件
#define uchar unsigned char //宏定义"uchar"代替"unsigned char"。
#define u8 unsigned char //宏定义"uchar"代替"unsigned char"。
#define uint unsigned int //宏定义"uint"用来定义无符号整型数。
//上下南北主干道
//左右东西辅干道
u8 code DisplayOther[]={
0xff, //0 空
0x7f, //1 "."
0xbf, //2 "-"
0xa7 //3 c
};
//数码管段选定义 0 1 2 3 4 5 6 7 8 9 A b C d E F -
uchar code smg_du[17] = {
0xc0, //0
0xf9, //1
0xa4, //2
0xb0, //3
0x99, //4
0x92, //5
0x82, //6
0xf8, //7
0x80, //8
0x90, //9
0x88, //A
0x83, //b
0xc6, //C
0xa1, //d
0x86, //E
0x8e //F
};
uchar dis_smg[8 ] = {0xc0,0xf5,0x8c,0x94,0xb1,0x92,0x82,0xf4};
uchar smg_i = 4; //显示数码管的个位数
//数码管位选定义
sbit smg_we1 = P2^0; //东西数码管2
sbit smg_we2 = P2^1; //东西数码管1
sbit smg_we3 = P2^3; //南北数码管2
sbit smg_we4 = P2^2; //南北数码管1
char dx_s = 0; //东西 南北 倒计时变量
sbit nb_red = P1^0; //南北红灯
sbit nb_green = P1^2; //南北绿灯
sbit nb_yellow = P1^1; //南北黄灯 1
sbit dx_red = P1^3; //东西红灯
sbit dx_green = P1^5; //东西绿灯1
sbit dx_yellow = P1^4; //东西黄灯1
uchar flag_jtd_mode; //交通灯的模式 根据时间
bit flag_1s = 1; //进入南北方向切换的标志位
bit flag_500ms;
bit flag_dx_nb; //东西南北模式
uchar flag_5m_value;
uchar i;
uchar flag_alarm; //模式
//uchar dx_time = 30,nb_time = 20; //东西、南北的时间
uchar dx_time = 20,nb_time = 30; //东西、南北的时间
uchar flag_jdgz ; //交通管制
/********************************************************************
* 名称 : u8 ChangeFor(u8 dat)
* 功能 : 交换一个字节位的位置,用于数码管显示
* 输入 : 需要改变的数
* 输出 : 改变后的数
***********************************************************************/
#define LED_a 6 //数码管段选的a段接在段选IO口的第0位
#define LED_b 5
#define LED_c 0
#define LED_d 2
#define LED_e 1
#define LED_f 4
#define LED_g 3
#define LED_dp 7
u8 ChangeFor(u8 dat)
{
u8 temp=0;
if(dat&0x01) //判断数据的第一位是否为1
temp|=0x01<<LED_a;//如果为1,放到控制数码管a段的位置
if(dat&0x02)
temp|=0x01<<LED_b;
if(dat&0x04)
temp|=0x01<<LED_c;
if(dat&0x08)
temp|=0x01<<LED_d;
if(dat&0x10)
temp|=0x01<<LED_e;
if(dat&0x20)
temp|=0x01<<LED_f;
if(dat&0x40)
temp|=0x01<<LED_g;
if(dat&0x80)
temp|=0x01<<LED_dp;
return temp;
}
/***********************数码位选函数*****************************/
//i: 0,东西数码管2
// 1,东西数码管1
// 2,南北数码管2
// 3,南北数码管1
void smg_we_switch(uchar i)
{
switch(i)
{
case 0: smg_we1 = 0; smg_we2 = 1; smg_we3 = 1; smg_we4 = 1; break;
case 1: smg_we1 = 1; smg_we2 = 0; smg_we3 = 1; smg_we4 = 1; break;
case 2: smg_we1 = 1; smg_we2 = 1; smg_we3 = 0; smg_we4 = 1; break;
case 3: smg_we1 = 1; smg_we2 = 1; smg_we3 = 1; smg_we4 = 0; break;
}
}
/********************************************************************
* 名称 : delay_1ms()
* 功能 : 延时1ms函数
* 输入 : q
* 输出 : 无
***********************************************************************/
void delay_1ms(uint q)
{
uint i,j;
for(i=0;i<q;i++)
for(j=0;j<110;j++);
}
/********************************************************************
* 名称 : display()
* 功能 : 数码管显示
* 输入 : 无
* 输出 : 无
***********************************************************************/
void DisplayScan()
{
static uchar i;
// if(T_MS_SCAN>=3)
{
{
P0 = 0xff; //消隐
smg_we_switch(i); //位选
P0 = ChangeFor(dis_smg[i]); //段选
delay_1ms(3);
}
i++;
if(i>=4)
i=0;
// T_MS_SCAN=0;
}
}
/*********************定时器0、定时器1初始化******************/
void time0_init()
{
TMOD = 0x01; //设置定时器0为工作模式1 (16-bit)
TL0 = 15536; //给定时器低位赋初始值 65536-15536=50000us=50ms,即50ms一个中断
TH0 = 15536 >> 8; //给定时器高位赋初始值
TR0 = 1; //开启定时器0
ET0 = 1; //允许定时器0中断
EA = 1; //开启全局中断
}
/*********************交通灯处理函数*********************************/
void jiaotongdeng_dis()
{
if(flag_1s == 1)//如果切换标志为1
{
flag_1s = 0; //清零标志位
if(dx_s == 0)
{
if(flag_dx_nb == 1)
dx_s = nb_time; //南北时间
else
dx_s = dx_time; //东西时间
flag_dx_nb = ~flag_dx_nb; //切换南北时间
}
dx_s --;
}
/***********************南北时间*********************************/
if(flag_dx_nb == 0)
{
if(dx_s > 3)
{
dis_smg[0] = smg_du[dx_s % 10] ;
dis_smg[1] = smg_du[dx_s / 10] ;
dis_smg[2] = smg_du[(dx_s-3) % 10] ;
dis_smg[3] = smg_du[(dx_s-3) / 10] ;
dx_red = 1; //灭
dx_yellow = 1; //灭
nb_green = 1; //灭
nb_yellow = 1; //灭
dx_green = 0; //亮
nb_red = 0; //亮
flag_5m_value = 0;
}else if(dx_s <= 3) //当小于3秒时 黄灯要闪了
{
dis_smg[0] = smg_du[dx_s % 10] ;
dis_smg[1] = smg_du[dx_s / 10] ;
dis_smg[2] = smg_du[dx_s % 10] ;
dis_smg[3] = smg_du[dx_s / 10] ;
dx_red = 1; //灭
dx_green = 1; //灭
nb_green = 1; //灭
nb_yellow = 1; //灭
nb_red = 0; //亮
if(flag_500ms == 0)
{
dx_yellow = 0;//亮
}
else
{
dx_yellow = 1;//灭
}
}
}
/***********************东西时间*********************************/
if(flag_dx_nb == 1)
{
if(dx_s > 3)
{
dis_smg[2] = smg_du[dx_s % 10] ;
dis_smg[3] = smg_du[dx_s / 10] ;
dis_smg[0] = smg_du[(dx_s-3) % 10] ;
dis_smg[1] = smg_du[(dx_s-3) / 10] ;
dx_red = 0; //亮
nb_green = 0; //亮
nb_yellow = 1; //灭
dx_green = 1; //灭
dx_yellow = 1; //灭
nb_red = 1; //灭
flag_5m_value = 0;
}else if(dx_s <= 3) //当小于3秒时 黄灯要闪了
{
dis_smg[0] = smg_du[dx_s % 10] ;
dis_smg[1] = smg_du[dx_s / 10] ;
dis_smg[2] = smg_du[dx_s % 10] ;
dis_smg[3] = smg_du[dx_s / 10] ;
dx_red = 0; //灭
dx_green = 1; //灭
dx_yellow = 1; //灭
nb_red = 1; //灭
nb_green = 1; //灭
if(flag_500ms == 0) //黄灯闪烁
{
nb_yellow = 0; //亮
}
else
{
nb_yellow = 1; //灭
}
}
}
}
uchar key_can; //按键值
//按键
sbit Key1=P1^6; //设置键
sbit Key2=P1^7; //加按键
sbit Key3=P3^2; //减按键
sbit Key4=P3^3; //交通管制键
//========================================================================
// 函数: u8 Key_Scan()
// 应用: temp=u8 Key_Scan();
// 描述: 按键扫描并返回按下的键值
// 参数: NONE
// 返回: 按下的键值
// 版本: VER1.0
// 日期: 2015-05-29
// 备注: 该函数带松手检测,按下键返回一次键值后返回0,直至第二次按键按下
//========================================================================
u8 Key_Scan()
{
static u8 key_up=1;//按键按松开标志
if(key_up&&(Key1==0||Key2==0||Key3==0||Key4==0))
{
delay_1ms(10);//去抖动
key_up=0;
if(Key1==0) return 1;
else if(Key2==0)return 2;
else if(Key3==0)return 3;
else if(Key4==0)return 4;
}
else if(Key1==1&&Key2==1&&Key3==1&&Key4==1)
key_up=1;
return 0;// 无按键按下
}
uchar flag_s;
uchar menu_1;//纵横加减标示
/********************设置函数*****************/
void key_with()
{
if(key_can == 4) //交通管制按键
{
flag_jdgz ++;
if(flag_jdgz > 5)
flag_jdgz = 0;
if(flag_jdgz == 1) // 全部亮红灯
{
dx_red = 0; //亮
nb_red = 0; //亮
dx_green = 1; //灭
dx_yellow = 1; //灭
nb_green = 1; //灭
nb_yellow = 1; //灭
}
if(flag_jdgz == 2) // 东西绿灯 南北红灯
{
dx_red = 0; //亮
nb_green = 0; //亮
dx_green = 1; //灭
dx_yellow = 1; //灭
nb_red = 1; //灭
nb_yellow = 1;
没有合适的资源?快使用搜索试试~ 我知道了~
温馨提示
基于单片机智能交通灯&十字路口仿真&车行指示灯设计资料(包含源程序原理图仿真论文等)共三套资料,超全~ 1)基于51单片机车行交通灯设计源程序/原理图/仿真/元件清单/开题报告/参考论文/实物图 2)基于51单片机智能交通灯设计C程序/原理图/Proteus仿真/元件清单/开题报告/参考论文 3)基于单片机十字路口交通灯proteus仿真设计资料汇编程序
资源推荐
资源详情
资源评论
收起资源包目录
基于单片机智能交通灯&十字路口仿真&车行指示灯设计资料(包含源程序原理图仿真论文等)共三套资料,超全~ 毕业设计资料 (150个子文件)
STARTUP.A51 6KB
基于毕业51单片机的交通灯设计.uvgui.Administrator 70KB
Test.uvgui.Administrator 69KB
Test.ASM 5KB
Test.uvgui_Administrator.bak 69KB
交通灯_uvopt.bak 56KB
交通灯_uvproj.bak 0B
基于毕业51单片机的交通灯设计.c 10KB
基于毕业51单片机的交通灯设计.c 10KB
交通灯.c 8KB
Last Loaded Test.DBK 156KB
Last Loaded 基于毕业51单片机的交通灯设计.DBK 121KB
基于单片机的交通灯设计(终稿)_0513110111.doc 1.67MB
51单片机的交通灯设计 - 硬件电路.doc 820KB
可调电阻焊接方法.doc 401KB
贴片电阻焊接方法.doc 368KB
车行交通灯设计.doc 329KB
交通灯_毕业设计开题报告.doc 195KB
WORD版.doc 181KB
电阻.doc 151KB
基于毕业51单片机的交通灯设计.doc 62KB
A_交通灯设计任务书_2.doc 37KB
答辩常见问题解答.doc 37KB
单片机使用上拉电阻及作用.doc 31KB
毕业论文答辩技巧大全.doc 27KB
毕业论文答辩技巧大全.doc 27KB
交通灯开题报告4位任务书.doc 18KB
十字路口交通灯设计.docx 609KB
页面描述.docx 26KB
主要功能.docx 18KB
交通灯.DSN.DSN 121KB
基于毕业51单片机的交通灯设计.DSN 121KB
基于毕业51单片机的交通灯设计.hex 4KB
基于毕业51单片机的交通灯设计.hex 4KB
交通灯4位.hex 4KB
交通灯.hex 3KB
Test.hex 880B
Test.build_log.htm 978B
交通灯 (4).jpg 1.76MB
交通灯 (3).jpg 1.6MB
交通灯 (5).jpg 1.52MB
交通灯 照片.jpg 747KB
2.jpg 577KB
1.jpg 431KB
交通灯 (1).jpg 300KB
交通灯 (2).jpg 232KB
自锁开关说明.jpg 122KB
独立按键 (1).jpg 86KB
轻触按键实物图.jpg 69KB
排阻上拉电阻.jpg 61KB
独立按键.jpg 60KB
独立按键 (5).jpg 54KB
按键解析图标注.jpg 54KB
自锁开关.jpg 53KB
独立按键 (3).jpg 53KB
DC电源插口硬件图.jpg 48KB
排阻上拉电阻原理图.jpg 46KB
CON2为电源插针(电路中可以不接).jpg 44KB
排阻的识别.jpg 39KB
8个电阻组成的上拉电阻.jpg 38KB
自锁开关硬件图1.jpg 34KB
DC插头.jpg 34KB
独立按键 (4).jpg 33KB
按键解析图.jpg 33KB
DC电源接口及开关(简易版).jpg 31KB
电池盒.jpg 27KB
自锁开关硬件图.jpg 24KB
USB电源线.jpg 23KB
三极管介绍说明.jpg 19KB
DC电源插口硬件图.jpg 18KB
三极管引脚介绍.jpg 17KB
三极管引脚介绍.jpg 17KB
发光二极管.jpg 16KB
NPN型原理图.jpg 16KB
NPN型原理图.jpg 16KB
自锁开关原理图.jpg 15KB
按键原理图.jpg 15KB
DC电源插口原理图.jpg 15KB
电路图中的光敏电阻.jpg 14KB
PNP型原理图.jpg 10KB
PNP型原理图.jpg 10KB
发光二极管1.jpg 9KB
电位器.jpg 8KB
S9012.jpg 7KB
发光二极管2.jpg 7KB
DC电源插口内部透视图.jpg 6KB
贴片电阻.jpg 6KB
独立按键 (2).jpg 5KB
可调电阻.jpg 5KB
光敏电阻.jpg 4KB
色环电阻.jpg 4KB
交通灯.lnp 44B
Test.lnp 25B
debug.log 0B
交通灯.LST 19KB
Test.LST 16KB
STARTUP.LST 14KB
基于毕业51单片机的交通灯设计.M51 20KB
交通灯.M51 17KB
Test.M51 8KB
共 150 条
- 1
- 2
资源评论
- z17271471592024-04-19资源简直太好了,完美解决了当下遇到的难题,这样的资源很难不支持~
- 「已注销」2022-04-25用户下载后在一定时间内未进行评价,系统默认好评。
- csdn_79202022-05-07用户下载后在一定时间内未进行评价,系统默认好评。
- 遥相思2024-05-02资源很实用,对我启发很大,有很好的参考价值,内容详细。
- 2301_776296032024-05-14资源内容详尽,对我有使用价值,谢谢资源主的分享。
F_D_D
- 粉丝: 6
- 资源: 63
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- 带有边界框的农作物和杂草检测数据 带有 YOLO 和 Pascal 标签的芝麻作物和不同杂草的农业数据
- 练习 JavaScript 的禅宗练习.zip
- 大学生Java二级课程考试
- Nvidia GeForce GT 1030-GeForce Game Ready For Win10&Win11(Win10&Win11 GeForce GT 1030显卡驱动)
- IEC61850仿真模拟器sim860
- 纯 Python Java 解析器和工具.zip
- YOLO标记口罩数据集 (YOLO 格式注释)
- uniapp+vue3+云开发全栈开发同城配送鲜花小程序任意商城教程
- 客户需求快速小程序项目开发技巧
- java项目,课程设计-医疗服务系统.zip
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功