基于51单片机的交通灯设计论文文档格式.docx
《基于51单片机的交通灯设计论文文档格式.docx》由会员分享,可在线阅读,更多相关《基于51单片机的交通灯设计论文文档格式.docx(21页珍藏版)》请在冰豆网上搜索。
由5V直流稳压电源:
普通5V直流稳压电源即可;
单片机:
常用8051或8052
SR锁存器:
普通14脚SR锁存器即可
晶振:
12M
发光二级管:
普通发光二级管红,黄,绿
数码管:
LG3641
电阻:
10K电阻及300欧电阻若干
电容:
22pF电容及CT81电解电容
1.4系统核心处理策略(控制策略、信号处理方法等)
主要是电路设计正确及程序编写无误。
起初对PCB板进行调试,确保焊接无误及电路连接正确。
再通过编写程序控制灯的闪亮时间及方式直至符合要求。
1.5系统软硬件功能划分
硬件部分:
计时部分
信号灯显示部分
软件部分:
计时部分控制
信号灯显示次序控制
1.6其他(人机交互、结构设计等)
有复位按键,选通按键
详细设计
1.7硬件设计
1.7.1输入与输出(确定输入、输出性质、数量和指标要求)
输入为复位及选通开关
输出有计时输出及交通灯模拟信号输出
交通灯信号由两组红黄绿LED灯代替
计时部分由数码管显示,由于硬件限制,计时部分只能用于东西干道计时
1.7.2功能划分(以框图形式表示)
1.7.3子系统1(元器件选型、硬件原理及功能描述)
25s3s2s25s3s2s
东西通道红灯亮红灯亮红灯亮绿灯亮绿灯闪黄灯亮
南北通道绿灯亮绿灯闪黄灯亮红灯亮红灯亮红灯亮
1.7.4子系统2
………(根据系统划分确定小节数)
1.7.5系统原理图及元器件清单
1.7.6PCB设计
1.7.7系统硬件资源清单及价格
名称
规格
数量
单价格
备注
89S51
1
12
数码管
四位
4
电容
22pf
0.15
晶振
2
锁存器
74HC573
微动开关
8
0.25
自锁开关
发光二极管
红,黄,绿
6个
0.1
电阻
10k
7个
1.8结构设计
3调试与测试
1.9调试(主要控制参数或策略确定方法、实验结果、出现问题与解决方法)
针对单片机P1口调试交通灯信号,使其预定目标显示
针对单片机P0口和P1口调试数码管显示部分,使其按预定实现倒计时
1.10测试(测试内容及结果)
1信号显示是否与计时同步
2LED显示顺序是否正确
3计时是否正确
2结论(是否达到系统设计目标、存在问题及原因)
通过测试交通灯系统能够符合要求,完成亮灯转换及时间计数要求
3感想
工程综合实训具有很强的实践性质,虽然有时比较辛苦,但让我们获得的是收获的快乐。
在这综合实训期间,我们有太多的担心与害怕,遇到了太多的挫折,中途有好多次都有放弃的念头,印象最深的是我们调电路的那几天,下午饭基本上没有吃过,为了查清楚某一部分的原理,我们晚上2点多钟才睡觉,为了写项目设计说明书我们熬夜到很晚。
但值得庆幸的是,我们坚持下来了,并且获得了成功,心里有种小小的成就感。
从中我们学到了很多了知识,没有了担心与害怕并且学会了坚持。
当然,这与老师和同学的帮助分不开。
自从做“线性稳压电源”这个项目以来,每天都是匆忙而规律的,苦恼、欢笑,失败、成功伴随着我们工训的点点滴滴。
虽然我们小组只有两个女生,但是我们共同努力,克服了许许多多的困难,一直在努力让自己做到最好。
从最开始的确定组员和选定题目,到后来的设计电路,购买元器件,再到安装PCB板子、安装以及调试,虽然辛苦但收获很多,看到我们两个辛苦做出来的成果,心里真的很高兴。
工程实训不仅让我们学到了很多课堂上学不到的东西,而且开拓了我们的视野,增长了见识,为我们以后更好的把所学知识运用到实际工作中打下坚实的基础。
经过这次实训,让我们从实践中对自己所学专业获得了一个感性的认识,为今后专业的学习打下坚实的基础。
作为一名工科学生,掌握生产实践基本知识和加强动手能力是十分必要的,我们的汗水与心血将会见证我们的成功。
程序清单:
#include<
reg51.h>
unsignedcharcodedis_7[21]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,
0xf8,0x80,0x90,0x88,0x83,0xc6,0xa1,
0x86,0x8e,0xbf,0x89,0x8c,0x00,0xff};
//共阳数码管段码
unsignedchardatadisbuf[6]={0x00,0x00,0x00,0x00,0x00,0x00};
//显示缓冲区:
时分秒使用
unsignedchardatacount_timedx[]={2,10,5,10,25};
//东西方向倒计时时间
unsignedchardatacount_timenb[]={2,25,10,5,10};
//南北方向倒计时时间
unsignedchardataHour=14,Minite=06,Second=0,Halfsec=0;
//定义时钟位
unsignedcharxdata*ledaddr=0x2000;
//锁存器选通地址
unsignedchardataMs=0,Lightcode=0,Light_step,Led_step,Light_num;
unsignedintdataFault_dx=0,Fault_nb=0,Fault_total=0,Countdx=0,Countnb=0;
sbitp10=P1^0;
//第0位数码管位控制端
sbitp11=P1^1;
//第1位数码管位控制端
sbitp12=P1^2;
//第2位数码管位控制端
sbitp13=P1^3;
//第3位数码管位控制端
sbitp14=P1^4;
//第4位数码管位控制端
sbitp15=P1^5;
//第5位数码管位控制端
sbitp16=P1^6;
//发光二极管选通
sbitp17=P1^7;
//按键选通
sbitp33=P3^3;
//k1键用于切换四种功能
/*****************************************************************************/
/****************************1毫秒延时函数*******************************/
voiddelay1ms(intt)
{
unsignedinti,j;
for(i=0;
i<
t;
i++)
for(j=0;
j<
120;
j++)
;
}
/***************************************************************************/
/*************************键盘扫描函数****************************************/
unsignedchargetkey(void)
unsignedcharYiwei;
unsignedchartest=0x00,tim;
*ledaddr=test;
if(p17==0&
&
tim==0)//判断是否有按键按下
{
p17=1;
tim=1;
test=0xfe;
delay1ms(5);
for(Yiwei=0;
Yiwei<
8;
Yiwei++)//处理按键
if(p17==0)break;
elsetest=(test<
<
1)+1;
}
returnYiwei;
elseif(p17==0){}
else{tim=0;
/************************六位LED数码管显示***********************************/
voiddispled(unsignedinthour_shi,unsignedinthour_ge,unsignedintmin_shi,unsignedint
min_ge,unsignedintsec_shi,unsignedintsec_ge)
*ledaddr=dis_7[hour_shi];
//时的十位显示
p10=0;
delay1ms
(1);
p10=1;
*ledaddr=dis_7[hour_ge];
//时的个位显示
p11=0;
p11=1;
*ledaddr=dis_7[min_shi];
//分的十位显示
p12=0;
p12=1;
*ledaddr=dis_7[min_ge];
//分的个位显示
p13=0;
p13=1;
*ledaddr=dis_7[sec_shi];
//秒的十位显示
p14=0;
p14=1;
*ledaddr=dis_7[sec_ge];
//秒的个位显示
p15=0;
p15=1;
/******************************发光二极管显示函数*****************************/
voiddisplight(unsign