基于STC15F2K60S2的温湿度
采集控制系统开发
课题名称 SMT设备操作与综合实训
系/专 业 能源与电气工程学院/电子信息技术工程 班 级
学 号 学生姓名
指导教师
日 期
电信1411 1404163138 邹野 赵婕、李楠 2016-01-04
南京工业职业技术学院项目技术报告
目录
概 要………………………………………………………………………… 2 前 言………………………………………………………………………… 3
第一章 总体方案设计………………………………………………………… 4
1. 1 系统框图设计……………………………………………………………错误!未定义书签。
1. 2 电路原理图设计…………………………………………………………5
1. 3 PCB电路板布局设计……………………………………………………7
第二章 电路板的焊接………………………………………………………… 8
2.1 元器件的选择……………………………………………………………8
2.2 印制电路板元器件安装…………………………………………………9
2. 3 印制电路板的硬件调试……………………………………………….12
第三章 软件调试………………………………………………………………18
3.1 流水灯………………………………………………………………… 18
3.2 按键控制LED………………………………………………………… 21
3.3 按键控制数码管和LED…………………………………………………错误!未定义书签。
3.4 数码管………………………………………………………………… 25
3.5 AD转换测电压……………………………………………………… 27
3.6 串口通信……………………………………………………………… 29 结 论……………………………………………………………………………37
致 谢……………………………………………………………………………38 参考文献……………………………………………………………………… 39
2
南京工业职业技术学院项目技术报告
概 要
随着科技的飞速发展和普及,高技能设备越来越多,个行业对温湿度的要求也越来越高,传统的温湿度,检测模式是以人为基础,依靠人工轮流值班,人工巡回查看等方式来测量和记录环境状态信息,在这种模式下,不仅效率低下,不利于人才资源的充分利用高,而且缺乏科学性和完整的管理系统,温湿度采集控制系统可实现环境温湿度管理的人少或者无人值班以及集中维护,管理,异常情况下多种方式报警,并按照设定动作及时处理!
前 言
《基于STC15F2K60S2 的SMT 设备操作与运行综合实训》是电子信息专业群专业实训项目课程。该课程以电子技术应用为基础,遵循国际和行业规范,应用模拟、数字和单片机方面知识完成电路设计和电子产品制作。通过本课程的学习,掌握模拟电路设计、数字电路设计和单片机的应用,学会电路设计软ALTIUMDESIGNER 的运用,电路设计过程中使学生明白电磁兼容EMC 在电路设计时重要性,并加以应用。为今后从事电子绘图员、PCB 板设计和电子产品设计等工作岗位服务。 本课程在目标设定、教学过程、课程评价和教学方式等方面都突出以学生为主体的思想,注重学生实际工作能力与技术应用能力的培养,使课程实施成为学生在教师指导下构建知识、提高技能、活跃思维、展现个性、拓宽视野和形成工作能力的过程。
3
南京工业职业技术学院项目技术报告
第一章 总体方案设计
1.1 系统框图设计
并且在实训期间我们应完成以下任务:
1. 收集相应的资料
2. 独立完成开题报告
3. 独立完成系统电路设计
4. 完成系统软件
5. 完成系统调试
6. 演示并讲解系统
7. 完成系统课题答辩
8. 完成相应的作业文件,技术总结报告,每周学习总结表 4
南京工业职业技术学院项目技术报告
1.2 电路原理图设计
1、电源电路
电脑输出电源为5V,且单片机STC15F2K60S2是5V单片机,而CH340需要使用3.3V电压来驱动,所以我们选择三端集成稳压器LM1117-3.3V来实现5V到
3.3V电压的转换。
2、 控制电路
控制电路使用单片机STC15F2K60S2作为主控芯片。
控制电路使用单片机STC15F2K60S2作为主控芯片。STC15F2K60S2有大容量RAM,宽电压,低功耗且复位可靠,并且自带8路AD、价格低廉,与所学知识51 5
南京工业职业技术学院项目技术报告
系列单片机使用方法相同而且能满足本次实训的设计要求。
3、下载电路
下载电路使用CH340实现USB
转串口功能。使用的固态下载。
4、显示电路
使用4位共阳极数码管来实现采集电压、温湿度的显示,以及使用LED灯来实现模式的切换显示和流水灯的实验。
6
南京工业职业技术学院项目技术报告
1.3 PCB电路板布局设计
PCB设计的技术依据是电路图,根据电路功能的不同划分成若干个单元模块,就数控音频放大器来说,可分为模拟信号放大,小信号电路,单片机逻辑控制电路,设计PCB时,PCB元器件封装库中有许多封装都没有,我们一边查看元件数据手册或者使用游标卡尺测量元件实物,建立元件封装库,电路图元件库引脚序号与PCB封装库引脚序号要一一对应,这样,再加载网络表时不会出错!
PCB设计最关键工作室布局,布局质量高低直接影响电路板的性能,有时甚至会造成PCB设计失败。从布局图可知,电源从小信号之间输入,大电流信号不会干扰小信号电路;数字部分单独供电,排除其对模拟电路干扰;铺地线时,数字与模拟地线必须严格分开!
7
南京工业职业技术学院项目技术报告
第二章 电路板的焊接
2.1 元器件的选择
8
南京工业职业技术学院项目技术报告
2.2 印制电路板元器件安装
印制电路板介绍:
印制电路板{PCB线路板},又称印刷电路板,是电子元器件电气连接的提供者。它的发展已有100多年的历史了;它的设计主要是版图设计;采用电路板的主要优点是大大减少布线和装配的差错,提高了自动化水平和生产劳动率。
按照线路板层数可分为单面板、双面板、四层板、六层板以及其他多层线路板。由于印刷电路板并非一般终端产品,因此在名称的定义上略为混乱,例如:个人电脑用的母板,称为主板,而不能直接称为电路板,虽然主机板中有电路板的存在,但是并不相同,因此评估产业时两者有关却不能说相同。再譬如:因为有集成电路零件装载在电路板上,因而新闻媒体称他为IC板,但实质上他也不等同于印刷电路板。我们通常说的印刷电路板是指裸板-即没有上元器件的电路板。 近十几年来,我国印制电路板(Printed Circuit Board,简称PCB)制造行业发展迅速,总产值、总产量双双位居世界第一。由于电子产品日新月异,价格战改变了供应链的结构,中国兼具产业分布、成本和市场优势,已经成为全球最重要的印制电路板生产基地。
印制电路板从单层发展到双面板、多层板和挠性板,并不断地向高精度、高密度和高可靠性方向发展。不断缩小体积、减少成本、提高性能,使得印制电路板在未来电子产品的发展过程中,仍然保持强大的生命力。
未来印制电路板生产制造技术发展趋势是在性能上向高密度、高精度、细孔径、细导线、小间距、高可靠、多层化、高速传输、轻量、薄型方向发展。 目前的电路板,主要由以下组成
线路与图面(Pattern):线路是做为原件之间导通的工具,在设计上会另外设计大铜面作为接地及电源层。线路与图面是同时做出的。
介电层(Dielectric):用来保持线路及各层之间的绝缘性,俗称为基材。 孔(Through hole / via):导通孔可使两层次以上的线路彼此导通,较大的导通孔则做为零件插件用,另外有非导通孔(nPTH)通常用来作为表面贴装定位,组装时固定螺丝用等。
9
南京工业职业技术学院项目技术报告
安装图纸:
板子需要割线和跳线的地方
10
南京工业职业技术学院项目技术报告
11
南京工业职业技术学院项目技术报告
2. 3 印制电路板的硬件调试
一、通电前检测
当一个电路板焊接完后,在检查电路板是否可以正常工作时,通常不直接给电路板供电,而是要按下面的不走进行,确保每一步都没有问题后再上电也不迟。
1、连线是否正确。
检查原理图很关键,需要检查的地方主要在芯片的电源和网络节点的标注是否正确,同时也要注意网络节点是否有重叠的现象,这是检查的重点。另一个重点是原件的封装。封装采取的型号,封装的引脚顺序,封住不能采用顶视图,切记,特别是对于非插针的封装。
检查连线是否正确,包括错线、少线和多线。查线的方法通常有两种:
(1)按照电路图检查安装的线路,根据电路连线,按照一定的顺序逐一检查安装好的线路;
(2)按照实际线路对照原理图进行,一元件为中心进行查线。把每个元件引脚的连线一次查清,检查每个去处在电路图上是否存在。为了防止出错,对于已查过的线通常应在电路图上做出标记,最好用指针万用表欧姆挡的蜂鸣器测试,直接测量元器件引脚,这样可以同时发现接线不良的地方。
2、元器件安装情况
引脚之间是否有短路,连接处有无接触不良;二极管、三极管、集成器件和电解电容极性等是否连接有误。
电源接口是否有短路现象。调试之前不上电,电源短路,会造成电源烧坏,有时会造成更严重的后果。用万用表测量一下电源的输入阻抗,这是必须的步奏。通电前,断开一根电源线,用万用表检查电源端对地是否存在短路,。 在设计是电源部分可以使用一个0欧姆的电阻作为调试方法,上电前先不要焊接电阻,检查电源的电压正常后再将电阻焊接在PCB上给后面的单元供电,以免造成上电由于电源的电压不正常而烧毁后面单元的芯片。电路设计中增加保护电路,比如使用恢复保险丝等元件。
3、元器件安装情况。
主要是检查有极性的元器件,如发光二极管,电解电容,整流二极管等,以及三极管的管脚是否对应。对于三级,同一功能的不同厂家器管脚排序也是不同,最好用万用表测试一下。
12
南京工业职业技术学院项目技术报告
最好,先做开路、短路测试,以保证上电后不会出现短路现象。如果测试点设置好的话,可以事半功倍。0欧姆电阻的使用有时也有利于高速电路测试。 在以上未通电检测做完了以后,才能开始通电检测。
二、调试步骤:
不论采用分块调试,还是整体调试,通常电子电路的调试步骤如下:
1.检查电路
任何组装好的电子电路,在通电调试之前,必须认真检查电路连线是否有错误。对照电路图,按一定的顺序逐级对应检查。
特别要注意检查电源是否接错,电源与地是否有短路,二极管方向和电解电容的极性是否接反,集成电路和晶体管的引脚是否接错,轻轻拔一拔元器件,观察焊点是否牢固,等等。
2.通电观察
一定要调试好所需要的电源电压数值,并确定电路板电源端无短路现象后,才能给电路接通电源。电源一经接通,不要急于用仪器观测波形和数据,而是要观察是否有异常现象,如冒烟、异常气味、放电的声光、元器件发烫等。如果有,不要惊慌失措,而应立即关断电源,待排除故障后方可重新接通电源。然后,再测量每个集成块的电源引脚电压是否正常,以确信集成电路是否已通电工作。
3.静态调试
先不加输入信号,测量各级直流工作电压和电流是否正常。直流电压的测试非常方便,可直接测量。而电流的测量就不太方便,通常采用两种方法来测量。若电路在印制电路板上留有测试用的中断点,可串入电流表直接测量出电流的数值,然后再用焊锡连接好。若没有测试孔,则可测量直流电压,再根据电阻值大小计算出直流电流。一般对晶体管和集成电路进行静态工作点调试。
4.动态调试
加上输入信号,观测电路输出信号是否符合要求。也就是调整电路的交流通路元件,如电容、电感等,使电路相关点的交流信号的波形、幅度、频率等参数达到设计要求。若输入信号为周期性的变化信号,可用示波器观测输出信号。当采用分块调试时,除输入级采用外加输入信号外,其他各级的输入信号应采用前输出信号。对于模拟电路,观测输出波形是否符合要求。对于数字电路,观测输出信号波形、幅值、脉冲宽度、相位及动态逻辑关系是否符合要求。在数字电路调试中,常常希望让电路状态发生一次性变化,而不是周期性的变化。因此,输 13
南京工业职业技术学院项目技术报告
入信号应为单阶跃信号(又称开关信号),用以观察电路状态变化的逻辑关系。
5. 指标测试
电子电路经静态和动态调试正常之后,便可对课题要求的技术指标进行测量。测试并记录测试数据,对测试数据进行分析,最后作出测试结论,以确定电路的技术指标是否符合设计要求。如有不符,则应仔细检查问题所在,一般是对某些元件参数加以调整和改变。若仍达不到要求,则应对某部分电路进行修改,甚至要对整个电路重新加以修改。因此,要求在设计的全过程中,要认真、细致,考虑问题要更周全。尽管如此,出现局部返工也是难免的。
三、通电检测
1、通电观察:通电后不要急于测量电气指标,而要观察电路有无异常现象,例如有无冒烟现象,有无异常气味,手摸集成电路外封装,是否发烫等。如果出现异常现象,应立即关断电源,待排除故障后再通电。
2、静态调试:静态调试一般是指在不加输入信号,或只加固定的电平信号的条件下所进行的直流测试,可用万用表测出电路中各点的电位,通过和理论估算值比较,结合电路原理的分析,判断电路直流工作状态是否正常,及时发现电路中已损坏或处于临界工作状态的元器件。通过更换器件或调整电路参数,使电路直流工作状态符合设计要求。
3、动态调试:动态调试是在静态调试的基础上进行的,在电路的输入端加入合适的信号,按信号的流向,顺序检测各测试点的输出信号,若发现不正常现象,应分析其原因,并排除故障,再进行调试,直到满足要求。
测试过程中不能凭感觉和印象,要始终借助仪器观察。使用示波器时,最好把示波器的信号输入方式置于“DC”挡,通过直流耦合方式,可同时观察被测信号的交、直流成分。
通过调试,最后检查功能块和整机的各种指标(如信号的幅值、波形形状、相位关系、增益、输入阻抗和输出阻抗等)是否满足设计要求,如必要,再进一步对电路参数提出合理的修正。
四、电子电路调试中其他工作
1、根据待调系统的工作原理拟定调试步骤和测量方法,确定测试点,并在图纸上和板子上标出位置,画出调试数据记录表格等。
2、搭设调试工作台,工作台配备所需的调试仪器,仪器的摆设应操作方便,便于观察。学生往往不注意这个问题,在制作或调机时工作台很乱,工具、书本、 14
南京工业职业技术学院项目技术报告
衣物等与仪器混放在一起,这样会影响调试。特别提示:在制作和调试时,一定要把工作台布置的干净、整洁。这便是“磨刀不误砍柴工”
3、对于硬件电路,应视被调系统选择测量仪表,测量仪表的精度应优于被测系统;对于软件调试,则应配备微机和开发装置。
4、电子电路的调试顺序一般按信号流向进行,将前面调试过的电路输出信号作为后一级的输入信号,为最后统调创造条件。
5、选用可编程逻辑器件实现的数字电路,应完成可编程逻辑器件源文件的输入、调试与下载,并将可编程逻辑器件和模拟电路连接成系统,进行总体调试和结果测试。 6、在调试过程中,要认真观察和分析实验现象,做好记录,保证实验数据的完整可靠
五、电路调试中注意事项
调试结果是否正确,很大程度受测试量正确与否和测试精度的影响。为了保证测试的结果,必须减小测试误差,提高测试精度,为此需要注意一下几点:
1、正确使用测试仪器的接地端,凡事使用地端接机壳的电子仪器进行测试,一起的接地端应和放大器的接地端接在一起,否则仪器机壳引入的干扰不仅会使放大器的工作状态发生变化,而且将使测试结果出现误差。根据这一原则,调试发射极偏置电路时,若需要测试Vce,不应把仪器的两端直接接在集电极和发射极上,而应分别对地测出Vc和Ve,然后二者相减。若使用干电池供电的万用表测试,由于电表的两个输入端是浮动的,所以允许直接跨接到测试点之间。
2、测量电压所用仪器的输入阻抗必须远大于被测处的等效阻抗。若测试仪器输入阻抗小,则在测量时会引起分流,给测试结果带来很大误差。 3、测试仪器的带宽必须大于被测电路的带宽。
4、正确选择测试点。同一台测试仪器进行测量时,测量点不同,仪器内阻引起的误差将大不同。
5、测量方法要方便可行。需要测量某电路的电流时,一般尽可能测电压而不测电流,因为测电压不必改动电路。测试方便。若需知道某一支路的电流值,可以通过测取该支路上电阻两端的电压,经过换算而得到。
6、调试过程中,不但要认真观察和测量,还要善于记录
记录的内容包括实验条件,观察的现象,测量的数据、波形和相位关系等。只有有了大量的可靠的实验记录并与理论结果加以比较,才能发现电路设计上的问题,完善设计方案。
15
南京工业职业技术学院项目技术报告
六、调试时出现故障
要认真查找故障原因,切不可一遇故障解决不了就拆掉线路重新安装。因为重新安装的线路仍可能存在各种问题,如果是原理上的问题,即使重新安装也解决不了问题。
我们应当把查找故障,分析故障原因,看成一次好的学习机会,通过它来不断提高自己
分析问题和解决问题的能力。
1、故障检查的一般方法。对于一个复杂的系统来说,要在大量的元器件和线路中寻租、准确地找出故障是不容易的。一般故障诊断过程,是从故障现象出发,通过反复测试,做出分析判断,逐步找出故障的。
2、故障现象和产生故障的原因。
(1)常见的故障现象,放大电路没有输入信号,而有输出波形。放大电路有输入信号,但没有输出波形,或者波形异常。串联稳压电源无电压输出,或输出电压过高而不能调整,或输出稳压性能变坏、输出电压不稳等。震荡电路不产生震荡,计数器波形不稳等等。 (2)产生故障的原因
定型产品使用一段时间后出故障,可能是元件损坏,连线发生短路和断路,或者条件发生变化。
3、检查故障一般方法。
(1)直接观察法,检查仪器的选用和使用是否正确,电源电压的等级和极性是否符合要求;极性元件引脚是否连接正确,有无接错、漏接和互碰等情况。布线是否合理;印刷板是否短线断线,电阻电容有无烧焦和炸裂等。通电观察元器件有无发烫、冒烟,变压器有无焦味,电子管、示波管灯丝是否亮,有无高压打火等。
⑵用万用表检查静态工作点
电子电路的供电系统,半导体三极管、集成块的直流工作状态(包括元、器件引脚、电源电压)、线路中的电阻值等都可用万用表测定。当测得值与正常值相差较大时,经过分析可找到故障。
顺便指出,静态工作点也可以用示波器“DC”输入方式测定。用示波器的优点是,内阻高,能同时看到直流工作状态和被测点上的信号波形以及可能存在的干扰信号及噪声电压等,更有利于分析故障。 ⑶信号寻迹法
对于各种较复杂的电路,可在输入端接入一个一定幅值、适当频率的信号(例如,对于多级放大器,可在其输入端接入 f=1000 HZ的正弦信号),用示波器 16
南京工业职业技术学院项目技术报告
由前级到后级(或者相反),逐级观察波形及幅值的变化情况,如哪一级异常,则故障就在该级。这是深入检查电路的方法。
⑷对比法
怀疑某一电路存在问题时,可将此电路的参数与工作状态和相同的正常电路的参数(或理论分析的电流、电压、波形等)进行一一对比,从中找出电路中的不正常情况,进而分析故障原因,判断故障点。
⑸部件替换法
有时故障比较隐蔽,不能一眼看出,如这时你手头有与故障仪器同型号的仪器时,可以将仪器中的部件、元器件、插件板等替换有故障仪器中的相应部件,以便于缩小故障范围,进一步查找故障。 ⑹旁路法
当有寄生振荡现象,可以利用适当客量的电容器,选择适当的检查点,将电容临时跨接在检查点与参考接地点之间,如果振荡消失,就表明振荡是产生在此附近或前级电路中。否则就在后面,再移动检查点寻找之。
应该指出的是,旁路电容要适当,不宜过大,只要能较好地消除有害信号即可。
⑺短路法
就是采取临时性短接一部分电路来寻找故障的方法。短路法对检查断路性故障最有效。但要注意对电源(电路)是不能采用短路法的。
17
南京工业职业技术学院项目技术报告
第三章 软 件 调 试
3.1 流水灯
#include<STC15F2K60S2.H>
#define uchar unsigned char
sbit led1=P3^2;
sbit led2=P3^3;
sbit led3=P5^5;
uchar tcount=0;
void main()
{
TMOD=0x01; //定时器0采用方式1,16位不可自动重装 TH0=(65536-50000)/256;//设定定时50ms高8位初值 TL0=(65536-50000)%256;//设定定时50ms低8位初值 TR0=1; //定时器0启动 EA=1; //打开总中断 ET0=1; //打开定时器0中断 18
南京工业职业技术学院项目技术报告
while(1) { switch(tcount) { case 0: led1=0;led2=1;led3=1;break; //led1亮,其余灯灭 case 20:led1=1;led2=0;led3=1;break; //tcount=20表示1s时间到,led2亮,其余灯灭
case 40:led1=1;led2=1;led3=0;break; //tcount=40表示又经过1s的时间,led3亮,其余灯灭
} if(tcount==60) tcount=0; //当tcount=60表示第3个1s到,将tcount
default:break; 清零,点亮led1
}
}
void timer0()interrupt 1//每50ms中断1次
{
19
南京工业职业技术学院项目技术报告
tcount++; //每中断1次,将tcount值加1
TH0=(65536-50000)/256;//设定定时50ms高8位初值,方式1每中断1次要重新添加初值
TL0=(65536-50000)%256;//设定定时50ms低8位初值
}
数码管显示
#include<STC15F2K60S2.H>
#define uchar unsigned char
uchar code duan[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90}; sbit wei1=P3^4;
sbit wei2=P3^5;
sbit wei3=P3^6;
sbit wei4=P3^7;
void delay()
{ uchar i,j;
for(i=0;i<20;i++)
for(j=0;j<250;j++);
}
void main()
{
while(1)
{
P2=duan[1];wei1=0;delay();wei1=1;
P2=duan[6]&0x7f;wei2=0;delay();wei2=1;
P2=duan[0];wei3=0;delay();wei3=1;
P2=duan[4];wei4=0;delay();wei4=1;
20
南京工业职业技术学院项目技术报告
}
}
3.2 按键控制LED
#include<STC15F2K60S2.H>
#define uchar unsigned char
sbit led1=P3^2;
sbit led2=P3^3;
sbit led3=P5^5;
sbit k1=P1^4;
sbit k2=P1^5;
sbit k3=P1^6;
sbit k4=P1^7;
uchar keycnt; //定义按键标记变量keycnt
void delay() //延时函数
{ uchar i,j;
for(i=0;i<20;i++)
for(j=0;j<250;j++);
}
void keyscan() //按键扫描函数
{
if(!k1)
{
delay();
if(!k1) keycnt=1; //如果两次判断k1按下,keycnt置1 // while(!k1); //可以不用等待按键释放 }
if(!k2)
{
delay();
21
南京工业职业技术学院项目技术报告
if(!k2) keycnt=2; //如果两次判断k2按下,keycnt置2 // while(!k2); //可以不用等待按键释放
}
if(!k3)
{
delay();
if(!k3) keycnt=3; //如果两次判断k3按下,keycnt置3 // while(!k3); //可以不用等待按键释放
}
if(!k4)
{
delay();
if(!k4) keycnt=4; //如果两次判断k4按下,keycnt置4 // while(!k4); //可以不用等待按键释放
}
}
void display() //led灯显示函数
{
switch(keycnt)
{
case 1:led1=0;led2=1;led3=1;break; //keycnt为1,led1亮,其余灭 case 2:led1=1;led2=0;led3=1;break; //keycnt为2,led2亮,其余灭 case 3:led1=1;led2=1;led3=0;break; //keycnt为3,led3亮,其余灭 case 4:led1=led2=led3=1;break; //keycnt为4,全灭 default:break;
}
}
void main() //主函数
{
while(1)
{
keyscan(); //按键扫描
display(); //led灯显示
}
}
22
南京工业职业技术学院项目技术报告
3.3 按键控制数码管和LED
#include<STC15F2K60S2.H>
#define uchar unsigned char
sbit led1=P3^2;
sbit led2=P3^3;
sbit led3=P5^5;
sbit k1=P1^4;
sbit k2=P1^5;
sbit k3=P1^6;
sbit k4=P1^7;
sbit wei1=P3^4;
sbit wei2=P3^5;
sbit wei3=P3^6;
sbit wei4=P3^7;
uchar code
duan[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};//共阳数码管0-9段码
uchar keycnt; //定义按键标记变量keycnt
void delay() //延时函数,用于数码管动态扫描和按键延时消抖 { uchar i,j;
for(i=0;i<20;i++)
for(j=0;j<250;j++);
}
void keyscan() //按键扫描函数
{
if(!k1)
{
delay();
if(!k1) keycnt=1; //如果两次判断k1按下,keycnt置1 // while(!k1); //可以不用等待按键释放
23
南京工业职业技术学院项目技术报告
}
if(!k2)
{
delay();
if(!k2) keycnt=2; //如果两次判断k2按下,keycnt置2 // while(!k2); //可以不用等待按键释放
}
if(!k3)
{
delay();
if(!k3) keycnt=3; //如果两次判断k3按下,keycnt置3 // while(!k3); //可以不用等待按键释放
}
if(!k4)
{
delay();
if(!k4) keycnt=4; //如果两次判断k4按下,keycnt置4 // while(!k4); //可以不用等待按键释放
}
}
void display_year() //显示年份2015
{
P2=duan[2];wei1=0;delay();wei1=1;
P2=duan[0];wei2=0;delay();wei2=1;
P2=duan[1];wei3=0;delay();wei3=1;
P2=duan[5];wei4=0;delay();wei4=1;
}
void display_date() //显示日期12.04
{
P2=duan[1];wei1=0;delay();wei1=1;
P2=duan[2]&0x7f;wei2=0;delay();wei2=1; //共阳极段码&0x7f或者-0x80可使显示值加小数点
P2=duan[2];wei3=0;delay();wei3=1;
P2=duan[3];wei4=0;delay();wei4=1;
}
24
南京工业职业技术学院项目技术报告
void display_xuehao() //显示学号后4位
{
P2=duan[6];wei1=0;delay();wei1=1;
P2=duan[3];wei2=0;delay();wei2=1;
P2=duan[4];wei3=0;delay();wei3=1;
P2=duan[7];wei4=0;delay();wei4=1;
}
void main()
{
while(1)
{
keyscan(); //按键扫描
switch(keycnt) //根据按键扫描的结果进行相应的显示 {
case 1:led1=0;led2=1;led3=1;display_year();break; //keycnt为1,led1亮,数码管动态显示2015
case 2:led1=1;led2=0;led3=1;display_date();break; //keycnt为2,led2亮,数码管动态显示12.04
case 3:led1=1;led2=1;led3=0;display_xuehao();break;//keycnt为3,led3亮,数码管动态显示学号后4位
case 4:led1=led2=led3=1;P2=0xff;break; //keycnt为4,数码管和led灯全灭
default:break;
}
}
}
3.4 数码管
#include<STC15F2K60S2.H>
#define uchar unsigned char
uchar
25 code
南京工业职业技术学院项目技术报告
duan[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};//共阳数码管0-9段码
sbit wei1=P3^4; //第1位数码管的位选变量
sbit wei2=P3^5; //第2位数码管的位选变量
sbit wei3=P3^6; //第3位数码管的位选变量
sbit wei4=P3^7; //第4位数码管的位选变量
void delay() //延时函数,用于数码管动态扫描
{ uchar i,j;
}
void main() //主程序:数码管显示12.04
{
while(1) {// 送段码 送位码 延时 清位码 P2=duan[1];wei1=0;delay();wei1=1; P2=duan[2]&0x7f;wei2=0;delay();wei2=1; //共阳极段码&0x7f或者for(i=0;i<20;i++) for(j=0;j<250;j++); -0x80可使显示值加小数点
}
26 P2=duan[0];wei3=0;delay();wei3=1; P2=duan[4];wei4=0;delay();wei4=1; }
南京工业职业技术学院项目技术报告
3.5 AD转换测电压
#include<STC15F2K60S2.H>
#define uchar unsigned char
#define uint unsigned int
sbit wei1=P3^4;
sbit wei2=P3^5;
sbit wei3=P3^6;
sbit wei4=P3^7;
uchar code duan[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};//共阳数码管0-9段码
uint num=516;
void delay() //延时函数
{ uchar i,j;
}
void display() //电压值显示函数
{ uchar bai,shi,ge;
for(i=0;i<20;i++) for(j=0;j<250;j++); uint temp=num; 27
南京工业职业技术学院项目技术报告
}
void adval() //AD转换函数
{ uint val;
bai=temp/100; temp=temp%100; shi=temp/10; ge=temp%10; P2=duan[bai];wei2=0;delay();wei2=1; P2=duan[shi]&0x7f;wei3=0;delay();wei3=1; P2=duan[ge];wei4=0;delay();wei4=1; uchar low; float fval; P1ASF=0x08;//P1^3为AD口 ADC_CONTR=0xeb;//打开电源,选择通道三,AD速度最快 delay(); while(ADC_CONTR&0x10==0);//FLAG=0 表示转换没有结束,等待 val=ADC_RES;//高八位 val<<=2;//空出低2位 low=ADC_RESL;//取低2位数据 low&=0x03;//将高6位清零,保留低2位 28
南京工业职业技术学院项目技术报告
}
void main()
{
}
while(1) { } adval(); //AD转换 display(); //显示电压值 val+=low;//将低2位装入val的低2位,构成10数据 fval=val;//转换成小数 fval*=5;//参考电压为5V fval*=10;//扩大10位 fval/=1024;//转换成模拟量 num=fval;//只显示num中的数据 ADC_CONTR=0xeb;//清除ADC_FLAG
3.6 串口通信
#include<STC15F2K60S2.H>
#define uchar unsigned char
#define uint unsigned int
sbit led1=P3^2;
29
南京工业职业技术学院项目技术报告
sbit led2=P3^3;
sbit led3=P5^5;
sbit k1=P1^4;
sbit k2=P1^5;
sbit k3=P1^6;
sbit k4=P1^7;
sbit wei1=P3^4;
sbit wei2=P3^5;
sbit wei3=P3^6;
sbit wei4=P3^7;
ucharcode duan[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};//共阳数码管0-9段码
uint num=516; //要显示的数据
uchar reData=0;//用来存放单片机串口接收到的数据
bit Tover=0;//串口通信结束标志位,默认串口通讯没有结束
void delay() //延时函数
{ uchar i,j;
}
30 for(i=0;i<20;i++) for(j=0;j<250;j++);
南京工业职业技术学院项目技术报告
void display() //电压值显示函数
{ uchar bai,shi,ge;
}
void adval() //AD转换函数
{ uint val;
uint temp=num; bai=temp/100; temp=temp%100; shi=temp/10; ge=temp%10; P2=duan[bai];wei2=0;delay();wei2=1; P2=duan[shi]&0x7f;wei3=0;delay();wei3=1; P2=duan[ge];wei4=0;delay();wei4=1; uchar low; float fval; P1ASF=0x08;//P1^3为AD口 ADC_CONTR=0xeb;//打开电源,选择通道三,AD速度最快 delay(); while(ADC_CONTR&0x10==0);//FLAG=0 表示转换没有结束,等待 31
南京工业职业技术学院项目技术报告
}
void serialConfig() //串口1初始化函数 {
}
32 val=ADC_RES;//高八位 val<<=2;//空出低2位 low=ADC_RESL;//取低2位数据 low&=0x03;//将高6位清零,保留低2位 val+=low;//将低2位装入val的低2位,构成10数据 fval=val;//转换成小数 fval*=5;//参考电压为5V fval*=10;//扩大10位 fval/=1024;//转换成模拟量 num=fval;//只显示num中的数据 ADC_CONTR=0xeb;//清除ADC_FLAG SCON=0x50;//串口1通讯采用方式1 允许接收 0101 0000 T2H=(65536-(12000000/4/9600))>>8; //波特率9600高8位 T2L=(65536-(12000000/4/9600)); //波特率9600低8位 AUXR=0x14; //设置T2为1T模式,并启动T2 AUXR|=0x01; //T2为串口1的波特率发生器 EA=1; //打开总中断 ES=1; //打开串口1中断
南京工业职业技术学院项目技术报告
void sendByte(uchar c) //查询法用于串口发送 {
}
void serial()interrupt 4 //中断法用于串口接收 {
}
33 SBUF=c; while(!TI);//查询TI,发送完1帧数据自动置1; TI=0;//将TI清零 uchar temp; if(RI) //如果RI=1,表示接收完1帧数据 { } RI=0;//将RI清零 temp=SBUF; //将接收到的数据放在temp里 if(temp!='#')//如果没有接收到“#” { } else { } Tover=1; //接收到“#”表示通信结束 reData=temp;//将接收到的数据放到reData中
南京工业职业技术学院项目技术报告
void sendUI() //发送电压、电流
{
uint vol,cur; //定义电压、电流 uchar bai,shi,ge; vol=num;//发送电压与显示电压相同,来自于num cur=vol/2;//电流值为电压值除以2 //发送电压 bai=vol/100; vol=vol%100; shi=vol/10; ge=vol%10; sendByte('U'); sendByte(bai+48); sendByte(shi+48); sendByte('.'); sendByte(ge+48); //发送电流 bai=cur/100; cur=cur%100; shi=cur/10; ge=cur%10; 34
南京工业职业技术学院项目技术报告
}
void main()
{
serialConfig(); //串口1初始化 while(1) { adval(); //AD转换 display(); //电压值显示 if(Tover) //如果Tover为1,表示通信结束 { switch(reData) //单片机根据串口通信接收到的数据进行相应的sendByte('I'); sendByte(bai+48); sendByte(shi+48); sendByte('.'); sendByte(ge+48); //发送通信结束符“#” sendByte('#'); 操作
{ case '1':led1=0;led2=1;led3=1;break; //接收到“1#”,led1亮,其余灯灭
case '2':led1=1;led2=0;led3=1;break; //接收到“2#”,led235
南京工业职业技术学院项目技术报告
亮,其余灯灭
case '3':led1=1;led2=1;led3=0;break; //接收到“3#”,led3亮,其余灯灭
case '4':led1=led2=led3=1;break;
全灭
case '5':led1=led2=led3=0;break;
全亮
case '6':sendUI();break;
片机将电压、电流值上传给串口调试助手
default:break;
}
}
}
}
36
//接收到“4#”,灯 //接收到“5#”,灯 //接收到“6#”,单
南京工业职业技术学院项目技术报告
结 论
从这次综合实训项目课程的学习中,培养了我们系统完整,具体的完成了一个简单电子产品设计所需的工作能力,通过信息处理,方案比较决策,指定行动计划,实施计划任务和自我检查评价能力训练。
三周实训对我们来说既是机遇也是挑战,三周以来,我们自己设计并制作了温湿度传感器,实现了从之前对工艺生产不甚了解到如今亲身体会工艺生产流程的转变,至此我们已经能够完成电子产品设计,焊接,调试,故障配出到整机装配的整个过程,能按照工艺要求去安装调试印制电路板;能数量使用常用测试仪器,如万用表,示波器,能看懂电路图,并能认真阅读芯片资料;能设计与制作的过程中能够从经济性和环保性等方面去考虑;在设计与制作中能大胆的时间,创新。将自己的想法体现到实际电路当中去。
实训结果是令人满意的,但是过程我们同样遇到很多方面的问题,比如SMT元件的焊接,软件设计过程,电路调试的方法等等,我们通过种种途径,如相互交流,查看书籍资料,询问老师。上网搜索解决了这些问题,我们边学边做,真正牢固掌握了这些知识,这些学习的方法我们将终身受益。 37
南京工业职业技术学院项目技术报告
致 谢
本综合实训项目是在赵婕、李楠两位老师的悉心指导下完成的,她们对本次实训工作倾注了大量的心血。三周来,赵婕、李楠两位老师深厚的专业背景、严谨的治学态度、平易宽厚的人格作风使我受益匪浅。感谢她们对我的悉心教诲,从她们那里我学会了很多书本上学不到的东西他们教我怎样把理论与实际操作更好的联系起来和许多做人的道理,这些东西无论是在以后的工作中还是生活中都会对我起到很大的帮助,尽管实训结束了可她们却给我以后的道路指出一条明路,那就是理论联系实际的能力,提高自己分析问题的能力,时刻保持清醒的头脑,出现错误一定要认真的冷静的去检查分析错误,思考着做事,端正态度,必能事半功倍使我顺利地完成了实训任务。
这次实训我真的很高兴,我在这次实训中认识到,只有自己亲手做了,才会明白其实很多事是很简单的,只要你敢做,就没有你做不到的事。谁都有第一次,谁都会认为第一次是最难的。
实训就这样过去了,但真正的实训还未开始,我将要继续努力,继续奋斗。在此,我也感谢我同班同学的帮助和关心!最后也向审阅技术报告的老师致以深深的谢意!
38
南京工业职业技术学院项目技术报告
参考文献
1.蔡大华. 模拟电子技术基础 清华大学出版社
2.戴 娟 倪瑛. 单片机技术与应用 高等教育出版社
3.陆绮荣. 电子测量技术(第3版)
4.高海滨 辛文. Altium Designer 10
5.王卫平 陈粟平 电子产品制造工艺
6.赵秋. 电子产品设计与制作教程
7.
8.
39
电子工业出版社 机械工业出版社 高等教育出版社 南京大学出版社