第一篇:单片机原理及接口技术课程设计指导书
长 沙学院
课程设计指导书(部)
业
级单片机原理及接口技术机电工程系机械设计制造及其自动化
年月日 课程设计名称系专班
课程名称:《单片机原理及接口技术》课程设计
课程编号:JX010146
主 笔 人:程立志
主 审 人:许焰
1、课程设计的目的通过《单片机原理及接口技术》课程设计,使学生初步具备以下能力:
1.1、加深对《单片机原理及接口技术》所学知识的理解;
1.2、掌握单片机内部资源的使用方法和步骤;
1.3、掌握单片机应用的环节和步骤;
1.4、进一步熟悉在proteus软件里进行硬件设计和编程调试;
1.5、能使用汇编语言或C语言编程环境Keil编写程序、编译、仿真和修改程序;
1.6、能初步判断分析单片机系统的简单故障;
1.7、能对自己的实践工作进行总结,具备编写实习报告书能力;
1.8、初步具备辩证思维和逻辑分析的能力;
1.9、培养学生热爱科学,实事求是的学风和创新意识、精神,合作精神。
2、课程设计的题目
单片机的应用领域非常广泛,就其基本的控制原理和实现方法无外乎是对一些常见的如:距离或位移(米)、重量(千克)、时间(秒)、电流或电压(安培)、温度(开尔文)、等物理量进行测量控制,鉴于单片机当前的应用状态和学员对其应掌握的程度,本次课程设计题目的设定主要是以贴近现实生活为主,提出了一些在教学、工业控制和科研等领域基本常见的课题,其目的是要让学员们拓宽视野,着重体会其学习基本的原理及控制编程基础的重要性,以期达到培养学员们的兴趣和今后再学习的愿望。
2.1、;LED流水灯控制设计:
拓展:广告灯的左移右移控制设计;汽车尾灯模拟控制设计;城市景观灯的控制设计;…
2.2、电子日历、数字钟设计:
拓展:智能晨起系统控制设计;智能全自动洗衣机控制设计;秒表/时钟计时器控制设计;…
2.3、数字温度计的控制设计:
拓展:新生儿恒温箱监控系统设计;多点温度的控制设计;传导系数测量仪的应用设计;…
2.4、16×16 点阵LED汉字显示设计:
拓展:机场、车站、码头、商场、银行、政务等公共服务场所信息指示牌设计;…
2.5、1602液晶显示屏显示设计:
拓展:机场、车站、码头、商场、银行、政务等公共服务场所信息指示牌设计;…
2.6、128×64点阵LED汉字显示设计:
拓展:机场、车站、码头、商场、银行、政务等公共服务场所信息指示牌设计;…
2.7、直流电机控制设计:
拓展:传送带单控与顺序控制设计;电子装配生产线部件移动控制设计;多层电梯控制设计;…
2.8、步进电机控制设计:
拓展:机械手动作行程控制设计;安防监控自动寻迹云台的控制设计;条码打印机的控制设计;…
2.9、AD/DA转换控制设计:
拓展:简易数字电压表设计;简易数字压力计设计;吊车悬臂角度的控制设计;超声波测距器的设计…
2.10、逻辑算法控制设计:
拓展:抢答器控制设计;交通灯设计;多层电梯控制设计;4×4 矩阵键盘计算器设计…
2.11、遥控设计:
拓展:无线电遥控升降系统控制设计、红外遥控升降系统控制设计、红外遥控多路开关控制设计;…
2.12、PWM方式控制设计:
拓展:直流电机调速控制设计;城市立交桥景观带的控制设计;…
2.14、电子琴设计;
拓展:报警发生器控制设计;函数信号发生器的设计;
3、课程设计内容(主要技术关键的分析、解决思路和方案比较等)
要求学生根据所选课题,结合实际工程应用情况参照以下几例给出的具体实现功能和控制参数完成课题的设计任务书。
3.1、简易数字电压表的设计
利用MCS-51系列单片机设计简易数字电压表测量0~5v的8路输入电压值,并在四位LED数码管上轮流显示或单路选择显示。测量最小分辨率为0.019V,测量误差约为±0.02V
3.2、秒表/时钟计时器的设计
秒表/时钟计时器要求使用六位LED数码显示管显示时、分、秒,以24(小时)计时方式。使用按键开关可实现时分调整、秒表/时钟功能转换功能。
3.3、电子日历的设计
电子日历上能显示阳历年,月,日,星期,时,分,秒和阴历年、月,使用按键开关可实现调整。
3.4、超声波测距器的设计
设计一个超声波测距器,可以应用于汽车倒车、建筑施工工地以及一些工业现场的位置监控,也可用于如液位、井深、管道长度的测量等场合。要求测量范围在0.10-4.00m,测量精度1cm,测量时与被测物体无直接接触,能够清晰稳定地显示测量结果。
3.5、DS18B20数字温度计的设计
利用89C51单片机、DS18B20温度传感器,制作数字温度计。要求测温范围为-50~110℃,精度误差在0.1℃以内,LED数码管直接显示测量温度值。
3.6、1602液晶显示屏设计
设计一个室内用1602液晶显示屏,要求在目测条件下LED显示屏个点亮度均匀、充足,可显示图形和文字,显示图形或文字应稳定、清晰无串扰。图形或文字显示有静止、移入移出等显示方式。
3.7、六路数字抢答器的设计
1)、抢答器同时供6名选手或6个代表队比赛,分别用6个按钮S0 ~ S5表示。
2)、设置一个系统清除和抢答控制开关S,该开关由主持人控制。
3)、抢答器具有锁存与显示功能。即选手按动按钮,锁存相应的编号,并在LED数码管上显示,同时扬声器发出报警声响提示。选手抢答实行优先锁存,优先抢答选手的编号一直保持到主持人将系统清除为止。
4)、抢答器具有定时抢答功能,且一次抢答的时间由主持人设定(如30秒)。当主持人启动“开始”键后,定时器进行减计时,同时扬声器发出短暂的声响,声响持续的时间0.5秒左右。
5)、参赛选手在设定的时间内进行抢答,抢答有效,定时器停止工作,显示器上显示选手的编号和抢答的时间,并保持到主持人将系统清除为止。
6)、如果定时时间已到,无人抢答,本次抢答无效,系统报警并禁止抢答,定时显示器上显示00。
3.8、机械手动作行程控制
1)、设“单步”、“单程”、“往返”、“连续”4个按钮及4个键值灯;
2)、设“左上”、“左下”、“右上”、“右下”4个电磁位置开关及4个指示灯。
3)、设“左上”为初始位置,根据不同的选择按钮,驱动相应的(3台)直流电机正反转,完成相应的行程动作。
3.9、三层楼电梯呼叫控制
1)、第一层只设“上”、第二层设“上”、“下”、第三层只设“下”共四个按钮;
2)、每层都设一个电磁位置开关,轿厢上下指示灯;共享一台直流电机正反转。
3)、电梯轿厢内设“1”、“2”、“3”三个楼层键及键位指示灯,轿厢上下指示灯,开关门指示灯,电梯根据当前层位和楼层选择按钮的先后顺序,决定向上或向下,电机以正反转时延2秒完成层间动作。
3.10、16×16 点阵LED汉字显示设计。
1)、点阵显示汉字“长沙大学机电系”;
2)、实现自定义滚动效果,如左滚屏,有滚屏,上、下卷帘等。
单片机的应用系统随着用途不同,它们的硬件和软件结构差别很大,但系统设计的方法和步骤基本上是相同的。一般包括总体设计、硬件设计、软件设计、仿真调试、固化程序、应用系统独立运行等步骤。
课程设计由于时间安排、学生水平、实验条件等诸方面的限制,仅要求学生完成仿真调试即可,同时根据实际情况,在试验箱上调试通过。
由于设计时间紧迫,不要在完成全部设计后再编写设计说明书。而应在设计过程中逐步完成。一开始不可能设计出满意的主程序框图。因此,总体设计部分在完成全部设计任务后再写。而硬件部分和软件部分可以在设计过程同步完成。
4、注意事项
4.1、充分调研相关文献,针对课题需要进行系统详细的论证,不能盲目生搬硬套,严谨抄袭;
4.2、以小组为单位(原则上是3人一组),小组内成员分工明确,各司其职,按照所分配的任务在规定的时间内合理的完成好。
4.3、课程设计报告要包括:设计功能要求,设计控制参数,硬件电路设计(元件选型,硬件电路布局),系统程序的设计(注意总结出现的问题、疑难以及解决的方法和思路,对以后的借鉴作用等),调试及性能分析,课程设计小结、控制源程序清单等;图包括设计方案框图、硬件原理图(要求有描述)、程序流程图等。
第二篇:《单片机原理与接口技术》课程设计教学大纲
《单片机原理与接口技术》课程设计教学大纲
课程编号:
课程英文名称:Course Design of Micro-controller Principle and Interface Technology 学时数:18
学分数:1 使用层次和专业:本科
电气工程及其自动化、电子信息工程、机械设计制造及其自动化等专业
一、课程设计的性质、目的
《单片机原理及接口技术》课程设计是在基本学完该课程之后,综合运用所学单片机知识,完成一个单片机应用系统设计,从而加深对单片机软硬知识的理解,获得初步的应用经验,为走出校门从事单片机应用的相关工作打下基础。
通过该课程设计,主要达到以下目的:
1、巩固和加深对单片机原理和接口技术知识的理解,使学生增进对单片机系统的感性认识,加深对单片机理论方面的理解,为顺利完成毕业设计打下基础。
2、使学生掌握对单片机的内部功能模块的应用,如定时器/计数器、中断、片内外存贮器、I/O口和串行口通讯等,进一步深化和巩固所学基础理论、专业知识及实验技能,培养学生综合运用所学专业知识分析问题和解决问题的能力。
3、培养学生根据课题需要选学参考书籍、查阅手册和文献资料的能力,了解与课题有关的硬件元器件的工程规范,能按课程设计任务书的要求编写课程设计说明书,学会方案论证的比较方法,初步掌握工程设计的基本方法,能正确反映设计和实验成果,能用计算机绘制电路图和流程图。使学生了解和掌握单片机应用系统的软、硬件设计过程、方法及实现,提高学生的技术应用能力,为以后设计和实现单片机应用系统打下良好基础。
4、这一环节对掌握常用仪器、仪表的正确使用方法,学会软、硬件的设计和调试方法,掌握单片机技术在生产实践中的应用,提高学生的工程实践能力、动手能力、创新能力,使学生树立正确的人生观,养成严谨、踏实的工作作风。
二、课程设计的内容
课程设计主要内容包括:理论设计、调试及写出总结报告等,其中理论设计又包括选择总体方案、硬件系统设计和软件系统设计。硬件设计包括单元电路、选择元器件及计算参数等;软件设计包括模块化层次结构图、程序流程图等。程序设计是课程设计的关键环节,通过调试,进一步完善程序设计,使之达到课题所要求的指标,使理论设计更接近于 1
实际产品。课程设计的最后要写出设计总结报告,把理论设计内容,调试的过程及性能指标的测试结果进行全面的总结,把实践内容上升到理论高度。
以下8个设计题目每组学生可任选一项: 题目一 智能交通灯控制系统设计
1、设计要求
(1)用发光二极管模拟交通信号灯,用按键开关模拟车辆检测信号。
(2)A、B两车道交叉组成十字路口,A是主车道,B是支道。正常情况下,A、B两车道轮流放行,A放行50s,B放行30s,各含5s警告时间。
(3)交通繁忙时,该系统应有手受控开关缓解交通拥挤状况,其中一车道放行期间,另一车道繁忙,可通过开关获得15s放行时间。
(4)有紧急车辆通过时,另需一开关设置两车道均禁止通行20s。
2、主要功能模块
智能交通灯控制系统主要功能模块包括电源电路、单片机主控电路、按键控制电路和道路显示电路组成。根据具体情况选择合适型号的单片机,发光二极管,开关等硬件设备进行设计。
题目二 温度控制系统设计
1、设计要求
(1)用单片机控制一个由1kw电炉加热的电烤箱,最高温度不超过120℃。(2)电烤过程恒温控制,温度可通过系统设置,误差不超过±2℃。(3)实时显示温度和设置温度,显示精确为1℃。
(4)温度超出设置温度±5℃时发超限报警,对升温和降温过程不作要求。
2、主要功能模块
温度控制系统的主要功能模块包括温度测量(温度传感器、放大器、ADC转换器)、温度控制(光电隔离、驱动电路、可控硅电路、电炉)、温度给定(按键)、温度显示和报警等几部分。根据具体情况选择合适型号的单片机,温度传感器、ADC转换器等硬件设备进行设计。
题目三 点阵LED电子显示屏的设计(第8章)
1、设计要求
(1)设计4个16×16的LED电子显示屏,能稳定、清晰地显示图形或文字。(2)图形或文字显示通过编程能实现静止、左移和右移等多种显示方式。
(3)采用动态扫描方式,保证在目测条件LED显示屏可亮度均匀地显示图形和文字,并且稳定、清晰、无串扰。
2、主要功能模块
LED电子显示屏系统的主要功能模块包括单片机主控模块、16×16的点阵显示、行驱动电路、列驱动电路、译码电路几部分。根据具体情况选择合适型号的单片机等硬件设备进行设计。题目四 密码锁设计
1、设计要求
(1)要求密码锁可以设置8位密码,每位密码值范围为1~8,用户可以自行设定和修改密码。
(2)若输入的8位开锁密码不正确,则报警5s,连续错3次要报警1分钟,报警期间输入密码无效;输入的8位开锁密码完全正确才能开锁,开锁时有1s提示音
(3)锁内有备用电池,内部上电复位时才能设置或修改密码;电磁锁的电磁线圈每次通电5s,然后恢复初态;密码键盘上只允许有8个密码按键,密码设定完毕后要有2s的提示音。
2、主要功能模块
密码锁系统主要功能模块包括主控模块、按键扫描模块、蜂鸣器、电源电路、复位电路、晶振电路、驱动电路几部分。根据具体情况选择合适型号的单片机,三极管等硬件设备进行设计。
题目五 LED点阵显示电子钟设计
1、设计要求
(1)时钟的显示由LED点阵构成。
(2)能正确显示时间,上电显示为12点,时间能够由按键调整。(3)误差小于1s。
2、主要功能模块
LED点阵显示电子钟系统主要功能模块包括主控模块、LED点阵扫描模块、电子钟模块组成。其中电子钟由显示电路、行驱动电路、列驱动电路、按键电路和复位电路、晶振电路、驱动电路几部分组成。根据具体情况选择合适型号的单片机,锁存驱动器、译码器等硬件设备进行设计。题目六 智能抢答器设计
1、设计要求
(1)设计一个智力竞赛抢答器,可同时供8名选手或8个代表队参加比赛,分别使用一个按钮,编号从0~7。
(2)设置一个控制开关,用来控制系统的清零和抢答开始。
(3)抢答器具有数据锁存功能、显示功能和声音提示功能。抢答开始后,有选手按动抢答按钮,锁存对应编号,并在LED数码管上显示选手的编号,同时灯亮且伴随声音提示。同时锁存电路,禁止其他选手抢答,显示编号一直保持到系统清零。
2、主要功能模块
智能抢答器系统主要功能模块包括主控模块、复位电路、电源电路、选手按键、控制开关按钮,声音提示和数码显示等部分组成。根据具体情况选择合适型号的单片机,蜂鸣器、数码管等硬件设备进行设计。题目七 比赛记分牌设计
1、设计要求
(1)启动时显示为0分,计分范围为0~100分。(2)得分时加上相应的分数,失分时剪去相应的分数。(3)刷新分数的按键按下时,伴随提示音。
2、主要功能模块
比赛记分牌系统主要功能模块包括单片机主控模块、显示模块、按键模块、电源模块等部分组成。根据具体情况选择合适型号的单片机,蜂鸣器、数码管等硬件设备进行设计。题目八 学习型红外线遥控器设计
1、设计要求
(1)适用于编码式红外线遥控型家用电器。(2)可遥控多台家用电器。(3)具有一个学习/控制复用键。
(4)可通过一个设备选择键和各个功能控制键实现对多台设备的常用功能的学习和控制。(5)成本低,抗干扰能力强。
2、主要功能模块
学习型红外线遥控器控制系统主要功能模块包括单片机主控模块、红外接收及发射电路、复位电路、按键及状态指示电路等部分组成。根据具体情况选择合适型号的单片机、一体化红外遥控接收器等硬件设备进行设计。
三、课程设计的要求
1、课程设计的组织形式:将班级分成若干组,每组3~5人,自行分工完成一个题目。
2、课程设计流程:
(1)审题、查阅相关资料,确定系统总体方案;
(2)完成硬件设计,画出硬件设计原理图(包括设备模块选择、搭接线路、计算参数等)
(3)根据所完成的任务、硬件原理图绘制系统软件框图,编制程序;
(4)系统调试,认真客观地记录和观察实验结果,对实验结果进行深入的分析,写出实验心得;
(5)撰写课程设计报告及答辩。
3、课程设计报告的编写要求:(1)设计任务书一份;
(2)硬件设计原理图一份(A4图纸);(3)设计模块说明;(4)软件调试说明;
(5)实验结果分析(包括硬件设计和软件调试分析)。
四、成绩考核方式
1、硬件设计成绩(20%);
2、软件设计成绩(20%);
3、实验调试(40%);
4、实验报告和平时成绩(20%)。
五、教材和参考文献
1、推荐教材
[1]杨居义.单片机课程设计指导.清华大学出版社.2009年9月.[2]李海滨.单片机技术课程设计与项目实例.中国电力出版社.2009年10月.2、教学参考书
[1]付家才.单片机实验与实践.高等教育出版社.2006年3月.[2]李广第.单片机基础.北京航空航天大学出版社.2005年9.[3]朱珍.单片机原理.石油工业出版社.2001年6.[4]胡锦.单片机技术实用教程.高等教育出版社
2004.6.[5]薛钧义.微机控制系统及应用.西安交通大学出版社.2003年2.[6]彭介华.电子技术课程设计指导.高等教育出版社.1999年10月.大纲制定人:李娜、吴泽、赵忠彪
大纲审定人:白政民
修订日期:2012.3
第三篇:单片机课程设计指导书
单片机课程设计指导书
一、设计内容及步骤
1、方案设计
先要明确设计任务的要求,根据设计任务及要求,确定设计所要实现的具体功能,例如“流水灯”具体怎么“流”、有几种“花样”、如何操作、等等。这是一项见仁见智的工作,没有统一的要求,各人可根据自己的理解自行设计。
2、硬件电路设计
设计能使单片机工作并实现所需功能的基本硬件电路,包括选择和确定元器件的规格、参数。
3、软件程序设计
单片机由于内存小、速度低,因此一般不用高级语言编程而多用汇编语言编程,这样软件程序和硬件电路就要有严格的对应关系。单片机电路的功能主要是由软件程序实现的,因此硬件电路比较简单而软件程序相对复杂,软件程序设计是整个课程设计的难点和重点。
4、烧写调试程序
由于软件程序一般都比较复杂,设计时难免会有考虑不周的问题,或是有一些疏漏,而这些问题或疏漏仅凭在纸上的分析是很难发现的,因此软件程序设计好后还要经过运行调试,才能知道所设计的软件程序能否实现之前确定的功能。这个过程往往要经过多次反复才能最终达到目的。一般先用计算机仿真进行调试,成功后再把程序写到单片机中并制作实际电路进行验证。
二、设计方法及要求
1、方案设计
首先要完整、准确地理解设计任务(虽然课程设计只是做个电路模型进行一下验证演示,但设计时要假象是设计一个实用的产品),然后通过必要的调研、分析,综合考虑各方面的因素,定出一个具体的设计目标。
例如,可先把自己当作用户,从用户的角度考虑这个“产品”应该具备哪些功能、怎样操作使用比较方便,同时又安全可靠;再从厂家的角度,结合实际的客观条件,考虑怎样既能满足用户的基本需求,又能最大限度地降低生产成本。
因此设计目标不要追求尽善尽美,但也不能过于简单,要从实际出发,用足用够给定的硬件条件,充分开发可以用软件实现的功能以使整体功能最大化。
2、硬件设计
硬件设计包括确定电路的结构组成、绘制电气原理图、确定元器件的规格参数。
由于是课程设计,多数题目采用最小系统即可,如果要求高一点,还要考虑抗干扰措施、电路的功耗、数据的断电保护、元器件的来源和性价比等。
最小系统基本上是一种固定的模式,需要设计的就是合理分配单片机的资源,分配、确定输入输出端口用途,这没有固定的模式,只要符合单片机的端口功能和性能就行。例如,输入输出应优先采用P1口,还要注意各口作输出口时带负载的能力,即高电平时所能输出的最大电流,或低电平时允许灌入的最大电流,以及高阻态时所能承受的最高电压。原则上输出口所接负载的电流消耗不能超过输出口允许进出的最大电流值,最好是让输出口通过缓冲驱动器(例如三极管)带负载而不是直接带负载,以免造成单片机的损坏。
硬件结构应结和应用软件一并考虑,若某种功能既可以用硬件实现,也可以用软件实现,应优先选择用软件实现,以尽可能地简化硬件结构。
3、软件设计
软件设计要结合功能设计和硬件设计进行,或者说在做功能设计和硬件设计时就要对软件设计有所考虑,即那些功能应由软件完成。
设计软件不要一来就急于用指令写程序,要先做总体规划设计,明确软件要实现的功能是什么,分那些步骤、按什么顺序来实现设计的功能,画出程序的流程图。程序的流程也就是单片机的工作过程,从通电工作开始,程序的第一步做什么,后面又做什么„„;怎样结束,等等。由于单片机是靠程序进行工作的,程序怎么规定它就怎么做,程序没有规定它就无法工作,很死板。因此设计程序流程时要作仔细、周全的考虑,只要出现所设计的“产品”在正常操作使用过程中可能出现的任何一种情况,都要让单片机知道该如何应对处理,否则就会出现死机无法工作的情况。
程序的流程是编写程序的纲领、指导、前提,有了正确的程序流程,就容易编写出正确的程序,单片机也才能实现所设计的功能。俗话说,磨刀不误砍柴工,所以构思、设计程序的流程要给予高度的重视,要花大的气力,有时一次两次难以考虑周全,可能需要反反复复地进行多次。
如果整个流程实现一个总体功能,则流程的每一分支或步骤即可看成是一个子功能。对于比较复杂的功能,则子功能下还可再分解出孙功能,即总体功能画一个流程图,再针对较大的子功能画细致的流程图。总之流程图画的越细致,程序越容易编写。
流程设计好后,也不要就急于写具体的程序,因为那样写程序缺乏条理,很容易出错,而且可读性差,难以发现和纠正错误。因此写程序前还应对程序的编写结构进行认真的规划设计。
程序的结构总体上可分为两大部分,即主程序和子程序(或中断程序)。主程序可按程序的功能分块、分段进行编写,每块、每段完成一个特定的功能。如果某一块或段在主程序中需多次出现,应把它作为子程序,以减少整个程序的长度。
程序设计的重点在于搭建程序的框架,框架搭成,工作就完成了大半,剩下的就是填充框架。填充框架不一定要自己去一条一条地想该用什么指令,可根据某一块或某一段程序的功能,寻找具有相同功能的现成的程序块、段去填充,对于一些“通用”的程序段,例如按键消抖程序、延时程序等,应优先采用成熟的“标准”程序,这样既可减少工作量,又可减少出错。事实上,程序设计大多数时候就是用一些零散、成熟的程序快(段)拼凑成一个自己所需的完整程序。
程序运行中,可能需要在不同的功能模块间进行跳转,这就需要在跳转的入口处加上标号。为便于阅读,在符合指令的语法规则的前提下,标号应能简要地反映该段程序的功能,例如采取常见的英文缩写或汉语拼音缩写(通常是缩写单字拼音的首字母)。
运用跳转指令时要注意避免进入死循环。若不可避免进入死循环,或有意要进入死循环,除复位外,最好能有其他退出死循环的措施。
单片机程序的运行离不开单片机的内存,因此编写程序前还应充分了解所用单片机的内存情况,尤其是要搞清楚那些具有特定用途的特殊内存的用途、位置及长度,同时还要搞清楚所用程序指令(包括常数表格)以及依程序流程产生的各项数据要占用的存储空间,编写程序前,要合理地分配利用内存空间,注意不要占用特殊内存。
最后,为了便于以后(以及其他人)对程序的阅读、分析,所编写的程序应该条理清楚,程序各块、段、条的功能作用明确,在一些重要、关键或用意不是很明确的指令后最好加以注释。
三、设计报告的内容及要求
1、方案设计说明
从总体上概括介绍所设计项目的构成、功能及操作使用方法,详细说明该方案是怎么设计出来的。
2、硬件设计说明
画出完整、规范的电路图,说明单片机I/O口分配使用的情况以及为何这样分配使用,分析介绍电路的工作原理,介绍电路中主要元器件在电路中的作用以及他们的规格或参数是怎样确定的。
3、软件设计说明
1)说明软件设计的思路,介绍软件的总体功能,画出完整、规范的程序的流程图;
2)介绍程序的总体框架结构,即整个程序由哪些模块构成,各模块的功
能是什么,其中又包含哪些子功能,等等,从总体上说明整个程序的执行及工作过程;
3)以一些重要或关键的程序段为例,说明该段程序的功能、作用和编写
思路;
4)列出完整的程序清单,重要、关键或难以理解用意的模块、语句要加
以注释;
4、制作调试说明
介绍制作调试的过程、结果,以及在过程中出现的问题和解决问题的方法。
5、操作使用说明
介绍所设计“产品”的操作及使用方法。
6、总结说明
介绍本次课程设计的收获、体会或经验教训,要求客观、具体。
报告不要盲目追求篇幅,只要能说清楚问题即可,不必大量拷贝或摘抄资
料文献。正文采用宋体四号字,若用手写,要求字迹工整。
四、进度安排
本课程设计共两周的时间,按10个工作日算,进度安排如下:
明确设计任务,调研、查阅资料,构思、确定总体方案,用两天时间; 设计硬件电路,设计软件功能,画程序流程图,用一天时间;
设计程序结构,编写程序,用两天时间;
通过计算机仿真验证调试程序,用一天时间;
制作硬件电路,用一天时间;
通过硬件电路验证调试程序,用一天时间;
撰写设计报告,验收设计成果,用两天时间。
五、成绩评定
及格标准如下:
1、按期完成设计并提交设计报告和交验根据设计制作的实物,出勤良好;
2、报告的内容、格式符合要求,能反映设计过程的实际情况,设计制作的实物的功能和性能基本能达到设计任务的要求。
在及格的基础上,根据设计成果的质量酌情评定为优秀、良好或中等。 不交设计报告或报告的内容大部分是抄来的,以及不交验设计制作的实物
或用别人的实物来交验,出勤很少,将判为不及格。
第四篇:《单片机原理及接口技术》课程设计报告——多通道秒表定时器(DOC)
《单片机原理及接口技术》
课程设计报告
课程设计名称:多通道秒表定时计数器设计
院 系:自动控制与机械工程学院
专业:电气工程及其自动化
班级:2012级电气二班
姓名:黄瑞
学号:201204170209
时间:2014年6月
目录
一、课程设计目的和要求.....................................................................................................3
1、设计的目的.................................................................................................................3
2、设计的要求.................................................................................................................3
(1)总体要求.........................................................................................................3(2)具体要求.........................................................................................................4(3)设计提示.........................................................................................................4
二、设计的步骤和思路.........................................................................................................5
1、设计的步骤.................................................................................................................5
2、设计的思路.................................................................................................................5
三、硬件的设计.......................................................................................................................6
1、信号输入电路.............................................................................................................7
2、数码管的驱动模块的电路.........................................................................................7
3、LED灯的驱动模块电路............................................................................................8
四、软件设计...........................................................................................................................8
1、单片机选择.................................................................................................................8
2、系统软件设计分析.....................................................................................................9
3、主要功能实现的程序...............................................................................................10(1)通道号的设置...............................................................................................10(2)定时值的设置...............................................................................................11
五、调试说明.........................................................................................................................12
1、未启动仿真时,初始状态:...................................................................................13
2、开始启动仿真后:...................................................................................................13
3、通过按下K2切换至一、二、三、四通道和定时值的设置:............................14
4、定时时间到后对应通道号LED灯点亮:.............................................................15 六
心得体会.........................................................................................................................16
七、致谢.................................................................................................................................17 八、参考文献.......................................................................................................................17
九、附录.................................................................................................................................18
一、课程设计目的和要求
1、设计的目的
单片机课程作为独立的教学环节,是自动化及相关专业集中实践性环节系列之一,是学习完〈〈单片机原理与接口技术〉〉课程后,并在进行相关课程设计基础上进行的一次综合联系。
单片机课程设计过程中,我们通过查阅资料,接口设计、程序设计、安装调试等环节,完成一个基于MCS-51系列单片机,涉及多种资源应用,并具有综合应用功能的小应用课程设计,不但使我们能熟练掌握课堂上所学知识,而且还能使我们在设备和软件方面得到较全面的提高和锻炼,也提高了我们运用综合知识解决实际的能力。
课程设计以学生认知为主体,充分调动学生的积极性,重视学生自学能力的培养,根据具体课题安排时间确定课题的设计、编程和调试内容,分团队开展课程设计活动,按时完成每部分工作。坚持独立完成,实现课题规定的各项指标,并写出设计报告。
要求学生自己查阅资料和充分利用所学知识,根据所要设计系统所要达到的功能,划分软硬件功能、选择器件、编写相关程序,用Proteus 在计算机上绘图并用Keil进行程序边编写进行防真,再对整个系统做调试运行,培养学生在遇到问题时能进行独立、系统、认真的思考,并进一步培养学生在团队中的合作精神,不断调试修改,直至达到设计的要求和取得满意的效果,最后编写系统说明书,其内容包括系统的功能介绍,使用范围,主要性能指标,使用方法,注意事项等。
2、设计的要求
(1)总体要求
本次课程设计主要以软件仿真为主,在为期两周的工程实践中,将占据主要时间,要求完成的任务主要包括以下几点:
(1)独立完成设计任务;
(2)绘制系统硬件总框图;(3)绘制系统原理电路图;
(4)制定编写设计方案,编制软件框图,完成详细完整的程序清单和注释;(5)制定编写调试方案,编写课程设计任务书;(6)写出设计工作小结。(2)具体要求
该课程设计要求基于AT89C51设计一个4位的LED数码管作为“4通道的秒表定时器”。
1设计使显示时间为0~99秒;
2当各通道定时时间到时,点亮对应的LED灯; 3设计一个具有4个按键的键盘:
K1:“设置”/“定时启动”; K2:“通道”/“定时设置”; K3:“加一”; K4:“减一”;
4设计每到一秒钟有声音或LED提示提醒功能,可通过按钮打开及关闭该提醒功能。(3)设计提示
(1)用6为7段LED数码管作为显示设备,最高为显示通道号,低2位显示时间。
(2)可采用定时器,定时时间100ms。(3)参考Protuse仿真效果图
图1-1 Protuse仿真效果图
二、设计的步骤和思路
1、设计的步骤
(1)制定相应的设计方案;
(2)硬件的初步设计;
(3)选择设计所用元器件和参数;(4)在Proteus 7.5中设计和连接电路图;(5)软件的初步设计;(6)编写程序实现其功能;(7)在keil_v4中进行调试运行;(8)硬件和软件联合调试。
2、设计的思路
为使数码管同时显示通道号和定时值(0~99秒),选用4位7段LED数码管,当定时时间到时点亮对应的LED灯,课程中我们选用LED-BLUE灯,并设计有四位按键的键盘,分别为K1、K2、K3、K4来控制定时启动/停止、通道号和定时时间的切换设置、通道号/定时时间加
一、通道号/定时时间减一。通过这四个按键来控制整个电路的运行、LED灯的点亮和数码管的显示。具体控制如下:(1)通道号为1~4,对应LED灯为LED1~LED4,执行程序前可任意选择通道号;定时值可在0~99S内任意设置;
(2)当程序运行初始化化后,如果K2按下,则切换至通道号的设置,通过K3、K4来增加或减小通道号;当选择好通道号后如果按下K2则切换至定时值的设置,通过K3、K4来增加或减小定时值;当定时值设置好之后按下K1则程序执行所选通道的秒表定时;当定时时间到时,对应通道的LED灯点亮;
(3)当程序运行初始化后直接按下K3、K4进行定时时间的设置,通过K3、K4
来增加或减小定时值;当设置好之后按下K1后直接执行一通道的秒表定时;当定时时间到时,对应通道的LED灯点亮;
(4)当程序运行初始化后直接按下K3、K4进行定时时间的设置,通过K3、K4来增加或减小定时值;当设置好之后按下K2则切换至通道号的设置,通过K3、K4来增加或减小通道号;当设置好后按下K1则执行对应通道的定时;当定时时间到时,对应通道的LED灯点亮;
(5)当程序运行初始化后直接按下K3、K4进行定时时间的设置,通过K3、K4来增加或减小定时值;当设置好之后按下K2则切换至通道号的设置,通过K3、K4来增加或减小通道号;当设置好后按下按下K2则又切换至定时时间的设置,通过K3、K4来增加或减小定时值;依次可不断循环通道号和定时时间的切换设置,直至达到自己所想要的定时时间,此时按下K1则执行对应通道的秒表定时,当定时时间到时点亮对应的LED灯。
三、硬件的设计
硬件电路设计框图如下图所示,主要由:4个按键的键盘、AT89C51单片机、数码管、4个LED灯。
根据硬件系统电路设计框图,对各部分模块的原理进行分析,编写个子模块程序,最终将其组合。
图3-1硬件电路设计框图
1、信号输入电路
独立式按键就是各按键相互独立,每个按键各接入一根输入线,一根输入线上的按键工作状态不会影响其他输入线上的工作状态。因此,通过检测输入线的电平状态可以很容易判断哪个按键按下了。独立式按键电路配置灵活,软件简单。但每个按键需要占用一个输入口线,在按键数量较多时,需要较多的输入口线且电路结构复杂,故此种键盘适用于按键较少或操作速度较高的场合。
图3-2键控电路
消除键抖动。一般按键在按下的时候有抖动的问题,即键的簧片在按下时会有轻微的弹跳,需经过一个短暂的时间才会可靠地接触。若在簧片抖动时进行扫描就可能得出不正确的结果。因此,在程序中要考虑防抖动的问题。最简单的办法是在检测到有键按下时,等待(延迟)一段时间再进行“行扫描”,延迟时间为10~20ms。这可通过调用子程序来解决,当系统中有显示子程序时,调用几次显示子程序也能同时达到消除抖动的目的。
2、数码管的驱动模块的电路
图3-3数码管驱动模块电路
3、LED灯的驱动模块电路
图
3-4LED灯的驱动电路
四、软件设计
1、单片机选择
AT89C51是美国ATMEL公司生产的低电压、高性能CMOS 8位单片机,片内含4K bytes的可反复擦写的只读程序存储器(PEROM)和128bytes的随机存取数据存储器(ROM),器件采用ATMEL公司的高密度、非易失性存储技术生产,兼容标准MCS-51指令系统,片内置通用8位中央处理器(CPU)和Flash存储单元。
功能强大AT89C51单片机可提供许多高性价比的应用场合,可灵活应用于各种控制领域。此设计中就采用AT89C51。单片机小系统的电路图如图所示:
图4-1信号输入电路
单片机AT89C51的主要特征:
①与 MCS-51 兼容,4K 字节可编程闪烁存储 ②灵活的在线系统编程,掉电标识和快速编程特性; ③寿命为 1000 次写/擦周期,数据保留时间可 10 年以上; ④全静态工作模式:0HZ33HZ; ⑤三级程序存储器锁定;
⑥128×8 位内部 RAM,32 位可编 I/O 线;
⑦两个 16 位定时器/计数器,5 个中断源,4 个 8 位并行的 I/O 接口,个全双工 I/O 接口。
2、系统软件设计分析
模块的划分:
(1)键盘的设置、启动、停止、加
一、减一;(2)数码管显示通道号和定时时间;
(3)定时时间到后对应通道号的LED灯点亮。程序流程图如下:
开始 初始化 Y扫描K2键按N Y扫描K2键按下? 通道号设定下? N 通道号加一 Y扫描K3键按扫描K3键按Y下?下? 定时时间加一 N N 通道号减一 Y扫描K4键按扫描K4键按Y下?下? 定时时间减一 N N扫描K1键按N下? Y数码管计时 定时时间N到? Y通道号对应的LED灯点亮 结束
图4-1程序流程图
3、主要功能实现的程序
1)通道号的设置
uchar set_thax()
//设置通道函数
{
key_set();
if(set_2==2)
{
delay(10);
if(k3==0)
//K3加1
{
delay(30);
if(k3==0)
(
{
delay(300);
sec++;
if(sec==5)
{sec=1;}
}
}
if(k4==0)
//K4减1
{
delay(30);
if(k4==0)
{
delay(300);
sec--;
if(sec==0)
{sec=4;}
}
}
}
a=sec;
return a;}
2)定时值的设置
void set_time()//设置时间函数
{ key_set();if(set_2==1){
delay(10);
if(k3==0)
//K3加1
{
delay(30);
if(k3==0)
{
delay(300);
minu++;
if(minu==100)
{minu=1;}
}
}
(11
if(k4==0)
//K4减1
{
delay(30);
if(k4==0)
{
delay(300);
minu--;
if(minu==-1)
{
}
}
}
} }
五、调试说明
仿真结果和分析:
minu=99;12
1、未启动仿真时,初始状态:
图5-1未启动仿真时,初始状态
2、开始启动仿真后:
图5-2开始启动仿真后
3、通过按下K2切换至一、二、三、四通道和定时值的设置:
图5-3通过按下K2切换至一、二、三、四通道和定时值的设置
4、定时时间到后对应通道号LED灯点亮:
图5-4定时时间到后对应通道号LED灯点亮
六
心得体会
作为一名电气工程及其自动化专业的大二学生,我觉得做单片机课程设计是十分有意义的,而且是十分必要的。在已度过的大学时间里,我们大多数接触的是专业课。我们在课堂上掌握的仅仅是专业课的理论知识,如何去锻炼我们的实践能力?如何把我们所学的专业基础课理论知识运用到实践中去呢?我想做类似的课程设计就为我们提供了良好的实践平台。
在两个周的学习工作中,通过查阅相关资料了解了直流调速系统,加深了对直流电机调速控制系统的认识,熟悉了单片机在控制系统中的运用。并且在所学知识的基础上,利用已有的直流调速系统设计,尝试了自己的一些研究。并且使我将以前所学的知识系统化,理论化,实用化。对如何使用已有知识及获取相关资料方面的能力又有了提高。
根据课题要求,利用所学的相关知识,查询相关的资料。根据课程条件,找到适合的方案,找到需要的元器件。
根据课程设计的要求和自己所要增加的功能写好程序流程图,在程序流程图的基础上,根据芯片的功能写出相应的程序。然后再进行程序调试和相应的修改,以达到能够实现所要求的功能的目的。
除编写实现设计要求外的程序,还要根据课程设计的实际情况,添加些额外程序来使系统更加的稳定,如开关的去抖(采用延迟)。
该课程设计的程序可以参考MCS-51系列单片机,也可自己根据自己熟悉的方法来编程如单片机C语言或汇编语言。
在设计控制开关时,注意2个中断的打开和关闭的先后顺序,否则就会出错。这次的单片机课程设计重点是理论与实际的相结合。该设计从头到尾都要自己参与,熟悉了整个设计的过程,更充分的锻炼了自己。
在此要感谢我的指导老师,感谢老师给我这样的机会锻炼。在整个设计过程中我懂得了许多东西,也培养了我独立工作的能力,树立了对自己工作能力的信心,相信会对今后的学习工作生活有非常重要的影响。而且大大提高了动手的能力,使我充分体会到了在创造过程中的探索的艰难和成功的喜悦。虽然这个设计还不是很完善,但是在设计过程中所学到的东西是这次设计的最大收获和财富,使我终身受益。
七、致谢
为期两个周的课程设计也接近了尾声。此次课程设计的完成离不开老师和同学对我的帮助,使我对单片机的工作原理和使用更近了一步。
首先要感谢我敬爱的指导教师。他们在学术上的精心指导和严格要求,在系统研究和调试过程中给予的及时帮助。这些使我组的课程设计得以顺利完成,并激励着我们在今后的人生道路上不断开拓进取,勇往直前。在此,我们再一次对诸位老师的培养和关怀表示诚挚的谢意!
同时我们也非常感谢所有教导过我的老师们,他们不但在课程设计中指导我们学习和生活,而且在完成论文期间给我许多帮助和建议,他们兢兢业业、对工作认真负责的态度为我们做出了好的表率,时刻鞭策着我们向他们学习。
非常感谢我的同学们,在与他们共同的学习、工作、生活过程中,他们给予了我及时的帮助和建议,开拓了我的思路。这使我在学习和生活中受益匪浅。
最后,向所有帮助过我的老师和同学致以最诚挚的谢意。
八、参考文献
[1] 陈伯石.电力拖动自动控制系统[M].北京:机械工业出版社,2003.[2] 钟富昭.8051单片机典型模块设计与应用[M].北京:人民邮电出版社,2007 [3] 张靖武.单片机系统的PROTEUS设计与仿真[M].北京:电子工业出版社,2007 [4] 杨恢先.单片机原理及应用[M].北京:人民邮电出版社,2006 [5] 孟庆涛.图解电子控制电路[M].北京:人民邮电出版社,2006 [6] 谢维成.单片机原理与应用及C51程序设计[M].北京:清华大学出版社,2006 [7] 周润景.基于PROTEUS 的电路及单片机系统设计与仿真[M].北京:北京航空航天出版社,2006 [8] 李光飞.单片机课程设计实例指导[M].北京:北京航空航天出版社,2004 [9] 杜坤梅.电机控制技术[M].哈尔滨:哈尔滨工业大学出版社,2002 [10] 李广第.单片机基础(修订版)[M].北京:北京航空航天大学出版社,2001 [11] 吴亦峰.单片机原理与接口技术[M].北京:电子工业出版社
九、附录
#include
sbit QB1=P2^0;sbit QB2=P2^1;sbit QB3=P2^2;sbit QB4=P2^3;sbit k1=P1^0;//k1按键, sbit k2=P1^1;//k2按键, sbit k3=P1^2;//k3按键,加1 sbit k4=P1^3;//k4按键,减1 sbit led4=P3^0;//LED灯 sbit led3=P3^1;sbit led2=P3^2;sbit led1=P3^3;sbit what=P0;uchar sec=1,minu,mstcnt;// 定义初始量 uchar set_2=1,set_1=1;uchar mis,mig,ss,sg;uchar code table[]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F};//共阴显示
uchar code tabl[]={0x3F,0x06,0x5B,0x4F,0x66};int a;
void delay(uint);//延时函数 void key_change();// 扫描K1 void key_set();//
扫描K2 void disp(uchar,uchar,uchar,uchar);//显示函数 void set_time();//设置时间函数 uchar set_thax();//设置通道函数 void timer0();void haap();
void main()//主函数 { EA=1;//系统允许有开放的中断 ET0=1;//允许T0中断
TR0=1;//开启中断,启动定时器 TMOD=0x01;TH0=0x00;//选择数码管
TL0=0x01;
while(1){
sg=sec%10;//通道个位 mis=minu/10;//显示时间十位 mig=minu%10;key_set();//扫描K2 key_change();//扫描K1 if(set_1==1)//设置显示条件 {haap();} if(k1==1&&k2==1)//正常显示 { delay(10);if(k1==1&&k2==1){ sg=sec;disp(sg,mis,mig,ss);} } key_change();
if(set_1 ==2)//启动条件
{
timer0();
} key_change();if(set_1==3){minu=0;} } }
void haap()
//设置显示函数{ if(set_1==1){ delay(10);key_set();if(set_2==1){ delay(10);
set_time();}
key_set();if(set_2==2){
delay(10);
set_thax();
} } }
void timer0()interrupt 1 using 0 //启动函数{
TH0=0x01;TMOD = 0x01;
if(set_1==2)
{ delay(10);mstcnt++;
if(mstcnt==20){
mstcnt=0;
if(minu==0)
{
minu=0;
set_thax();
if(a==1)
{
led1=0;
led2=1;
led3=1;
led4=1;
}
else
{
if(a==2)
{
led1=1;
led2=0;
led3=1;
led4=1;
}
else { if(a==3)
}
}
}
else
{
minu--;
} } if(minu==0){ minu=0;
} } }
void key_change()//k1按键扫描 { if(k1==0){ delay(20);
{ led1=1;led2=1;led3=0;led4=1;
} else
if(a==4)
{
led1=1;
led2=1;
led3=1;
led4=0;
}
if(k1==0){ set_1++;while(k1!=1);if(set_1==4){set_1=1;} } } }
void key_set()//k2按键扫描 { if(k2==0){ delay(20);if(k2==0){ set_2++;while(k2!=1);if(set_2==3){set_2=1;} } } } void disp(uchar sg,uchar mis,uchar mig,uchar ss)//显示函数{ QB1=0;QB2=1;QB3=1;QB4=1;P0=table[sg];//第1个数码管显示通道 delay(10);//延时一小会
QB1=1;QB2=1;QB3=0;QB4=1;P0=table[mis];//第3个数码管显示十位 delay(10);QB1=1;QB2=1;QB3=1;QB4=0;P0=table[mig];//第4个数码管显示个位
delay(10);QB1=1;QB2=1;QB3=1;QB4=1;P0=table[ss];//第2个数码管不显示 delay(10);}
void set_time()//设置时间函数 { key_set();if(set_2==1){
delay(10);if(k3==0)//K3加1 { delay(30);if(k3==0){ delay(300);minu++;if(minu==100){minu=1;} } } if(k4==0)//K4减1 { delay(30);if(k4==0){ delay(300);minu--;if(minu==-1){
minu=99;
}
} } } }
uchar set_thax()
//设置通道函数
{ key_set();if(set_2==2){
delay(10);if(k3==0)//K3加1 { delay(30);if(k3==0){
delay(300);sec++;
if(sec==5){sec=1;} } } if(k4==0)//K4减1 { delay(30);if(k4==0){ delay(300);sec--;if(sec==0){sec=4;} } } } a=sec;return a;}
void delay(uint k)//延时函数 { uint i,j;for(i=k;i>0;i--)for(j=80;j>0;j--);}
第五篇:单片机原理及应用课程设计
智能电子钟(LCD显示)
1、设计内容及要求...............................................................................................2 1.1、设计内容..............................................................................................2 1.2、设计要求..............................................................................................2 1.3、撰写设计报告......................................................................................2
2、总体方案设计...................................................................................................2 2.1、方案图................................................................................................2 2.2、面板布置图.........................................................................................2 2.3、方案讨论.............................................................................................3 2.4、明晰任务.............................................................................................4
3、电路原理图......................................................................................................4
4、程序框图.........................................................................................................5 4.1、显示子程序流程图............................................................................5 4.2、实时时钟芯片 1302 读/写数据流程图............................................6
5、编程序................................................................................................................6
6、调试....................................................................................................................6 6.1、软件调试.............................................................................................6 6.2、仿真调试..............................................................................................7
7、自我感想............................................................................................................7
8、参考书目............................................................................................................8 附录:C 语言编程源程序.......................................................................................8 1.设计内容及要求 1.1、设计内容:
以AT89C51 单片机为核心,制作一个 LCD 显示的智能电子钟。1.2、设计要求:
(1)计时:秒、分、时、天、周、月、年。(2)闰年自动判别。
(3)五路定时输出,可任意关断(最大可到16路)。(4)时间、月、日交替显示。(5)自定任意时刻自动开/关屏
(6)计时精度:误差≤1秒/月(具有微调设置)
(7)键盘采用动态扫描方式查询。所有的查询、设置功能均由功能键K1、K2完成 1.3、撰写设计报告
单片机课程设计是以课题或项目设计方式开展的一门课程,具有较强的综合性、实践性,是工科、工程类院校或职业类院校电类专业在校生的必修课,是将单片机原理与应用课程的理论知识转变为应用技术的重要教学环节。这一环节不但能加深对单片机原理的理解,而且还能培养学生的实践动手能力,开发学生的分析、解决问题的能力。单片机课程设计环节的训练能够让学生知道单片机工程项目的制作过程,使学生尽早了解单片机系统的开发过程。
2.总体方案设计 2.1、方案图
2.2、面板布置图
2.3、方案讨论
方案一:采用实时时钟芯片
实时时钟芯片具备年、月、日、时、分、秒计时功能和多点计时功能,计时数据的更新每秒自动进行一次,不需程序干预。计算机可通过中断或查询方式读取计时数据进行显示,因此计时功能的实现无需占用 CPU 的时间,程序简单。此外,实时时钟芯片多数带有锂电池做后备电源,具备永不停止的计时功能;具有可编程方波输出功能,可用做实时测控系统的采样信号等;有的实时时钟芯片内部还带有非易失性 RAM,可用来存放需长期保存但有时也需变更的数据,由于功能完善,精度高,软件程序设计相对简单,且计时不占用 CPU 时间,因此,在工业实时测控系统中多采用这一类专用芯片来实现实时时钟功能。
方案二:软件控制
利用单片机内部的定时/计数器进行中断定时,配合软件延时实现时、分、秒的计时及秒表计时。该方案节省硬件成本,且能使设计者对单片机的指令系统能有更深入的了解,从而掌握单片机应用技术 MCS-51 汇编语言程序设计方法,因此,本系统设计采用此种软件控制方法来实现计时。而由于 Atmel 公司 的AT89C51 是一种自带 4KB Flash 存储器的低电压、高性能的 CMOS 8 位微处理器。该器件采用 Atmel 高密度非易失存储器制造技术制造,与工业标准 的MCS-51 指令集和输出引脚相兼容。AT89C51 将多功能 8 位 CPU 和闪存集成在单个芯片中,是一种高效的微控制器,使用也更方便,寿命更长,可以反复擦除 1000 次。形成了功能强大、使用灵活和具有较高性能价格比的微控制器。它的功能强大而且也比较容易购买,故本设计中所选的单片机为 AT89C51 单片机。2.4、明晰任务
采用 AT89C51 单片机作为系统的控制核心。时钟数据通过市场上流行的时钟芯片 DS1302 来获取。DS1302 是 DALLAS 公司推出的涓流充电时钟芯片,内含一个实时时钟/日历和 31 字节静态 RAM,可以通过串行接口与计算机进行通信,使得管脚数量减少。实时时钟/日历电路能够计算 2100 年之前的秒、分、时、日、星期、月、年的,具有闰年自动判断调整的能力。定时电路能够实现自定任意时刻自动开/关屏,采用 LCD LM016L 显示年、月、周、天、时、分、秒。通过按键开关实现微调,确保计时精度:误差≤1 秒/月。DS1302 时钟芯片的主要功能特性:
(1)能计算 2100 年之前的年、月、日、星期、时、分、秒的信息;每月的天数
和闰年的天数可自动调整;时钟可设置为 24 或 12 小时格式。(2)31B 的 8 位暂存数据存储 RAM。(3)串行 I/O 口方式使得引脚数量最少。
(4)DS1302 与单片机之间能简单地采用同步串行的方式进行通信,仅需 3 根线。
(5)宽范围工作电压 2.0-5.5V。
(6)工作电流为 2.0A 时,小于 300nA。
(7)功耗很低,保持数据和时钟信息时功率小于 1mW。
3.电路原理图
4.程序框图
4.1、显示子程序流程图
4.2、实时时钟芯片 1302 读/写数据流程图
5.编程序 源程序见附录部分 6.调试 6.1、软件调试
目前设计过程中容易造成元件和仪器仪表的损坏,而借助 Keil 和 Proteus进行单片机系统的开发,可以节省设计成本,提高设计速度。Keil 软件包是一个功能强大的开发平台,它包括项目管理器、CX51 编译器、AX51 宏汇编器、BL51/LX51 连接定位器、RTX51 实时操作系统、Simulator 软件模拟器及 Monitor51 硬件目标调试器。它是一种集成化程度高的文件管理编译环境,主要功能为编译 C 语言源程序,汇编程序或混合语言源程序,连接和定位目标文件和库,创建 HEX 文件,调试目标程序等。Keil 是目前最好的 51 单片机开
发工具之一。Keil 支持软件模拟仿真(Simulator)和用户目标调试(Monitor51)两种工作模式。前者不需要任何单片机硬件即可完成用户程序仿真、调试,后者利用硬件目标板中的监控程序可以直接调试目标硬件系统。Proteus 是一个完整的嵌入式系统软件、硬件设计仿真平台,它包括原理图输入系统 ISIS、带扩展的 Prospice 混合模型仿真器、动态元件库、高级图形分析模块和处理器虚拟系统仿真模型 VSM。ISIS 是 Proteus 系统的中心,具有超强的控制原理设计环境。ProteusVSM 最重要的特点是能把微处理器软件作用在处理器上,并和该处理器的任何模拟和数字元件协同仿真,仿真执行目标码就像在真正的单片机系统上运行一样,VSM CPU 模型能完整仿真 I/O 接口、中断、定时器、通用外部设备口及其他与 CPU 有关的外部设备,甚至能仿真多个处理器。6.2、仿真调试 Proteus 仿真
7.自我感想
经历过这么多天不间断的课程设计,我们有挺多感触的,从最基本上说我们看到了,也意识到了自己的不足,对于不断克服的各种阻碍也让我们体会到了课程设计的意义所在。对于只接触课本只动笔杆的我们,面临实际的设计尺寸,让我们很是尴尬,都说理论联系实际,真正到联系的时候才发现挺困难的,不过正是理论知识的各种补充才让我们能最终完成任务,然后深深地体会到理论对现实的指导作用。我们现在最缺乏的就是实际工作经验,而理论联系实践并不像我们想象的那么简单,他需要坚实的理论基础和实际工作经验。坚实的理论基础决定了我必须坚持学习新的知识新的理论,完善了自己的知识结构,才能在以后的实际中轻松面对,才能设计出更好的更有益于人们生活与工作的机械,才能跟上时代的步伐,不被淘汰。在这个一边忙着复习忙着考试又要准备课程设计的日子里,真真正正的体会到了时间的宝贵,有点像高中忙忙碌碌的生活,不过能按时完成课程设计对我们来说也是一个莫大的安慰。严谨和细心是做机械设计的必要态度,要想做好一件事,就必须一丝不苟、态度认真。俗话说:“失之毫厘,谬之千里。”在机械设计上尤其应该注意。在以后的工作中,你的很小的一个疏忽将会造成一个公司很大的损失,甚至给用户带去生命危险,而自己也会为自己的不负责任行为付出代价。再者就是设计中要严谨和细心,对于机械是不能出差错的,任何的微小误差都可能产生不可预计的后果,当然对于我们来说就是设计中要走一些弯路,而且在这个严重缺少时间又惦记回家问题的我们来说也是一个很严重的后果。不过,困难虽是难免的,但我们有信心就能并且已经战胜了困难,完成了这个无比揪心的课程设计。因为时间等各种关系设计中难免有些不足还请老师助教给予批评和帮助。
8.参考文献
《MCS-51 系列单片机原理及应用》 孙涵芳 主编 《新概念 51 单片机 C 语言教程》 郭天祥 主编 《51 单片机课程设计》 周向红 主编 《单片机原理及其应用教程》 张元良 主编 附录:C 语言编程源程序
#include
uint year_data,t;//-----sbit SCLK=P3^5;//DS1302 通讯线定义 sbit DIO=P3^6;sbit RST=P3^7;sbit speak=P0^0;sbit DS=P2^0;//595 通讯线定义 sbit SH_CP=P2^1;sbit ST_CP1=P2^2;sbit ST_CP2=P2^3;sbit ST_CP3=P2^4;sbit ST_CP4=P2^5;sbit ST_CP5=P2^6;sbit ST_CP6=P2^7;sbit ST_CP7=P3^0;sbit ST_CP8=P3^1;sbit OE1=P1^0;sbit OE2=P1^1;sbit OE3=P1^2;sbit OE4=P1^3;sbit OE5=P1^4;sbit OE6=P1^5;sbit OE7=P1^6;sbit OE8=P1^7;sbit K1=P3^2;//按键接口定义 sbit K2=P3^3;sbit K3=P3^4;sbit K4=P0^1;sbit K5=P0^2;//-----void write_595(uchar temp)//写 74HC595 一个字节 { uchar temp_595,i;temp_595=temp;for(i=0;i<8;i++)
{
SH_CP=0;
_nop_();_nop_();_nop_();if(temp_595&0x80){ DS=1;} else { DS=0;} _nop_();_nop_();_nop_();SH_CP=1;temp_595<<=1;} } //--------------void delay(uint z)//Nms 延时 { uint x,y;for(x=z;x>0;x--)for(y=112;y>0;y--);} //-------------void delaynus(uint z)//ums 延时 { uint x,y;for(x=z;x>0;x--)for(y=10;y>0;y--);} //---------------void write(uchar date)//写入 DS1302 一个字节 { uchar temp,i;RST=1;SCLK=0;temp=date;for(i=0;i<8;i++){ SCLK=0;if(temp&0x01)DIO=1;else DIO=0;SCLK=1;temp>>=1;} } //-----uchar read()//读出 DS1302 一个字节 { uchar a,temp;RST=1;for(a=8;a>0;a--){ temp>>=1;SCLK=1;_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();SCLK=0;if(DIO){ temp=temp|0x80;} else { temp=temp|0x00;} } return(temp);} //---void write_1302(uchar add,uchar dat)//写 DS1302 数据 { RST=0;SCLK=0;RST=1;write(add);write(dat);SCLK=1;RST=0;} //----------uchar read_1302(uchar add)// 读 DS1302 数据 { uchar temp;RST=0;SCLK=0;RST=1;write(add);temp=read();SCLK=1;RST=0;return(temp);} //------------void display()//显示子程序 { miao=read_1302(0x81);//读秒 fen=read_1302(0x83);//读分
shi=read_1302(0x85)&0x3f;//读时 date=read_1302(0x87);//读日 month=read_1302(0x89);//读月 year=read_1302(0x8d);//读年 day=read_1302(0x8B);//读星期 write_595(miao);//显示秒 ST_CP1=0;ST_CP1=1;ST_CP1=0;delaynus(10);write_595(fen);//显示分 ST_CP2=0;ST_CP2=1;ST_CP2=0;delaynus(10);write_595(shi);//显示时 ST_CP3=0;ST_CP3=1;ST_CP3=0;delaynus(10);write_595(date);//显示日 ST_CP4=0;ST_CP4=1;ST_CP4=0;delaynus(10);write_595(month);//显示月 读 ST_CP5=0;ST_CP5=1;ST_CP5=0;delaynus(10);write_595(year);//显示年 ST_CP6=0;ST_CP6=1;ST_CP6=0;delaynus(10);write_595(xingqi[day]);//显示星期 ST_CP7=0;ST_CP7=1;ST_CP7=0;delaynus(10);} //----------void ds1302_init()//1302 初始化 { RST=0;SCLK=0;/* write_1302(0x80,0x00);//设置初始值 SEC write_1302(0x82,0x00);//设置初始值 MIN write_1302(0x84,0x00);//设置初始值 HR write_1302(0x86,0x00);//设置初始值 DATE write_1302(0x88,0x00);//设置初始值 MONTH write_1302(0x8A,0x00);//设置初始值 DAY */ write_1302(0x8C,0x10);//设置初始值 YEAR } //--------------void PORT_INIT()//端口初始化 { P0=0XFE;P1=0X00;P2=0X00;P3=0XFC;} void time_init()//定时器初始化 { TMOD=0x11;//设置定时 器 01 都为工作方式 1 TH0=(65536-50000)/256;//装入初值 TL0=(65536-50000)%256;TH1=(65536-10000)/256;//装入初值 TL1=(65536-10000)%256;PT0=1;//T0 定时器优先级最高 EA=1;//开总中断
ET0=1;//开定时器 0 中断 ET1=1;//开定时器 1 中断 TR0=1;//启动定时器 0 TR1=1;// 启动定时器 1 } //--------------void main(void)//主程序 { PORT_INIT();ds1302_init();time_init();year=read_1302(0x8d);//读年数据 year_data=0x2000|year;write_595(year_data>>8);//显示 2010 年的 20 字样 ST_CP8=0;ST_CP8=1;ST_CP8=0;set_shi=0x09;//闹钟初始值设定 set_fen=0x39;time_flag=0;//标志位 set=0;while(1){ switch(set){ case 0: //设置秒 { display();// 显 示 子 程 序
if((shi==set_shi)&&(fen==set_fen)&&(time_flag==0))小时和分钟 { speak=~speak;if((K2==0)&&(time_flag==0))//按键 K2 停 止闹钟响 { P0&=0XFE;time_flag=1;} delay(10);} } break;} if(fen==set_fen+1)// 当 不 按 下 闹 钟 停止按键,一分钟后自动停止闹 钟 { P0&=0XFE;time_flag=0;} } } //--------void time0()interrupt 1 // 定时 器 0 中断 { TR0=0;TH0=(65536-50000)/256;TL0=(65536-50000)%256;mun++;if(mun==15){ mun=0;switch(set){ case 1: //设置秒闪烁 {OE1=1;delay(300);OE1=0;} break;case 2: //设置分闪烁 { OE2=1;delay(300);OE2=0;} break;case 3: //设置时闪烁 { OE3=1;delay(300);OE3=0;} break;case 4: //设置日闪烁 { OE4=1;delay(300);OE4=0;} break;case 5: //设置月闪烁 { OE5=1;delay(300);OE5=0;} break;case 6: //设置年闪烁 { OE6=1;OE8=1;delay(300);OE6=0;OE8=0;} break;case 7: //设置星期闪烁 { OE7=1;delay(200);OE7=0;} break;case 8: //设置闹钟闪烁 { OE2=1;OE3=1;delay(200);OE2=0;OE3=0;} break;} } TR0=1;} //-----------void time1()interrupt 3 // 定时器 1 中断 { TR1=0;//先关定时器 TH1=(65536-20000)/256;TL1=(65536-20000)%256;//-if(K1==0){ delay(10);if(K1==0){ set++;if(set==9){ set=0;write_1302(0x80,miao);//设置初始值 SEC write_1302(0x82,fen);//设置初始值 MIN write_1302(0x84,shi);//设置初始值 HR write_1302(0x86,date);//设置初始值 DATE write_1302(0x88,month);// 设置初始值 MONTH write_1302(0x8A,day);//设置初始值 DAY write_1302(0x8C,year_data);//设置初始值 YEAR } t=50000;while((!K1)&&t){ t--;} } } //-------if(K2==0){ delay(10);if(K2==0){ switch(set){ case 1: { miao++;if((miao&0x0f)>0x09){ miao+=0x10;miao&=0xf0;} if(miao==0x60){ miao=0x00;} write_595(miao);ST_CP1=0;ST_CP1=1;ST_CP1=0;} break;case 2: { fen++;if((fen&0x0f)>0x09){ fen+=0x10;fen&=0xf0;} if(fen==0x60){ fen=0x00;} ST_CP2=0;ST_CP2=1;ST_CP2=0;} break;case 3: { if((read_1302(0x85)&0x80)==0x00){ shi++;if((shi&0x0f)>0x09){ shi+=0x10;shi&=0xf0;} if(shi==0x24)//24 小时制 { shi=0x00;} } else { shi=(shi|0x80)+1;if((shi&0x0f)>0x09){ shi+=0x10;shi&=0xf0;} if(shi==0x12)//12 小时制 { shi=0X80;} } write_595(shi);//显示时 ST_CP3=0;ST_CP3=1;ST_CP3=0;} break;case 4: { date++;if((date&0x0f)>0x09){ date+=0x10;date&=0xf0;} if((date==0x32)&&((month==0x01)||(month==0x03)||(month==0x05)||(month ==0x07)||(month==0x08)||(month==0x10)||(month==0x12))){ date=0x01;} else if((date==0x31)&&((month==0x04)||(month==0x06)||(month==0x09)||(month ==0x11))){ date=0x01;} else if((date==0x29)&&(month==0x02)&&((year_data|read_1302(0x8d))%100!=0)& &((year_data|read_1302(0x8d))%400!=0)){ date=0x01;} else if((date==0x30)&&(month==0x02)&&((year_data|read_1302(0x8d))%100==0)& &((year_data|read_1302(0x8d))%400==0)){ date=0x01;} write_595(date);ST_CP4=0;ST_CP4=1;ST_CP4=0;} break;case 5: { month++;if((month&0x0f)>0x09){ month+=0x10;month&=0xf0;} if(month==0x13){ month=0x01;} write_595(month);ST_CP5=0;ST_CP5=1;ST_CP5=0;} break;case 6: { year_data++;if((year_data&0x000f)==0x0a){ year_data+=0x0010;year_data&=0xfff0;} if((year_data&0x00ff)==0xa0){ year_data+=0x0100;//向前进 1 year_data&=0xff00;//后面尾数归 0 } write_595(year_data);ST_CP6=0;ST_CP6=1;ST_CP6=0;write_595(year_data>>8);ST_CP8=0;ST_CP8=1;ST_CP8=0;} break;case 7: { day++;if((day&0x0f)==0x08){ day=0x01;} write_595(xingqi[day]);ST_CP7=0;ST_CP7=1;ST_CP7=0;} break;} t=50000;while((!K2)&&t){ t--;} } } //-------------------------if(K3==0){ delay(10);if(K3==0){ switch(set){ case 1: { miao--;if((miao&0x0f)==0x0F){ miao&=0xf9;//减到 0 后,再减一次就归 0, } if(miao==0xF9)//当全部减到 00 时,再 减一次就为 59 { miao=0x59;} write_595(miao);ST_CP1=0;ST_CP1=1;ST_CP1=0;} break;case 2: { fen--;if((fen&0x0f)==0x0F){ fen&=0xf9;} if(fen==0xF9){ fen=0x59;} write_595(fen);ST_CP2=0;ST_CP2=1;ST_CP2=0;} break;case 3: { if((read_1302(0x85)&0x80)==0x00){ shi--;if((shi&0x0f)==0x0F){ shi&=0xf9;} if(shi==0xF9)//24 小时制 { shi=0x23;} } else { shi=(shi|0x80)-1;if((shi&0x0f)==0x0F){ shi&=0xf9;} ST_CP4=0;} break;case 5: { month--;if((month&0x0f)==0x0F){ month&=0xf9;} if(month==0x00){ month=0x12;} write_595(month);ST_CP5=0;ST_CP5=1;ST_CP5=0;} break;case 6: { year_data--;if((year_data&0x000f)==0x0F){ year_data&=0xfff9;} if((year_data&0x00f0)==0xF0){ year_data&=0xf999;} write_595(year_data);ST_CP6=0;ST_CP6=1;ST_CP6=0;write_595(year_data>>8);ST_CP8=0;ST_CP8=1;ST_CP8=0;} break;case 7: { day--;if((day&0x0f)==0x00){ day=0x07;} write_595(xingqi[day]);ST_CP7=0;ST_CP7=1;ST_CP7=0;} break;} t=50000;while((!K3)&&t)//松手检测 { t--;} } } //---switch(set){ case 8: { if(K4==0){ delay(10);if(K4==0){ if((read_1302(0x85)&0x80)==0x00){ set_shi++;if((set_shi&0x0f)>0x09){ set_shi+=0x10;set_shi&=0xf0;} if(set_shi==0x24)//24 小时制 { set_shi=0x00;} } else { set_shi=(set_shi|0x80)+1;if((set_shi&0x0f)>0x09){ set_shi+=0x10;set_shi&=0xf0;} if(set_shi==0x12)//12 小时制 { set_shi=0X80;} write_595(set_shi);// 显示闹 钟的时 ST_CP3=0;ST_CP3=1;ST_CP3=0;t=50000;while((!K4)&&t){ t--;} } } //----if(K5==0){ delay(10);if(K5==0){ set_fen++;if((set_fen&0x0f)>0x09){ set_fen+=0x10;set_fen&=0xf0;}
if(set_fen==0x60)
{
set_fen=0x00;
} write_595(set_fen);ST_CP2=0;ST_CP2=1;ST_CP2=0;t=50000;while((!K5)&&t){ t--;} } set_shi+=0x10;set_shi&=0xf0;} if(set_shi==0x12)//12 小时制 { set_shi=0X80;} write_595(set_shi);// 显示闹 钟的时 ST_CP3=0;ST_CP3=1;ST_CP3=0;t=50000;while((!K4)&&t){ t--;} } } //----if(K5==0){ delay(10);if(K5==0){ set_fen++;if((set_fen&0x0f)>0x09){ set_fen+=0x10;set_fen&=0xf0;}
if(set_fen==0x60)
{
set_fen=0x00;
} write_595(set_fen);ST_CP2=0;ST_CP2=1;ST_CP2=0;t=50000;while((!K5)&&t){ t--;} } } } } //------------------------if(((K4==0)||(K5==0))&&(set==0)){ delay(10);if(((K4==0)||(K5==0))&&(set==0)){ write_595(set_shi);//显示闹钟的时 ST_CP3=0;ST_CP3=1;ST_CP3=0;write_595(set_fen);ST_CP2=0;ST_CP2=1;ST_CP2=0;P1=0XF9;while((!K4)||(!K5));P1=0X00;} } //----------TR1=1;//退出时开定时器 } } //----------