第一篇:2012 单片机原理课程设计要求
通信0901/02单片机原理课程设计要求
(2011-2012学年第2学期)
1.综合运用已学习过单片机原理、模拟电路和数字电路等知识,阅读相关单片机电路芯片资料和相关文献,了解单片机电路设计的有关知识,方法和特点,掌握基本的单片机电路设计和芯片使用方法。
2.完成51单片机最小系统设计与制作,并利用最小系统完成一个单片机的简单应用实例,一人一题,所设计的电路必须制作成功,并且全部或者部分通过计算机仿真。传感器部分必须写清楚工作原理以及应用电路设计,其输出信号可以采用电压或者电流参数代替。
3.课程设计报告应包括有电路工作原理分析、电路元器件参数设计计算、电路调试说明、电路图(自己画)、元器件装配图(自己画)、元器件清单等内容,字数要求2000字以上,需要写自己的收获和体会。
4.所有的文档和表格必须采用Word形式。
5.同类型的设计题可以组成一个设计组,组员之间可以开展研究与讨论。雷同者均计0分。
6.独立完成芯片英文参考资料的翻译工作,理解资料内容。
7.英文资料中的图可以直接采用(pdf文档中的图可放大300倍后裁剪到Word文档中),图中的英文可以采用英文(中文)方式翻译在图下。
8.英文资料中的一些词,如果翻译拿不准,可以采用英文(中文)方式标注。
9.设计资料中的有关的公式可以直接采用。
10.设计资料中有关的曲线图直接采用,成文时根据需要选用(pdf文档中的图可放大300倍后裁剪到Word文档中)。
11.交制作的作品、文字稿和电子稿,采用Word文档形式。
12.参考文献
(1)黄智伟.凌阳单片机课程设计指导.北京:北京航空航天大学出版社,2007
(2)周航慈.单片机程序设计基础.北京:北京航空航天大学出版社,1997
(3)求实科技.单片机典型模块设计实例导航.北京:人民邮电出版社,2004
(4)余永权.89系列(MCS-51)Flash单片机原理及应用.北京:电子工业出
版社,2003
(5)王幸之.单片机应用系统电磁干扰与抗干扰技术.北京:北京航空航天大
学出版社,2006
(6)黄智伟.全国大学生电子设计竞赛技能训练.北京:北京航空航天大学出
版社,2007
(7)黄智伟.全国大学生电子设计竞赛制作实训.北京:北京航空航天大学出
版社,2007
(8)黄智伟.全国大学生电子设计竞赛系统设计.北京:北京航空航天大学出
版社,2006
(9)黄智伟.全国大学生电子设计竞赛电路设计.北京:北京航空航天大学出
版社,2006
(10)黄智伟.印制电路板(PCB)设计技术与实践.北京:电子工业出版社,2009
第二篇:单片机课程设计要求
单片机课程设计要求
课程设计的题目(自选)
班级:学号:姓名:论文要求要有题目、中英文摘要、参考文献(不少于8篇),内容包括以下几个方面:
一、设计简介
对单片机系统的功能进行简单介绍
二、系统介绍
简单介绍系统的组成包括硬件电路和软件有哪几部分组成三、硬件电路设计
对硬件电路的各个模块功能和工作原理的介绍,包括外围扩展芯片功能的介绍。
四、程序设计
介绍程序的组成和功能,画出程序流程图,附上程序清单。采用C51或汇编语言变成均可。推荐采用C51。(把源程序发到邮箱:)
五、仿真结果
对硬件电路和软件进行联合仿真,并给出仿真结果和说明。
六、总结
对本课程设计进行总结。论文不少于6业
第三篇:单片机课程设计要求
1.电子表设计
要求以AT89S52单片机为核心设计一个多功电子表,具有时钟和跑表功能。做时钟时在LED 显示器上显示分、秒,做跑表时显示范围000.0秒~999.9秒并具有跑表启动和跑表复位功能键。电子时钟的计时范围00分00秒59分-59秒,并在LED 显示器上显示;做跑表时显示范围000.0秒-999.9秒,当按下启动按钮跑表开始计时,按下停止按停止计时,当按下复位按钮跑表回零。
2.汽车尾灯的设计
设计要求:假设汽车尾部左右两侧各有3个指示灯(用发光二极管代替),应使指示灯达到三个要求:
(1)汽车正常运行时指示灯全灭;
(2)右转弯时,右侧三个指示灯按右循环顺序点亮;左转弯时左侧3个指示灯按左循环顺序点亮。
(3)临时刹车时所有指示灯同时闪烁。
3.数字温度计设计
要求采用8051单片机和温度传感器DS18B20设计一种数字温度计,测温范围-55到128度,测量精度为0.1摄氏度,由按键设定温度报警上下限值TH和TL,采用LCD作为数字温度计的显示器,分两行显示,第一行显示工作状态,正常时显示”DS18B20OK”,不正常时显示“DS18B20 ERROR”;第二行显示实测温度值和状态符号,“>H”表示实测温度大于温度报警值TH,“ 4、带温度显示功能的计时器 功能及技术指标: (1)本设计主要分为计时和温度显示功能两部分,实现天、时、分、秒的显示和温度的采集并显示功能。时间显示时、分、秒各两位数,并能够手动设置时间参数;温度表采集经过A/D转换显示并每60秒刷新。时分秒、温度交替显示。 (2)技术指标:显示计时小时、分钟和秒数(各2位);参数可手动设置;选择传感器,并设计相应的信号处理电路;实现实时温度显示功能(每60秒刷新一 次),温度测量范围-20~+60C 主要器件清单: 1、51芯片一个 2、显示管驱动芯片 3、AD590或 DS18B120温度传感器一个 4、显示管 5、译码芯片6、8位串行模数转换器 7、其他 若干。 5、具有语音功能的光控计数器 功能及技术指标: 实现数字式光电计数器的功能,对于某一空间内(例如:酒店、图书馆)的人数统计,通过单片机实现,有人进来说:(欢迎光临),有人出去说:(谢谢惠顾),并通过按钮来控制单片机报其总人数,大概实现0——100人的计数。 (1)语音的清晰度。 (2)计数的准确度。 (3)红外感应灵敏度。 主要器件清单: 1、51芯片一个 2、语音芯片:ISD17003、按键 4、开关:单刀双掷 5、扬声器 6、电压比较器:LM3587、其他 若干。 6、基于单片机便携式酒精含量测试的设计 功能及技术指标: 设计一个基于单片机便携式驾驶员酒精含量测试仪,测试人体呼出气体中酒精含量。测试仪采用气体传感器作为敏感单元,把气体中含有的乙醇气态浓度转换成电信号,再经AD模块以及微处理器的处理,由LCD直观显示出被测气体中的乙醇浓度,由此检测驾驶员是否醉酒驾车。 (1)通过分析测试仪测试原理、依据以及对酒精浓度的检测方法,拟定了酒精浓度与测试仪输出电压关系曲线; (2)通过分析ADC0809转换的要求,设定放大器对酒精传感器输出模拟信号放大,使电压在0到5V内,从而能够使ADC0809正常工作; (3)对 LCD1602 液晶显示模块进行调试,使其能够正确动态酒精浓度值。 主要器件清单: 1、酒精传感器 2、运算放大器 3、A/D:08094、LCD:16025、51芯片 6、其他。 八路智能抢答器 要求:八路抢答,只有最先按键的一路能选中,选中的显示红灯。 智能时钟 要求:显示年月日,闰年是否,调整时间,闹钟功能。 声控灯光控制器 要求:在受到声音影响时开关开,灯打开,30秒钟后灯自动熄灭。 7、基于单片机的数字频率计设计 设计要求: 1、用十进制数字显示被测信号的频率,能测量正弦信号、方波信号、尖脉冲信号以及其他各种单位时间内变化的物理量。 2、能测量周期性正弦方波信号.测量范围100Hz~100kHz。测量正弦信号、方波信号,测量范围100Hz~100kHz。 3、应用单片机为主控芯片,完成算术运算和控制功能,并采用LED数码管显示所测频率。 8、定时器设计 1、使用6位数码管显示时,分,秒,以24小时单位制; 2、利用键盘输入定时时间,定时时间一到立刻报警; 3、汇编语言编写程序。 9、数字温度计的设计 设计要求: 1、利用温度传感器测量温度,要求测温范围-55~125℃,误差±5℃以内; 2、采用单片机控制的方法,采用LED数码管显示温度; 3、汇编语言编写程序。 10、基于51单片机的直流电机PWM调速控制设计 基本要求:利用单片机生成不同宽度的PWM波形,进行直流电机的速度调节。设置四个按键K1,K2,K3,K4:按K1,K2进行直流电机的加速控制和减速控制(五级以上),按K3让电机正反转,相应的级别和正反转用led或数码管显示,按K4启停电机。 11、基于51单片机的两相四线步进电机调速控制设计 基本要求:设置五档以上速度,进行步进电机的速度调节。设置四个按键K1,K2,K3,K4:按K1,K2进行步进电机的加速控制和减速控制(五级以上),按K3让电机正反转,相应的级别和正反转用led或数码管显示,按K4启停电机。 12、基于51单片机的温度测控系统设计 基本要求:利用温度传感器(如DS18B20等)采集温度,数据经51单片机处理后,在数码管或字符型液晶屏1602上实时显示出所测温度。温度测量范围0~99.9摄氏度,设置上限报警温度、下限报警温度,即高于上限值或者低于下限值时利用蜂鸣器报警。 13、数字测温仪的设计 本课题以单片机为核心,设计并制作出一台数字测温仪,具有以下功能: 1)单点温度测试; 2)测温范围: 10℃~40℃; 3)分辨率:0~1℃; 4)温度输出显示:2 位; 5)设定上下限(下限18℃,上限25℃),超出范围时报警。 14、智能空调控制系统设计 功能要求: 1)设置自动、制冷、加热和换气四种模式,通过一个模式按键进行模式切换 2)设置2个按键,分别用来增加或减少温度值的设置 3)能实现温度设定,最高温度限制为35℃,最低温度限制为12℃,温度调整范 围为1℃ 4)可通过电脑进行远程设置(串口实现) 15、电子跑表的设计 本课题以单片机为核心,设计出电子跑表,具有以下功能: 1)做时钟时在6位LED 显示器上显示分、秒; 2)做跑表时显示范围10000.0秒~10999.9秒; 3)当按下启动按钮跑表开始计时,按下停止按钮停止计时,当按下复位按钮跑表回零。 16、简易数字电压表 基本要求: ⑴ 硬件设计:根据任务要求,完成单片机最小系统及其扩展设计,焊接电路板,组成功能完整的样机。 ⑵ 软件设计:根据电压测量及显示功能要求,完成相关软件的编写与调试; ⑶ 功能要求:2位数字及1位小数点显示,基本测量范围为0~5V,测量误差为±0.2V。⑷ 设计说明书(论文):设计说明书应表明设计思想和所使用的设计方法,主要内容包括:① 系统简介、整体功能说明、各功能模块说明(附图)及系统使用说明;② 设计还需要改进的地方及设计的心得体会;③ 参考文献:包括参考书、资料、网站等,按标准格式列出(可参考教材最后的参考文献引用格式);④ 附件:系统总体原理图及源程序。 扩展功能: 根据实际情况自由添加附加功能,如扩展电压测量范围(可扩展为0~10V,0~20V,0~100V等)、提高精度,实现量程的自动转换等。每扩展一项完整的功能增加20分。 17.数字显示温度计 基本要求: ⑴ 硬件设计:根据任务要求,完成单片机最小系统及其扩展设计,焊接电路板,组成功能完整的样机。 ⑵ 软件设计:根据温度测量及显示功能要求,完成控制软件的编写与调试; ⑶ 功能要求:至少利用3位数码管进行测量值的显示,温度测量范围:-50℃~100℃,测量误差≤0.1℃; ⑷ 设计说明书(论文):设计说明书应表明设计思想和所使用的设计方法,主要内容包括: ① 系统简介、整体功能说明、各功能模块说明(附图)及系统使用说明; ② 设计还需要改进的地方及设计的心得体会; ③ 参考文献:包括参考书、资料、网站等,按标准格式列出(可参考教材最后的参考文献引用格式); ④ 附件:系统总体原理图及源程序。 扩展功能: 根据实际情况自由添加附加功能,如设置温度的上下限报警功能,利用语音或声光报警等。附加一项完整的功能增加20分。 18.数字电子钟 基本要求: ⑴ 硬件设计:根据任务要求,完成单片机最小系统及其扩展设计,焊接电路板,组成功能完整的样机。 ⑵ 系统软件设计:根据数字电子钟系统功能,完成控制软件的编写与调试; ⑶ 基本功能:设计一个数字电子钟电路,能显示年、月、日和时、分、秒;通过功能键可以完成年、月、日与时、分、秒的调整和显示切换。 ⑷ 设计说明书(论文):设计说明书应表明设计思想和所使用的设计方法,主要内容包括: ① 系统简介、系统整体功能说明、各功能模块说明(附图)、系统使用说明; ② 设计还需要改进的地方及设计的心得体会; ③ 参考文献(包括参考书、资料、网站等,按标准格式列出); ④ 附件:系统总体原理图及源程序。 扩展功能: 根据实际情况自由添加附加功能,如万年历、秒表等功能。附加一项完整的功能增加20分。 19、基于单片机的音乐盒的设计 要求存储三首歌曲,可以进行歌曲的暂停播放前进后退等功能; 20、基于单片机的电热水器的设计 要求可以进行温度的设定,修改,报警,对热水器进行快速和慢速加热。 21、基于单片机的电子密码锁的设计 要求具有密码的输入、设定、修改和报警等功能。密码的输入功能,当密码输入正确之后,锁就打开,错误三次则报警。 智能电子钟(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;//退出时开定时器 } } //---------- 《单片机原理与应用》课程设计要求 一、目的: 本课程设计是《单片机原理与应用》课程的综合、设计性实验,作为课堂教学和课内正常实验的补充和提高。通过对《单片机原理与应用》课程的学习,学生已初步掌握51单片机的基本原理,以及并行口、串行口、中断、定时等基本原理及应用,课内实验主要以实验指导书为参考,难以充分发挥学生自主设计动手能力。通过《单片机原理与应用》课程设计,加强学生自主学习,巩固学习成果,提高学生综合应用单片机技术的实践能力和创造思维。为后续相关专业课程学习打好基础,培养学生专业知识的综合应用能力,与就业需求相接轨。 二、实验安排: 课程设计内容和要求的安排与讲解在课程设计之初进行。 上机机时安排:共32个课内机时,不足部分自行安排。 三、课程设计说明: 本次课程设计平台使用课程单片机开发实验箱(或学生自购单片机开发板)+实验室PC.,对于有特殊要求的学生,可以自行购买元件,焊接电路板,达到实验要求。 课程设计结束后,每个小组提交课程设计成果如下: 系统完成后,要求演示效果,演示时采用答辩形式,由各小组同学边演示边讲解思路。 课程设计报告一份,报告中可不包括源代码(程序代码刻录光盘)。 四、成绩评分内容 课设考勤情况 系统运行效果 系统讲解和问题回答情况 设计报告完成情况。 五、参考题目 以下题目根据难度,分为ABC三个等级。请自行选择。A级满分为100分。B级满分为90分。C级满分为80分。1.交通灯(C)要求利用实验箱上的LED灯模拟十字路口交通灯 (1)东西方向显示绿灯时,南北方向显示红灯,持续10秒钟后,绿灯变为黄灯并持续3秒钟; (2)然后东西方向显示红灯,南北方向显示绿灯,持续10秒钟后,绿灯变黄灯并持续3秒钟,如此反复。2.电子显示屏(B) 要求用一个按键控制实验箱上的点阵模块。按下按键后,在显示屏上轮流显示“文华学院”字样;再次按键后,显示屏上无任何显示。3.电子数字钟(A) 要求利用实验箱上的数码管模拟电子数字钟。显示时、分、秒,并且随时间跳变。在整点时,启动蜂鸣器。4.模拟量采集系统(A)要求利用实验箱上的传感器采集模拟量。(1)利用温度传感器采集温度,进行AD转换。(2)将采集到的温度显示在数码管上。5.双机串行通信(C)要求采用串行通信方式1,波特率为600,甲单片机交替发送55H, CCH,乙单片机接收,并将接收到的数据显示在数码管上。6.矩阵键盘(C)要求利用实验箱上的矩阵键盘输入1-8的任意字符,在数码管上依次显示出来。7.抢答器(B)要求制作一个4人抢答器。无人抢答时,4个灯跑马循环,谁先按下,相对应的灯亮起,同时蜂鸣器发声。8.波形发生器(B)要求产生方波、锯齿波、三角波、正弦波信号。(1)不同的波形用不同的符号显示在一个数码管上。(2)用4个数码管显示幅值。 9.音乐盒(A)要求按下实验箱上的键盘,利用蜂鸣器产生1-i各种音阶,演奏出不同的音乐。10.液晶屏显示(A) 要求控制LCD液晶屏,在屏幕上显示文字。并且操作按键时,屏幕上显示按键的编号。11.红外遥控设计(A)要求利用红外遥控,向单片机传输信号。当遥控按下具体数字时,单片机将数字显示在数码管上。12.学生自主设计(A) 学生自己提出设计思路,经老师认可后,开始进行设计,并达到预期目标。 《单片机课程设计》报告 题目: 专业年级: 学号: 姓名: 指导教师: 同组设计者: 年 月 日 《课程设计报告》主要内容 [设计题目] [设计要求] 描述选题目内容,简述要求完成的功能 [开发工具] 包括硬件和软件环境 [硬件设计] 1.电路原理图 2.电路设计说明 [软件设计] 1.软件设计流程 2.重要程序代码 [系统调试] 说明上机调试时碰到的问题及解决方法。[心得及体会] 此部分说明通过本次课程设计所得的收获及体会。[参考文献](至少3篇)第四篇:单片机原理及应用课程设计
第五篇:单片机课程设计要求及参考题目