《单片机原理》课程设计闹钟.doc_第1页
《单片机原理》课程设计闹钟.doc_第2页
《单片机原理》课程设计闹钟.doc_第3页
《单片机原理》课程设计闹钟.doc_第4页
《单片机原理》课程设计闹钟.doc_第5页
已阅读5页,还剩28页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

物理机电学院课程设计报告物理机电学院课程设计报告 课程名称 单片机原理 课程设计 专业班级 电子信息工程 2 班 学生姓名 学 号 指导教师 王清辉 翁国云 完成时间 2013 年 4 月 7 日 报告成绩 评阅意见 评阅教师 日期 数字时钟的设计 目录 第第 1 1 章章 设计任务设计任务与与要求要求 1 1 1 1 数字时钟的设计 1 第第 2 2 章章 方案的设计方案的设计与与论证论证 2 2 1 单片机型号的选择 2 2 2 按键的选择 2 2 3 显示器的选择 2 2 4 计时部分的选择 3 2 5 发音部分的设计 3 2 6 显示器驱动电路 3 2 7 电源的选择 3 第第 3 3 章章 硬件电路设计硬件电路设计 4 3 1 设计原理 4 3 2 AT89C51 单片机简介 4 3 3 键盘电路的设计 5 3 4 段码驱动电路 5 3 5 蜂鸣器驱动电路 6 3 6 电路总原理图 7 第第 4 4 章章 软件设计软件设计 8 4 1 主程序部分的设计 8 4 2 中断定时器的设置 8 4 3 闹钟子函数 10 4 4 计时函数 10 4 5 键盘扫描函数 12 4 6 时间和闹钟的设置 12 第第 5 5 章章 仿真过程与仿真仿真过程与仿真结结果果 14 第第 6 6 章章 安装与调试安装与调试 15 结论与心得结论与心得 19 参考文献参考文献 20 附附 录录 21 1 一 设计任务与要求 数字时钟的设计 1 能显示小时 分钟 秒 2 具有时间设置功能 扩展要求 具备闹钟功能 有声音提示 可开关闭显示 2 二 方案设计与论证 本设计应解决的主要问题有两大方面 即硬件电路设计和软件设计两大方 面 其中硬件电路部分又可分为四个模块 键盘模块 显示模块 计时模块和 发声模块 硬件电路部分致力于低成本 低功耗和易实现性 软件部分则应做 到代码的精简 准确 易读懂 最后通过硬软件的结合实现数字钟的精确计时 校时 三组闹钟设置和定时报警功能 2 1 单片机型号的选择 通过对多种单片机性能的分析 最终认为 AT89C51 是最理想的电子时钟开 发芯片 AT89C51 是一种带 4K 字节闪烁可编程可擦除只读存储器的低电压 高 性能 CMOS8 位微处理器 器件采用 ATMEL 高密度非易失存储器制造技术制造 与工业标准的 MCS 51 指令集和输出管脚相兼容 由于将多功能 8 位 CPU 和闪烁 存储器组合在单个芯片中 ATMEL 的 AT89C51 是一种高效微控制器 而且它与 MCS 51 兼容 且具有 4K 字节可编程序存储器和 1000 次擦写循环 数据保留时 间为 10 年 是最好的选择 2 2 按键的选择 方案一 4 4 矩阵式键盘 如果选择此方案 那么在修改时钟或设置闹铃 时间时就可以直接从键盘输入 方便 快捷 但程序较为复杂 方案二 独立式按键 如果设置过多按键 将会占用较多 I O 口 而且会 给布线带来不便 因此 此方案适用于按键较少的情况 如果选择此方案 由 于按键较少 在修改时间或设置闹铃时间时就不能直接输入 只能通过加或减 完成 稍为麻烦一些 但其程序简单 由于并不需要经常修改时间和设置闹铃时间 而且方案二的程序简单 按 键少 成本低 因此 选择方案二 2 3 显示器的选择 方案一 液晶显示器 如果选择此方案 将会降低系统的功耗 这样就可 以用电池供电 便于携带 但液晶显示器的驱动电路复杂 使用起来有一定的 3 难度 方案二 用数码管作为显示器 数码管的驱动电路简单 使用方便 如果选 择了此方案 那么在夜间看时间的时候就不需要有光源 非常方便 其缺点是 功耗较大 由于数码管使用起来较为方便 在夜间看时间也很方便 因此我选择了方 案二 2 4 计时部分的选择 如果使用时钟芯片 系统就不怕掉电且时间精确 但这种芯片比较贵 况 且 设计本系统主要是为了学习单片机程序的编写和调试以及设计硬件电路的 一些方法 因此采用软件的方法来计时而没有采用价格较高的时钟芯片 2 5 发音部分的设计 通过三极管放大后驱动蜂鸣器工作 再通过软件这时产生等时时间方波驱 动蜂鸣器发出间断嘀声 这样就可以省去硬件振荡电路 降低成本 2 6 显示器驱动电路 由于通过数码管公共及的电流较大且避免过多地使用分立元件 采用了一 片 74HC573 来驱动段码 用 P0 口作位码驱动 2 7 电源的选择 如果是用电池供电 就比较方便携带 但是本系统 采用了数码管作为显 示器 功耗较大 需要经常更换电池 况且 本系统的体积较大 即使使用电 池供电也不能随身携带 因此 用电池供电不大合适 所以用 5V 外部稳压电源 来供电 4 三 硬件电路设计 3 1 设计原理 系统原理图 图 3 1 系统原理图 3 2AT89C51 单片机简介 AT89C51 是一款单片封装的微控制器 适合于许多要求高集成度 低成本 的场合 可以满足多方面的性能要求 AT89C51 采用了高性能的处理器结构 指令执行时间只需 2 到 4 个时钟周期 6 倍于标准 51 单片机器件 AT89C51 集 成了许多系统级的功能 这样可大大减少元件的数目和电路板面积并降低系统 的成本 AT89C51 单片机内部主要有以下部件 8031CPU 振荡电路 总线控制 部件 中断控制部件 片内 Flash 存储器 并行 I O 接口 定时器和串行 I O 接口 5 1 2 3 4 P1 Header 4 1K R1 Res2 1K R2 Res2 1K R3 Res2 1K R4 Res2 VCC K1 AN K2 AN K3 AN K4 AN 图 3 2 AT89C51 单片机 3 3 键盘电路的设计 键盘采用 4 个独立按键配以 4 个上拉电阻实现对时钟和闹钟的设定及修改 图 3 3 键盘输入电路 3 4 段码驱动电路 由于通过数码管公共及的电流较大且避免过多地使用分立元件 采用了一 片 74HC573 来驱动段码 用 P0 口作位码驱动 6 LS1 Speaker VCC 1 2 P4 Header 2 Q1 2N3906 图 3 4 段码驱动器 74HC573 3 5 蜂鸣器驱动电路 发音部分是通过三极管放大驱动蜂鸣器工作 再通过软件这时产生等时时 间方波驱动蜂鸣器发出间断嘀声 这样就可以省去硬件振荡电路 降低成本 图 3 5 蜂鸣器驱动电路 7 3 6 电路总原理图 图 3 6 电路总原理图 8 四 软件设计 4 1 主程序部分的设计 程序部分主要采用了程序结构的模块化设计 避免了一些函数的不必要的 重复书写 使程序变得单间易懂 程序在执行时 主程序要须通过调用子函数 就可完成相应的功能 主程序流程图如下图 4 1 图 4 1 主程序流程图 4 2 中断定时器的设置 数字电子钟设计中主要使用定时器 T0 中断 ET0 利用 ET0 中断进行计时时 间的自增 从而实现计时功能 AT89C51 有两个通用定时 计数器 两者均可配置为定时器或事件计数器 另外增加了定时器 T0 T1 溢出时 T0 T1 脚自动翻转的功能选项 用作 定时 器 功能时 每经过一个机器周期 寄存器值加 1 用作 计数器 功能时 寄存器在对应的外部输入管脚 T0 T1 上每发生一次 1 到 0 的跳变时加 1 使用 该功能时 外部输入每个机器周期被采样一次 图 4 2 定时器工作原理 1 设计中采用了中断方式 1 作为定时中断 其定时计数初值的设置可由以下 公式计算得到 中断服务流程图如下图 4 3 cy T t X 16 2 9 X 计数初值 t 定时时间 机器周期 1 cy T 图 4 3 中断服务流程图 4 3 闹钟子函数 闹钟时间的判别主要是通过设定时间与实时时间对逐位对比确定是否进行 闹铃 图 4 4 闹铃判断流程图 4 4 计时函数 计时函数部分 主要是通过单片机定时中断来计时 复产生一次中断标志 位 flag 加 1 当 flag 加满 20 次为 1 秒 然后把 flag 清 0 把秒存储单元加 1 10 然后再依次判断分 时 其流程图如下图 4 5 11 图 4 5 计时流程图 4 5 键盘扫描函数 这些函数主要是判断是否有按键按下 并根据相应按键按下的情况调用相 关函数执行 其相关流程图如下图 4 6 12 图 4 6 键盘扫描流程图 4 6 时间和闹钟的设置 此部分主要是通过判断 cnt 在不同值时通过调用加 1 减 1 子函数对时间 和闹钟的时 分 秒进行设置 在闹钟设置时 判断按键 S4 按下情况我 进行 闹钟的开启与关闭 相关流程图如下图 4 7 13 图 4 7 时间 闹钟设置流程图 五 仿真过程与仿真结果 此电子闹钟设计是利用 Proteus 仿真软件进行仿真 基本上实现了课程设 计要求实现的功能 硬件部分设置了的三个按键 S1 S2 S3 S4 当按键 S1 第一次按下时 停止计时进入闹钟 1 的秒设置 当按键 S1 第二 第三次按下时 分别进入闹钟 1 的分设置和时设置 当按 S1 第四 第五 第六次按下时分别进入闹钟 2 的 秒 分 时设置 当按 S1 第七 第八 第九次按下时分别进入闹钟 3 的秒 分 时设置 当按 S1 第十 第二一 第十二次按下时分别进入时间的秒 分 时设置 在 S1 按下的各阶段 可用按键 S2 S3 进行时间和闹铃时间的时 分 秒进行加减设置 当按键 S1 第十三次按下时恢复到时间显示功能 当显示的时 间和定时设置的时间一致时 蜂鸣器发出等时间断蜂鸣声 闹铃时间设置为 60 秒 在各个闹钟设置阶段 如果有 S4 按下 则相应闹钟功能关闭或开启 如在 闹铃时有 S4 按下则提前停止闹铃 图 5 1 proteus 仿真图 六 安装与调试 首先制作电路板 在 PROTEL DXP 软件上画出实训原理图 接着导入制作 PCB 电路板 最后经打印 热转印 腐蚀 打孔 最后做出电路板 1 步骤如下 14 第一步 利用一个能生成图像的软件生成一些图像文件 这里使用版本为 Altium2004 组织 SCH 文件 再利用网络表生成相应 PCB 图 可自动布线 也可 手工布线 接着画 PCB 图 以备打印 第二步 将 PCB 图打印到热转印纸上 第三步 将打印好 PCB 的转印纸平铺在覆铜板上 准备转印 第四步 用热应机加温将转印纸上黑色油墨粉压在覆铜板上形成高精度的 抗腐 第五步 热应机加温加压成功转印后的效果 第六步 准备好三氯化铁溶液进行腐蚀 第七步 腐蚀结束 清洗干净 晾干之后进行打孔 第八步 将焊盘铣刀装到台钻上 清理出焊盘部分 剩下的部分用于阻焊 第九步 安装所需预定原件并焊接好 2 硬件调试 拿到电路板后 首先要检查加工质量 在确保没任何质量问题时再安装元 器件 元器件在安装前要足逐一检查 用万用表测其数值 看是否与所需相同 完成焊接后应先空载上电 芯片座不插芯片 并检查各引脚的电位是否正确 若一切正常 方可在断电的情况下将芯片插入 再次检查各引脚的电位及其逻 辑关系 将万用表的探针放到单片机接电源的引脚上检测一下 看是否符合要 求 在调试时我遇到了一个问题 用 STC 下载器无法将程序下载到单片机中 经检查 是 COM 端口和波特率选的不正确 应更改 STC 下载器的 COM 端口使之 与电脑的 COM 端口相对应 波特率改为 9600 115200 即可下载成功 Pcb 图 15 图 6 1 PCB 图 学号显示界面 16 图 6 2 开机学号图 时间显示界面 图 6 3 时钟运行图 闹钟设置界面 17 图 6 4 闹钟设置图 七 结论与心得 做了一周的课程设计 有很多的心得体会 有关于单片机的 也有关 于模电数电等基础科目的 18 因为单片机已经很久没复习 刚拿到题目 不知道从哪入手 后来通 过对书本的回顾 加深了对单片机的记忆 有些知识会迁移和联系模电数 电 课堂教学考虑到大多数同学的需求 主要强调 基本 基本知识 基本理论 基本方法 基本技能 而这次设计正是为我们提供了一个深入 学习 探索的机会 成为课堂教学的有益补充 我们正面临就业问题 这 次课设给了我们一个机会去试验 单片机理论的学习是为课程的设计作准备的 但有时学习的理论也解 决不了实践中的问题 实践中获得的知识能让我对单片机的知识有更好的 认识和理解 虽然这次的课程设计我参考了一些文献资料 没有做到创新 但在对程序的读写过程中我明白了许多 这次课程设计的最大收获是只有 把理论用到实践中我们才能真正掌握好所学知识 八 参考文献 1 李全利 迟荣强 单片机原理及接口技术 M 北京 高等教育出版社 2004 2 凌玉华 单片机原理及应用系统设计 M 长沙 中南大学出版社 2006 3 张道德 单片机接口技术 C51 版 M 北京 中国水利水电出版社 2007 4 王幸之 钟爱琴 王雷 王闪 AT89 系列单片机原理与接口技术 M 北京 北 京航空航天大学出版社 2004 5 何立明 单片机应用系统设计 M 北京 北京航空航天大学出版社 1990 19 6 陈光东 单片机微型计算机原理与接口技术 M 武汉 华中理工大学出版社 1998 附 录 8 位数据管电子时钟闹钟设计 10 电本 2 班 谢伟军 2010041631 20 头文件 include include 宏定义 define uchar unsigned char define uint unsigned int 位声明 sbit key1 P3 7 功能键 sbit key2 P3 6 加 1 sbit key3 P3 5 减 1 sbit key4 P3 4 关闹钟 sbit fmq P3 3 蜂鸣器 数码管显示的数值 uchar code table 0 xc0 0 xf9 0 xa4 0 xb0 0 x99 0 x92 0 1 2 3 4 5 0 x82 0 xf8 0 x80 0 x90 0 xbf 0 x0ff 6 7 8 9 灭 uchar code DSY CODE 0 xf9 0 xb0 0 x82 0 xf9 0 x99 0 xc0 0 xc0 0 xf9 学号数值 函数声明 void jia 加 1 void jian 减 1 数组定义 数组内含有 8 个数值 uchar table1 8 table2 8 table3 8 table4 8 时间显示初始值 uchar shi 12 fen 0 miao 0 定义全局变量 uchar shi1 fen1 miao1 shi2 fen2 miao2 uchar shi3 fen3 miao3 shi4 fen4 miao4 uchar yimiao fmqpinlu wss key1cishu tiaoshi alm1 alm2 alm3 xuehao 1 秒 蜂鸣频率 位闪 key1 次数 调时 闹 1 闹 2 闹 3 学号 uint fmq60s 响 60s 延时函数 用于动态扫描数码管 void delay uchar i uchar x y for x i x 0 x for y 120 y 0 y 初始化函数 void init TMOD 0 x01 工作方式 1 21 TH0 0 x3c 定时时间为 50ms 65536 50000 256 TL0 0 x0b0 65536 50000 256 ET0 1 打开定时器 EA 1 开总中断 TR0 1 启动定时器 显示子函数 用于显示时间数值 void display uchar i j if key1cishu 10 wss 0 table1 0 miao 10 分离秒的个位与十位 table1 1 miao 10 else table1 0 table1 1 11 两位灭 if key1cishu 11 wss 0 table1 3 fen 10 分离分的个位与十位 table1 4 fen 10 else table1 3 table1 4 11 if key1cishu 12 wss 0 table1 6 shi 10 分离时的个位与十位 table1 7 shi 10 else table1 6 table1 7 11 table1 2 table1 5 10 j 0 x7f for i 0 i 7 i 从秒到时的扫描 P0 j P1 table table1 i 显示数值 delay 10 j cror j 1 循环右移 显示子函数 用于显示定时 1 时间 void display1 uchar i j if alm1 0 if key1cishu 1 wss 0 table2 0 miao1 10 以下含义同上 table2 1 miao1 10 22 else table2 0 table2 1 11 if key1cishu 2 wss 0 table2 3 fen1 10 table2 4 fen1 10 else table2 3 table2 4 11 if key1cishu 3 wss 0 table2 6 shi1 10 table2 7 shi1 10 else table2 6 table2 7 11 else table2 0 table2 1 table2 3 table2 4 table2 6 table2 7 10 table2 2 table2 5 10 j 0 x7f for i 0 i 7 i P0 j P1 table table2 i delay 10 j cror j 1 显示子函数 用于显示定时 2 时间 void display2 uchar i j if alm2 0 if key1cishu 4 wss 0 table3 0 miao2 10 以下含义同上 table3 1 miao2 10 else table3 0 table3 1 11 if key1cishu 5 wss 0 table3 3 fen2 10 table3 4 fen2 10 else table3 3 table3 4 11 if key1cishu 6 wss 0 23 table3 6 shi2 10 table3 7 shi2 10 else table3 6 table3 7 11 else table3 0 table3 1 table3 3 table3 4 table3 6 table3 7 10 禁用闹钟 table3 2 table3 5 10 禁用闹钟 j 0 x7f for i 0 i 7 i P0 j P1 table table3 i delay 10 j cror j 1 显示子函数 用于显示定时 3 时间数值 void display3 uchar i j if alm3 0 if key1cishu 7 wss 0 table4 0 miao3 10 分离秒的个位与十位 table4 1 miao3 10 else table4 0 table4 1 11 if key1cishu 8 wss 0 table4 3 fen3 10 分离分的个位与十位 table4 4 fen3 10 else table4 3 table4 4 11 if key1cishu 9 wss 0 table4 6 shi3 10 分离时的个位与十位 table4 7 shi3 10 else table4 6 table4 7 11 else table4 0 table4 1 table4 3 table4 4 table4 6 table4 7 10 table4 2 table4 5 10 j 0 x7f 从秒到时的扫描 24 for i 0 i 20 判断是否到一秒 wss wss yimiao 0 到了 则标志位清零 if tiaoshi 0 miao4 秒加 1 if miao4 59 判断秒是否到 60s miao4 0 到了 则清零 fen4 分加 1 if fen4 59 以下含义同上 fen4 0 shi4 if shi4 23 shi4 0 else miao 秒加 1 if miao 59 判断秒是否到 60s miao 0 到了 则清零 fen 分加 1 if fen 59 以下含义同上 fen 0 shi if shi 23 shi 0 25 键盘扫描子函数 void key scan if key1 0 while key1 防止掉显 if key1cishu 1 key1cishu 2 key1cishu 3 display1 if key1cishu 4 key1cishu 5 key1cishu 6 display2 if key1cishu 7 key1cishu 8 key1cishu 9 display3 if key1cishu 0 key1cishu 10 key1cishu 11 key1cishu 12 key1cishu 13 display key1cishu 记下按键 key1 按下的次数 if key1cishu 10 fen4 fen shi4 shi tiaoshi if key1cishu 13 key1cishu 0 if tiaoshi 1 miao miao4 fen fen4 shi shi4 tiaoshi 0 if key2 0 判断 key2 是否按下 while key2 防止掉显 if key1cishu 1 key1cishu 2 key1cishu 3 display1 if key1cishu 4 key1cishu 5 key1cishu 6 display2 if key1cishu 7 key1cishu 8 key1cishu 9 display3 if key1cishu 0 key1cishu 10 key1cishu 11 key1cishu 12 key1cishu 13 display jia 26 if key3 0 判断 key3 是否按下 while key3 防止掉显 if key1cishu 1 key1cishu 2 key1cishu 3 display1 if key1cishu 4 key1cishu 5 key1cishu 6 display2 if key1cishu 7 key1cishu 8 key1cishu 9 display3 if key1cishu 0 key1cishu 10 key1cishu 11 key1cishu 12 key1cishu 13 display jian 调用减 1 子函数 if key4 0 判断 key4 是否按下 while key4 防止掉 if key1cishu 1 key1cishu 2 key1cishu 3 alm1 alm1 display1 if key1cishu 4 key1cishu 5 key1cishu 6 alm2 alm2 display2 if key1cishu 7 key1cishu 8 key1cishu 9 alm3 alm3 display3 if key1cishu 0 key1cishu 10 key1cishu 11 key1cishu 12 key1cishu 13 display 加 1 子函数 void jia if key1cishu 1 判断 key1 按下的次数是否为 1 miao1 是 则秒加 1 if miao1 59 判断秒是否大于 60 是 则秒清零 miao1 0 if key1cishu 2 以下含意同上 fen1 if fen1 59 fen1 0 27 if key1cishu 3 shi1 if shi1 23 shi1 0 if key1cishu 4 miao2 if miao2 59 miao2 0 if key1cishu 5 fen2 if fen2 59 fen2 0 if key1cishu 6 shi2 if shi2 23 shi2 0 if key1cishu 7 miao3 if miao3 59 miao3 0 if key1cishu 8 fen3 if fen3 59 fen3 0 if key1cishu 9 shi3 if shi3 23 shi3 0 if key1cishu 10 miao if miao 59 miao 0 tiaoshi if key1cishu 11 fen if fen 59 28 fen 0 tiaoshi if key1cishu 12 shi if shi 23 shi 0 tiaoshi 减 1 子函数 void jian if key1cishu 1 判断 key1 按下的次数是否为 1 是则秒减 1 miao1 if miao1 255 判断秒是否减到 255 是 则秒置 59 miao1 59 if key1cishu 2 以下含意同上 fen1 if fen1 255 fen1 59 if key1cishu 3 shi1 if shi1 255 shi1 23 if key1cishu 4 miao2 if miao2 255 miao2 59 if

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论