定时闹钟_C51单片机课程设计.doc_第1页
定时闹钟_C51单片机课程设计.doc_第2页
定时闹钟_C51单片机课程设计.doc_第3页
定时闹钟_C51单片机课程设计.doc_第4页
定时闹钟_C51单片机课程设计.doc_第5页
免费预览已结束,剩余29页可下载查看

下载本文档

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

文档简介

题目 定时闹钟 目录目录 一 一 概述概述 1 1 1 设计目的及意义设计目的及意义 1 1 2 设计任务设计任务 1 1 3 设计系统的主要功能设计系统的主要功能 1 二 二 系统总体方案及硬件设计系统总体方案及硬件设计 2 2 1 系统总体方案系统总体方案 2 2 2 系统设计总框图系统设计总框图 2 2 3 硬件设计硬件设计 2 2 3 1 单片机最单片机最小小系系统统设计设计 2 2 3 2 报警模块报警模块设设计计 6 2 3 3 显示模块设显示模块设计计 7 2 3 4 调时模调时模块设计块设计 9 三 三 软件设计软件设计 10 3 1 主程序流程图主程序流程图 10 3 2 定时中断子程序流程图定时中断子程序流程图 11 3 3 程序程序设设计计 11 四 四 系统的仿真与调试系统的仿真与调试 12 4 1 proteusproteus 软件仿真软件仿真 12 4 2 系统的调试系统的调试 11 五 设计总结与体会五 设计总结与体会 13 参考文献参考文献 13 附录附录 1 1 源程序代码 源程序代码 14 附录附录 2 2 系统原理图 系统原理图 24 0 一 一 概述概述 1 1 设计设计目的及意义目的及意义 学习和巩固单片机技术 电子技术 传感器技术及智能仪器等知识 使对已学过的 基础知识能有更深入的理解 并融会贯通 学会独立思考 独立工作 培养一定的自学 能力和独立分析问题能力 以及增强系统地运用已学理论知识去解决实际问题的能力 同时培养成良好的科学态度和严谨的设计习惯 1 2 设计任务设计任务 完成所选题目的分析与设计 达到技术性能要求 提交正式课程设计总结报告一份 本文设计的定时闹钟的核心模块采用 AT89C51 芯片 时 分 秒用 6 位 LED 数码管 显示 在电路中通过四个按键 S1 S2 S3 和 S4 来进行定时 调时和复位 定时时间到 通过蜂鸣器发出报警声 1 3 设计系统的主要功能设计系统的主要功能 1 能显示 时时 分分 秒秒 2 能够设置定时时间 修改定时时间 3 定时时间到能发出报警声 二 二 系统总体方案及硬件设计系统总体方案及硬件设计 2 1 系统总体方案系统总体方案 1 由于 LED 显示器相对于其它显示器 如 LCD 显示器 来说其价格要便宜许多 而且亮度更高 耐温范围较广 所以采用 6 位数码管来显示 时时 分分 秒秒 2 时间的定时用单片机内部时钟电路 在一定的时间内能使其误差较小 如经过一 年其误差才仅有数秒 修改时间和定时用手动按键控制 报警声通过蜂鸣器发出 这样 可以使得硬件电路设计较为简单 且软件设计也易于实现 并能够降低成本 3 核心模块采用 AT89C51 单片机 功能强 通用性好 价格便宜 且易于控制 加上外围器件 数码管 排阻 按键和蜂鸣器 和应用程序 便构成了相应的应用系统 1 2 2 系统设计总框图系统设计总框图 如图 如图 1 所示 所示 图 1 定时闹钟系统设计总框图 2 3 硬件设计硬件设计 2 3 1 单片机最小系统设计 1 芯片 AT89C51 因为 51 单片机是各单片机中最为典型和最有代表性的一种 在 20 世纪 70 年代问 世以来 以其极高的性能价格比 受到人们的重视和关注 应用广泛 发展很快 推广 率和市场利润率较高 且适合于本设计系统中 CPU 内存和 I O 等资源的要求 所以本设 计采用 AT89C51 作为核心控制芯片 AT89C51 是一种带 4KB 闪烁可编程可擦除只读存储器 FPEROM Falsh Programmable and Erasable Read Only Memory 的单片机 可稳定地工作于 5V 的电源下 其集成度高 功能强 能耗低 通用性好 价格便宜 该器件采用 ATMEL 高密度非易失 存储器制造技术制造 与工业标准的 MCS 51 指令集和输出管脚相兼容 由于将多功能 8 位 CPU 和闪烁存储器组合在单个芯片中 ATMEL 的 AT89C51 是一种高效微控制器 其 组合而成的配件产品在日常生活的使用过程中非常方便 简单且实用 深受着广大消费 者的喜爱 AT89C51管脚说明如下 供电电压端 CCV 接地端 GND P0口 P0口为三态双向口 能带8个TTL电路 有两种功能 第一功能是一个8位漏极 开路型的双向I O口 这时P0口可看做数据总线 第二功能是在访问外部存储器时 分时 提供低8位地址和8位双向数据总线 这时先用做地址总线再用做数据总线 在FIASH编程 时钟电路 和复位电路 键盘 按钮 单片机 AT89 C51 蜂鸣器 数 码 管 显 示 2 时 P0 口作为原码输入口 当FIASH进行校验时 P0输出原码 此时P0外部必须被拉高 P0口内部无上拉电阻 作为I O口使用时 必须外接上拉电阻 P1口 P1口是一个内部带上拉电阻的8位准双向I O口 使用前有一个准备动作 负 载能力为4个TTL电路 在FLASH编程和校验时 P1口作为第八位地址接收 P2口 P2口为一个内部带上拉电阻的8位准双向I O口 P2口缓冲器可接收 输出4个 TTL门电流 P2口当用于外部程序存储器或16位地址外部数据存储器进行存取时 P2口输 出地址的高八位 P2口在FLASH编程和校验时接收高八位地址信号和控制信号 P3口 P3口是一个内部带上拉电阻的准双向I O口 可接收输出4个TTL门电流 同时 为闪烁编程和编程校验接收一些控制信号 P3口的8个引脚都有各自的第二功能 可作为 AT89C51的一些特殊功能口 如表1所示 表1 P3口第二功能 P3口引脚第二功能注释 P3 0RXD串行输入口 P3 1TXD串行输出口 P3 2 0INT 外部中断0输入 P3 3 1INT 外部中断1输入 P3 40T定时 计时器0外部输入 P3 51T定时 计时器1外部输入 P3 6 WR 外部数据存储器写信号 P3 7 RD 外部数据存储器读信号 为复位信号输入端 当振荡器复位器件时 要保持RST脚两个机器周 PDRST VRST 期 24个时钟周期 以上的高电平时间 为内部的备用电源输入端 当主电源PDVRAM 一旦发生断电或电压降到一定值时 可通过为单片机内部提供电源 以保护CCVPDVRAM 片内中的信息不丢失 使上电后能继续正常运行 RAMCCV 为地址锁存允许信号 当访问外部存储器时 用来锁存 ALE PROGALEALE 口送出的低8位地址信号 在编程期间 用于输入编程脉冲 在平时 0PFLASHPROG 端以不变的频率周期输出正脉冲信号 此频率为振荡器频率的1 6 因此它可用作对ALE 3 外部输出的脉冲或用于定时目的 然而要注意的是 每当用作外部数据存储器时 将跳 过一个脉冲 如想禁止的输出可在的8EH地址上置0 此时 只有在ALEALESFRALE 执行MOVX MOVC指令时才起作用 另外 该引脚被略微拉高 如果微处理器在外部 执行状态禁止 置位无效 ALE 外部程序存储器的读选通信号 在由外部程序存储器取指期间 产生PSENPSEN 负脉冲做为外部的选通信号 每个机器周期两次有效 但在访问外部数据存ROMPSEN 储器时 不会产生有效的信号 可驱动8个门输入端 PSENPSENLSTTL 访问外部程序存储器控制信号 当保持低电平时 则在此期间只访问 PPEA VEA 外部程序存储器 0000H FFFFH 不管是否有内部程序存储器 注意加密方式1时 将内部锁定为 当端保持高电平时 访问程序存储器有两种情况 一是EARSTEACPU 访问的地址空间在0到4KB范围内 访问片内程序存储器 二是访问的地址超出4KB时 CPU 将自动执行外部程序存储器的程序 在编程期间 此引脚也用于施加12V编CPUFLASH 程电源 PPV 晶体振荡电路的反向器输入端 1XTAL 晶体振荡电路的反向器输出端 2XTAL 2 时钟电路 单片机的时钟产生方法有两种 内部时钟方式和外部时钟方式 本系统中 AT89C51 单片机采用内部时钟方式 最常用的内部时钟方式是采用外接晶体和电容组成的并联谐 振回路 振荡晶体可在 1 2MHz 12MHz 之间 电容值无严格要求 但电容取值对振荡频 率输出的稳定性 大小和振荡电路起振速度有少许影响 一般可在 20pF 100pF 之间取 值 AT98C51 单片机的时钟电路如图 3 所示 4 图 3 AT98C51 单片机的时钟电路 3 复位电路 复位是单片机的初始化操作 单片机系统在上电启动运行时 都需要先复位 其作 用是使 CPU 和系统中其他部件都处于一个确定的初始状态 并从这个状态开始工作 单 片机的外部复位电路有上电自动复位和按键手动复位两种 本系统中 AT89C51 单片机采 用上电加按键手动复位电路 如图 4 所示 S5 1K R1 10K R2 10uF C3 VCC RST 9 AT89C51 图 4 AT89C51 单片机的复位电路 2 3 2 报警模块设计 为实现设计的定时闹钟系统在定时时间到时发出报警声 采用蜂鸣器作为报警发声 装置 在本设计中有多种报警声可供选择 可选择报警时播放音乐 报警电路设计如图 5 所示 AT89C51 XTAL2 XTAL1 JZ 12M C1 30PF C2 30PF 5 1K VCC FM 1 2 SPEAKER PNP 图 5 定时闹钟系统的报警电路 2 3 3 显示模块设计 本系统中采用6位LED数码管显示时 分 秒 用两片74HC573分别对段码和位码进 行锁存 实现动态扫描方式显示 节省单片机I O口资源 简化硬件电路 1 LED 显示器 单片机中通常使用 8 段 LED LED 是发光二极管显示器的缩写 LED 显示器由于结 构简单 价格便宜 体积小 亮度高 电压低 耐温范围广 可靠性高 寿命长 响应 速度快 颜色鲜艳 配置灵活 与单片机接口方便而得到广泛应用 LED 显示器是由若 干个发光二极管组成显示字段的显示部件 当发光二极管导通时 相应的一个点或一个 笔划发光 控制不同组合的二极管导通 就能显示出各种字符 LED 显示器有多种形式 如 米 字型显示器 点阵显示器和七段数码显示器等 在本系统中采用八段数码显 示器 因为共阴极的 LED 数码管它的驱动电流是分开的 在单片机进行动态扫描的时候不会 影响彼此的电流 故本系统中的 6 位 LED 数码管均用共阴极的数码管 2 74HC573 芯片 特点 三态总线驱动输出 置数全并行存取 缓冲控制输入 使能输入有改善抗扰度的 滞后作用 原理说明 74HC573 的八个锁存器都是透明的 D 型锁存器 当使能 G 为高时 Q 输出将随数据 D 输入而变 当使能为低时 输出将锁存在已建立的数据电平上 输 出控制不影响锁存器的内部工作 即老数据可以保持 甚至当输出被关闭时 新的数据 也可以置入 这种电路可以驱动大电容或低阻抗负载 可以直接与系统总线接口并驱动 总线 而不需要外接口 特别适用于缓冲寄存器 I O 通道 双向总线驱动器和工作寄存 器 6 74HC573 引脚说明 OE 3 态输出使能输入 低电平有效 D0 D7 数据输入端 Q0 Q7 3 态锁存输出 LE 锁存使能输入 GND 接地 VCC 电源电压 74HC573 的引脚图 逻辑图及真值表如下 E 1 D0 2 D1 3 D2 4 D3 5 D4 6 D5 7 D6 8 D7 9 GND 10 L 11 Q0 12 Q1 13 Q2 14 Q3 15 Q4 16 Q5 17 Q6 18 Q7 19 VCC 20 74HC573 图 6 74HC573 引脚图 图 7 74HC573 逻辑图 表 2 74HC573 真值表 7 OELEDQ HXXZ LLXNO CHANGE LHLL LHHH 3 显示电路 将两片 74HC573 的数据输入端 D0 D7 都分别与 AT89C51 单片机的 P0 0 P0 7 和 RESPACK 8 排阻的 2 9 引脚连接 两片 74HC573 的锁存使能端 L 分别接至 P2 6 和 P2 7 74HC573 的输出端接至数码管 2 3 4 调时模块设计 本系统要进行时间的调整和定时 因此用 4 个手动按键对其进行控制 键盘电路设 计如图 9 所示 当按下时间调整键 S1 时 系统可进行时间调整的小时设置 当再按下 S1 时 可进行时间调整的分钟设置 再按下 S1 时 可进行时间调整的秒钟设置 再次按下 S1 时 系统恢复正常时间显示 当按下设置定时键 S2 时 系统可进行闹钟定时时间的小 时设置 此时 S1 作为报警声选择键 可通过 S1 选择报警声 再按下 S2 时 可进行定时 时间的分钟设置 此时也可通过 S1 选择报警声 第三次按下 S2 时 系统恢复正常时间 显示 此时 S1 恢复为时间调整按键 设置时间时都通过加时按键 S3 和减时按键 S4 进行 控制 S1 S2 S3 S4 S1 S2 S3 S4 图 9 定时闹钟系统的键盘电路 8 三 三 软件设计软件设计 3 1 主程序流程图主程序流程图 开 始 初始化 显示时间 S1 按下 调整时间 减时调整 加时调整 Y Y Y S2 按下 N N S4 按下 S3 按下 N N Y S1 按下 选择报警声 S3 按下 定时加时 Y Y N N N 9 图 10 主程序流程图 3 2 定时中断子定时中断子程序流程图程序流程图 S4 按下 定时减时 Y 开 始 蜂鸣器响 分变量加 1 秒变量清 零 秒变量加 1 1 秒到 60 秒到 定时到 60 分到 时变量加 1 分变量清 零 24 时到 时变量清零 Y N N N Y Y Y N Y N 10 图 11 定时中断子程序流程图 3 3 程序程序设计设计 根据程序流程图采用汇编语言进行程序设计 其中主程序可根据系统实现的功能划 分为以下几个子程序模块 程序源代码见附录 1 1 时间调整子程序模块 2 闹钟时间设置子程序模块 3 蜂鸣器报警子程序模块 4 数码管显示子程序模块 结 束 11 四 四 系统的仿真与调试系统的仿真与调试 4 1 proteus 软件仿真软件仿真 使用 WAVE 软件编辑程序 在仿真设置中选择 E6000 T 仿真器 选择 POD 51 仿真 头 为方便系统在 proteus 中进行仿真 选择了 7SEG MPX6 CC BLUE 数字显示器 并改 变了一些 I O 连接 然后选择 80C51CPU 进行汇编程序编辑 经过仿真得知 通过 S1 S2 S3 和 S4 四个按键 可以对时间进行修改和闹钟的设置 定时时间到能发出报警 声 系统非常完善地实现了所有要求的功能 4 2 系统的调试系统的调试 将所编程序在 KEIL 软件里进行编译 编译正确后生成 HEX 文件 在 AT89C51 芯 片中加载此文件后 对完成的实物作品进行调试 系统运行后 能准确的显示时间 并 能通过 S1 S2 S3 和 S4 四个按键对时间进行修改和闹钟定时时间的设置 定时时间到 能发出报警声 12 五 设计总结与体会五 设计总结与体会 设计是培养学生综合运用所学知识 发现 提出 分析和解决实际问题 锻炼实践 能力的重要环节 是对学生实际工作能力的具体训练和考察过程 随着科学技术发展的 日新日异 单片机已经成为当今计算机应用中空前活跃的领域 在生活中可以说得是无 处不在 作为二十一世纪的大学生来说掌握单片机的开发技术是十分重要的 通过本次单片机原理及应用设计使我充分认识到了设计的重要性和必要性 本次设 计使我对已学过的基础知识有了更深入的理解 学会了独立思考 独立工作以及对应用 所学基本理论分析和解决实际问题的能力有了很大的提高 另外 本次设计使我的实际 操作技能得到了训练 同时也进一步培养了我严谨的科学作风 回顾起此次单片机课程设计 从选题到定稿 从理论到实践 可以说得是有苦有甜 但是从中却学到很多很多的的东西 不但巩固了以前所学过的知识 而且对单片机原理 课外知识也得到了拓展 做的过程中 开始的确遇到了不少困难的问题 比如说芯片管 脚不熟悉怎么放置等 同时在这过程中也发现了自己的许多不足之处 对以前所学过的 知识理解得不够深刻 掌握得不够牢固 通过单片机设计之后 我不仅加深了对单片机理论的理解 将理论很好地应用到实 际当中去 而且我们还学会了如何去培养创新精神和严谨的科学作风 从而不断地战胜 自己 超越自己 更重要的是 我在这一设计过程中 学会了坚持不懈 绝不放弃 参考文献参考文献 1 张毅刚 单片机原理及应用 北京 高等教育出版社 2003 2 王幸之 单片机应用系统电磁干扰与抗干扰技术 北京 北京航空航天大学出版社 2006 3 何立民 单片机应用技术大全 北京 北京航空航天大学出版社 1994 4 张毅刚 单片机原理及接口技术 哈尔滨 哈尔滨工业大学出版社 1990 5 谭浩强 单片机课程设计 北京 清华大学出版社 1989 6 余锡纯 单片机原理与接口技术 西安 电子科技大学出版社 2003 7 Mak S Radford D Design considerations for implementation of large scale automatic meter reading syste ms Power Delivery IEEE Transactions on Volume 10 Issue 1 Jan 1995 13 附录附录 1 1 源程序代码 源程序代码 1 1 汇编语言程序 汇编语言程序 引脚及变量定义 S1 BIT P3 2 按键1 S2 BIT P3 3 按键2 S3 BIT P3 4 按键3 S4 BIT P3 5 按键4 SPEAKER BIT P2 0 蜂鸣器 DULA BIT P2 6 段选锁存器锁存端 WELA BIT P2 7 位选锁存器锁存端 HOUR1 EQU 20H 小时 MIN1 EQU 21H 分钟 SEC1 EQU 22H 秒钟 HOUR2 EQU 23H 小时定时变量 MIN2 EQU 24H 分钟定时变量 A1 EQU 25H 显示变量 B1 EQU 26H C1 EQU 27H D1 EQU 28H E1 EQU 29H F1 EQU 30H A2 EQU 31H B2 EQU 32H C2 EQU 33H D2 EQU 34H NUM1 EQU 35H 按键计数变量1 NUM2 EQU 36H 按键计数变量2 COUNT EQU 37H 计时变量 ORG 0000H LJMP MAIN ORG 000BH LJMP TIME MAIN PROGRAM ORG 1000H MAIN MOV SP 50H START MOV HOUR1 00H 初始化时间变量 MOV MIN1 00H MOV SEC1 00H MOV HOUR2 01H 初始化定时变量 MOV MIN2 01H MOV COUNT 00H 初始化计时变量 14 MOV NUM1 00H 初始化按键计数变量 MOV NUM2 00H MOV TMOD 01H 16位计数器 MOV TH0 0D8H 赋初值 MOV TL0 0EFH SETB ET0 中断允许 SETB EA SETB TR0 启动T0 LOOP MOV A NUM2 JNZ LOOP1 A不为0时转移 LCALL DISPLAY1 显示当前时间 LCALL KEYTIME 调用时间调整子程序 LCALL SETTIME 调用定时设置子程序 LJMP LOOP LOOP1 LCALL DISPLAY2 显示定时时间 LCALL KEYTIME 调用时间调整子程序 LCALL SETTIME 调用定时设置子程序 LJMP LOOP SETTIME PROGRAM SETTIME 定时设置子程序 LL1 JB S2 LL3 P3 3 1时转移 LCALL DELAY5 延时5MS MSTOP1 JB S2 LL3 P3 3 1时转移 MOV C S2 JNC MSTOP1 P3 3 0时转移 INC NUM2 按键计数变量加1 MOV A NUM2 CJNE A 1 LL2 判断按键计数是否为1 CLR TR0 定时器中断关闭 LL2 CJNE A 3 LL 判断按键计数是否为3 MOV NUM2 0 按键计数变量清0 SETB TR0 定时器中断打开 LL LCALL DISPLAY2 显示定时时间 LL3 MOV A NUM2 JZ LL5 A为0时转移 JB S3 KK2 P3 4 1时转移 LCALL DELAY5 延时5MS KK1 JB S3 KK2 P3 4 1时转移 MOV C S3 JNC KK1 P3 4 0时转移 MOV A NUM2 CJNE A 1 MM1 判断按键计数是否为1 INC HOUR2 小时定时变量加1 15 MOV A HOUR2 CJNE A 24 MM1 判断小时定时变量是否为24 MOV HOUR2 0 小时定时变量为24则复位0 LCALL DISPLAY2 显示定时时间 MM1 LCALL DISPLAY2 显示定时时间 MOV A NUM2 CJNE A 2 KK2 判断按键计数是否为2 INC MIN2 分钟定时变量加1 MOV A MIN2 CJNE A 60 KK2 分钟定时变量是否为60 MOV MIN2 0 分钟定时变量为60则复位0 LCALL DISPLAY2 显示定时时间 KK2 LCALL DISPLAY2 显示定时时间 JB S4 LL5 P3 5 1时转移 LCALL DELAY5 延时5MS KK3 JB S4 LL5 P3 5 1时转移 MOV C S4 JNC KK3 P3 5 0时转移 MOV A NUM2 CJNE A 1 MM2 判断按键计数是否为1 DEC HOUR2 小时定时变量减1 MOV A HOUR2 CJNE A 0 MM2 MOV HOUR2 24 LCALL DISPLAY2 显示定时时间 MM2 LCALL DISPLAY2 显示定时时间 MOV A NUM2 CJNE A 2 LL5 判断按键计数是否为2 DEC MIN2 MOV A MIN2 分钟定时变量减1 CJNE A 0 LL5 MOV MIN2 60 LL5 LCALL DISPLAY2 显示定时时间 RET KEYTIME PROGRAM KEYTIME 时间调整子程序 L1 JB S2 L3 P3 2 1时转移 LCALL DELAY5 延时5MS MSTOP2 JB S2 L3 P3 2 1时转移 MOV C S2 JNC MSTOP2 P3 2 0时转移 INC NUM1 MOV A NUM1 CJNE A 1 L2 判断按键计数是否为1 16 CLR TR0 定时器中断关闭 L2 CJNE A 4 L3 判断按键计数是否为4 MOV NUM1 0 SETB TR0 定时器中断打开 L3 MOV A NUM1 JNZ FF A不为0时转移 LJMP L5 FF JB S3 K2 P3 4 1时转移 LCALL DELAY5 延时5MS K1 JB S3 K2 P3 4 1时转移 MOV C S3 JNC K1 P3 4 0时转移 MOV A NUM1 CJNE A 1 M1 判断按键计数是否为1 INC HOUR1 小时设置加1 MOV A HOUR1 CJNE A 24 M1 MOV HOUR1 0 LCALL DISPLAY1 显示调整时间 M1 LCALL DISPLAY1 显示调整时间 MOV A NUM1 CJNE A 2 M2 判断按键计数是否为2 INC MIN1 分钟设置加1 MOV A MIN1 CJNE A 60 M2 MOV MIN1 0 LCALL DISPLAY1 显示调整时间 M2 LCALL DISPLAY1 显示调整时间 MOV A NUM1 CJNE A 3 K2 判断按键计数是否为3 INC SEC1 MOV A SEC1 CJNE A 60 K2 MOV SEC1 0 LCALL DISPLAY1 显示调整时间 K2 LCALL DISPLAY1 显示调整时间 JB S4 L5 P3 5 1时转移 LCALL DELAY5 延时5MS K3 JB S4 L5 P3 5 1时转移 MOV C S4 JNC K3 P3 5 0时转移 MOV A NUM1 CJNE A 1 M3 判断按键计数是否为1 DEC HOUR1 17 MOV A HOUR1 CJNE A 0 M3 MOV HOUR1 24 LCALL DISPLAY1 显示调整时间 M3 LCALL DISPLAY1 显示调整时间 MOV A NUM1 CJNE A 2 M4 判断按键计数是否为2 DEC MIN1 MOV A MIN1 CJNE A 0 M4 MOV MIN1 60 LCALL DISPLAY1 显示调整时间 M4 LCALL DISPLAY1 显示调整时间 MOV A NUM1 CJNE A 3 L5 判断按键计数是否为3 INC SEC1 MOV A SEC1 CJNE A 0 L5 MOV SEC1 60 L5 LCALL DISPLAY1 显示调整时间 RET TIMEPRO PROGRAM TIMEPRO MOV R7 50 蜂鸣器报警子程序 CLR SPEAKER 启动蜂鸣器报警 LCALL DELAYN 延时50MS SETB SPEAKER LCALL DELAYN CLR SPEAKER LCALL DELAYN SETB SPEAKER DISPLAY1 PROGRAM DISPLAY1 显示子程序1 PUSH ACC 保护现场 MOV A HOUR1 将时间的十位和个位分别赋给显示变量 MOV B 10 DIV AB MOV A1 A MOV B1 B MOV A MIN1 MOV B 10 DIV AB MOV C1 A 18 MOV D1 B MOV A SEC1 MOV B 10 DIV AB MOV E1 A MOV F1 B MOV DPTR TABLE 指向7段编码表首地址 CLR DULA 关闭段选锁存器锁存端 MOV A A1 MOVC A A DPTR MOV P0 A 显示小时十位 SETB DULA 打开段选锁存器锁存端 CLR DULA CLR WELA 关闭位选锁存器锁存端 MOV P0 0FEH 选择第1位数码管 SETB WELA 打开位选锁存器锁存端 CLR WELA LCALL DELAY5 CLR DULA 关闭段选锁存器锁存端 MOV A B1 MOVC A A DPTR MOV P0 A 显示小时个位 SETB DULA 打开段选锁存器锁存端 CLR DULA CLR WELA 关闭位选锁存器锁存端 MOV P0 0FDH 选择第2位数码管 SETB WELA 打开位选锁存器锁存端 CLR WELA LCALL DELAY5 CLR DULA 关闭段选锁存器锁存端 MOV A C1 MOVC A A DPTR MOV P0 A 显示分钟十位 SETB DULA 打开段选锁存器锁存端 CLR DULA CLR WELA 关闭位选锁存器锁存端 MOV P0 0FBH 选择第3位数码管 SETB WELA 打开位选锁存器锁存端 CLR WELA LCALL DELAY5 19 CLR DULA 关闭段选锁存器锁存端 MOV A D1 MOVC A A DPTR MOV P0 A 显示分钟个位 SETB DULA 打开段选锁存器锁存端 CLR DULA CLR WELA 关闭位选锁存器锁存端 MOV P0 0F7H 选择第4位数码管 SETB WELA 打开位选锁存器锁存端 CLR WELA LCALL DELAY5 CLR DULA 关闭段选锁存器锁存端 MOV A E1 MOVC A A DPTR MOV P0 A 显示秒钟十位 SETB DULA 打开段选锁存器锁存端 CLR DULA CLR WELA 关闭位选锁存器锁存端 MOV P0 0EFH 选择第5位数码管 SETB WELA 打开位选锁存器锁存端 CLR WELA LCALL DELAY5 CLR DULA 关闭段选锁存器锁存端 MOV A F1 MOVC A A DPTR MOV P0 A 显示秒钟个位 SETB DULA 打开段选锁存器锁存端 CLR DULA CLR WELA 关闭位选锁存器锁存端 MOV P0 0DFH 选择第6位数码管 SETB WELA 打开位选锁存器锁存端 CLR WELA LCALL DELAY5 POP ACC 恢复现场 RET DISPLAY2 PROGRAM DISPLAY2 显示子程序2 PUSH ACC 保护现场 MOV A HOUR2 将时间的十位和个位分别赋给显示变量 MOV B 10 DIV AB 20 MOV A2 A MOV B2 B MOV A MIN2 MOV B 10 DIV AB MOV C2 A MOV D2 B MOV DPTR TABLE 指向7段编码表首地址 CLR DULA 关闭段选锁存器锁存端 MOV A A2 MOVC A A DPTR MOV P0 A 显示定时时间的小时十位 SETB DULA 打开段选锁存器锁存端 CLR DULA CLR WELA 关闭位选锁存器锁存端 MOV P0 0FEH 选择第1位数码管 SETB WELA 打开位选锁存器锁存端 CLR WELA LCALL DELAY5 CLR DULA 关闭段选锁存器锁存端 MOV A B2 MOVC A A DPTR MOV P0 A 显示定时时间的小时个位 SETB DULA 打开段选锁存器锁存端 CLR DULA CLR WELA 关闭位选锁存器锁存端 MOV P0 0FDH 选择第2位数码管 SETB WELA 打开位选锁存器锁存端 CLR WELA LCALL DELAY5 CLR DULA 关闭段选锁存器锁存端 MOV A C2 MOVC A A DPTR MOV P0 A 显示定时时间的分钟十位 SETB DULA 打开段选锁存器锁存端 CLR DULA CLR WELA 关闭位选锁存器锁存端 MOV P0 0FBH 选择第3位数码管 SETB WELA 打开位选锁存器锁存端 CLR WELA 21 LCALL DELAY5 CLR DULA 关闭段选锁存器锁存端 MOV A D2 MOVC A A DPTR MOV P0 A 显示定时时间的分钟个位 SETB DULA 打开段选锁存器锁存端 CLR DULA CLR WELA 关闭位选锁存器锁存端 MOV P0 0F7H 选择第4位数码管 SETB WELA 打开位选锁存器锁存端 CLR WELA LCALL DELAY5 POP ACC 恢复现场 RET DELAY PROGRAM DELAYN N ms延时子程序 R7为参数N DL00 MOV R5 05H DL11 MOV R6 0DFH DL22 DJNZ R6 DL22 DJNZ R5 DL11 DJNZ R7 DL00 RET DELAY5 MOV R4 14H 5ms延时子程序 DL001 MOV R5 0FFH DL111 DJNZ R5 DL111 DJNZ R4 DL001 RET TIME PROCESS TIME PUSH ACC 定时中断子程序 PUSH PSW 保护现场 MOV TH0 0D8H 初值 MOV TL0 0EFH INC COUNT 计时变量加1 MOV A COUNT CJNE A 18 RET0 1秒到否 MOV COUNT 0 INC SEC1 MOV A HOUR1 判断定时时间到否 MOV B HOUR2 CJNE A B HTHT MOV A MIN1 22 MOV B MIN2 CJNE A B HTHT LCALL TIMEPRO 调用蜂鸣器报警子程序 HTHT MOV A SEC1 CJNE A 60 RET0 1分到否 MOV SEC1 0 INC MIN1 MOV A MIN1 CJNE A 60 RET0 1小时到否 MOV MIN1 0 INC HOUR1 MOV A HOUR1 CJNE A 24 RET0 MOV HOUR1 0 RET0 POP PSW 恢复现场 POP ACC RETI TABLE DB 3FH 06H 5BH 4FH 66H 七段码表 DB 6DH 7DH 07H 7FH 6FH END 23 附录附录 2 2 系统原理图 系统原理图 12 Y XTAL f 9 g 10 e 1 d 2 A 3 c 4 DP 5 b 6 a 7 A 8 DS1 30pF C2 30pF C1 S1 S2 S3 S4 S5 1K R1 1K R2 100pF C3 VCC VCC B1 B2 B3 B4 B5 B6 B7 B8 f 9 g 10 e 1 d 2 A 3 c 4 DP 5 b 6 a 7 A 8 DS2 B1 B2 B3 B4 B5 B6 B7 B8 f 9 g 10 e 1 d 2 A 3 c 4 DP 5 b 6 a 7 A 8 DS3 B1 B2 B3 B4 B5 B6 B7 B8 f 9 g 10 e 1 d 2 A 3 c 4 DP 5 b 6 a 7 A 8 DS4 B1 B2 B3 B4 B5 B6 B7 B8 f 9 g 10 e 1 d 2 A 3 c 4 DP 5 b 6 a 7 A 8 DS5 B1 B2 B3 B4 B5 B6 B7 B8 f 9 g 10 e 1 d 2 A 3 c 4 DP 5 b 6 a 7 A 8 DS6 B1 B2 B3 B4 B5 B6 B7 B8 VCCVCCVCCVCCVCCVCC S1 S2 S3 S4 S1 S2 S3 S4 E 1 D0 2 D1 3 D2 4 D3 5 D4 6 D5 7 D6 8 D7 9 GND 10 L 11 Q0 12 Q1 13 Q2 14 Q3 15 Q4 16 Q5 17 Q6 18 Q7 19 VCC 20 U2 74HC573 E 1 D0 2 D1 3 D2 4 D3 5 D4 6 D5 7 D6 8 D7 9 GND 10 L 11 Q0 12 Q1 13 Q2 14 Q3 15 Q4 16 Q5 17 Q6 18 Q7 19 VCC 20 U3 74HC573 VCC VCC WE1WE2WE3WE4WE5WE6 DB1 DB2 DB3 DB4 DB5 DB6 DB7 DB8 DB1 DB2 DB3 DB4 DB5 DB6 DB7 DB8 DULAWELA B1 B2 B3 B4 B5 B6 B7 B8 WE1 WE2 WE3 WE4 WE5 WE6 DB1 DB2 DB3 DB4 DB5 DB6 DB7 DB8 DULA WELA 1 2 3 P5 POWER VCC 1K R4 VCC FM FM VCC S 1 4 DB1 DB2 DB3 DB4 DB5 DB6 DB7 DB8 DB 1 8 B 1 8 WE 1 6 1 2 G1 SPEAKER P1 0 1 P1 1 2 P1 2 3 P1 3 4 P1 4 5 P1 5 6 P1 6 7 P1 7 8 RST 9 RXD P3 0 10 TXD P3 1 11 INT0 P3 2 12 INT1 P3 3 13 T0 P3 4 14 T1 P3 5 15 WR P3 6 16 RD P3 7 17 XTAL2 18 XTAL1 19 Vss 20 P2 0 21 P2 1 22 P2 2 23 P2 3 24 P2 4 25 P2 5 26 P2 6 27 P2 7 28 PSEN 29 ALE PROG 30 EA Vpp 31 P0 7 32 P0 6 33 P0 5 34 P0 4 35 P0 3 36 P0 2 37 P0 1 38 P0 0 39 Vcc 40 U1 89C52 1 2 3 4 5 6 7 8 9 PACK RES PACK Q1 PNP 24 附录三 液晶显示 一 一 实验目的实验目的 1 了解液晶工作原理 2 熟悉 12232F 液晶的引脚功能 工作时序及工作方式 3 掌握如何根据时序图编写程序的方法 二 二 实验内容实验内容 用实验箱上提供的 12232F 液晶模块 编写程序 静态显示 字样 三 三 实验原理实验原理 1 12232F 是一种图形点阵液晶显示器 它主要由行驱动器 列驱动器及 122 32 全点 阵液晶显示器组成 可完成图形显示 也可以显示 7 2 个 16 16 点阵 汉字 与外部 CPU 接 口可采用串行或并行方式控制 2 外部接口信号如下表 4 1 所示 表 4 1 管脚号管脚名称LEVER管脚功能描述 1GND0V电源地 2VCC5 0V电源电压 3VEE 液晶显示器驱动电压 4RSH L D I H 表示 DB7 DB0 为显示数据 D I L 表示 DB7 DB0 为显示指令数据 5R WH L R W H E H 数据被读到 DB7 DB0 R W L E H L DB7 DB0 的数据被写到 IR 或 DR 6EH L使能信号 7DB0H L数据线 8DB1H L数据线 9DB2H L数据线 10DB3H L数据线 11DB4H L数据线 12DB5H L数据线 13DB6H L数据线 14DB7H L数据线 15LED 5V背光源电压 16LED 0V背光源电源地 3 12232F 提供两套控制命令 基本指令和扩充指令如下 指令表 4 2 RE 1 基本指令 指令 指 令 码功 能 RSR WD7D6D5D4D3D2D1D0 25 清除 显示0000000001 将DDRAM填满 20H 并且设定DDRAM 的地址计数器 AC 到 00H 地址 归位 000000001X 设定DDRAM的地址计数器 AC 到 00H 并且将游标移到开头 原点位置 这个指令不改变 DDRAM 的 内容 显示状 态开 关 0000001DCB D 1 整体显示 ON C 1 游标 ON B 1 游标位置 ON 进入点 设定 00000001I DS 指定在数据的读取与写入时 设定 游标的移动方向及指定显示的移 位 游标或 显示移 位控制 000001S C R LXX 设定游标的移动与显示的移位控 制位 这个指令不改变 DDRAM 的 内容 功能 设定 00001DLX 0 RE XX DL 1 必须设为 1 RE 1 扩充指令操作 RE 0 基本指令操作 设定 CGRAM 地址 0001AC5 AC4 AC3 AC2 AC1 AC0 设定 DDRAM 地址到地址计数器 设定 DDRAM 地址 001AC6 AC5 AC4 AC3 AC2 AC1 AC0 设定 CGRAM 地址到地址计数器 读取忙 标志和 地址 01BFAC6 AC5 AC4 AC3 AC2 AC1 AC0 读取忙标志 BF 可以确认内部动 作是否完成 同时可以读出地址计 数器 AC 的值 写数据 到 RAM 10数据将数据 D7 D0 写入到内部的 RAM DDRAM CGRAM IRAM GRAM 读出 RAM 的 值 11数据从内部 RAM 读取数据 D7 D0 DDRAM CGRAM IRAM GRAM 指令表 4 3 RE 0 扩充指令 指令指 令 码功 能 RSR WD7D6D5D4D3D2D1D0 待命 模式0000000001 进入待命模式 执行其他指令都 棵终止待命模式 卷动地 址开关 开启 000000001SR SR 1 允许输入卷动地址 SR 0 允许输入IRAM地址 反白 选择 00000001R1R0 选择 4 行中的任一行作反白显示 并可决定反白与否 睡眠 模式 0000001SLXX SL 0 进入睡眠模式 SL 1 脱离睡眠模式 26 点距 书面 移位 控制 000001OALRL1L0 OA 1 选择单行移位 OA 0 全部 4 行一起移位 LR 1 点距右移 LR 0 点距左移 L1 L0 选择移位行 扩充 功能 设定 00001CLX 1 REGGP CL 1 必须设为 1 RE 1 扩充指令操作 RE 0 基本指令操作 G 0 必须设为 0 GP 0 必须设为 0 设定 IRAM 地 址或是 卷动地 址 0001AC5 AC4 AC3 AC2 AC1 AC0 SR 1 AC5 AC0 为卷动地址 SR 0 AC5 AC0 为 ICON RAM 地 址 设定绘 图 RAM 地址 001AC6 AC5 AC4 AC3 AC2 AC1 AC0本版本不提供此功能 0 4 并行时序图 图 4 1 写数据 27 图 4 2 读数据 5 12232F 与单片机连接电路图 四 四 实验步骤实验步骤 1 将三档开关 LCD 拨到最下 指向 89S51 其它开关都拨到中间 插上 USB 下载线 打开电源 2 打开 KEIL 软件 在所建的项目文件中输入源程序 进行编译 编译无误后 将生 成的 HEX 文件用 Proisp 下载到单片机中 3 观察实验板上液晶显示的

温馨提示

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

评论

0/150

提交评论