基于单片机的作息时间控制器系统设计毕业论文(编辑修改稿)内容摘要:

控制,本设计是按照学校作息时问设定的,模拟了电了钟显示时、分、秒。 还根据学校的作息时间按时打铃,本系统有 4 个按钮,分别用来调时、调分、秒和强制打铃及强制关铃,以保证始终与标准时间相吻合。 首先设计出本系统的硬件基本框图,根据框图设计电气原理图,简要概述基本原理,按照设计技术参数设计出各部分程序。 系统软硬件划分 由于需要最小系统设计,因此,极大地介于系统的硬件成本,所有能用软件实现的功能都用软件完成,如按键 的去抖,采用延时,显示部分用动态显示等,这样硬件部分的设计可以采用单片机最小系统,所谓最小系统时仅有程序存储器和时钟及复位电路的单片机系统。 单片机选型 根据课题的具体内容,任务要求,计时、校时、定时、键盘显示等功能,经多方面考虑,所选系统选项用.与 MSC51 单片机完全兼容的 STC89C52 低功耗单片机。 总 体 设计框图 图一 整体框图 第 三 章 硬件电路设计 基本原理概述 本系统主要由主控模块,时钟模块,显示模块,键盘接口模块等 4 部分构成。 通过内部定时产生中断,从而使驱 动电铃打铃。 设定 51 单片机工作在定时器工作方式 1 ,每 100ms 产生一次中断,利用软件将基准 100ms 单元进行累加,当定时器产生 10 次中断就产生 lS 信号,这是秒单元加 1。 同理,对分单元和时单元计数从而产生秒,分,时的值,通过六位七段显示器进行显示。 由于动态显示法需要数据所存等硬件,接口较复杂,考虑显示只有六位,且系统没有其他浮躁的处理程序,所有采用动态扫描 LED 的显示 ,但 为了能更好的区分,年月日,时分秒,在时间间隔中间加入间隔符号,因此采用 8 位数码管。 本系统采用四个按键,当时钟时间和设置时间一 直时,驱动程序动作,进行打铃,每次打铃 30S 主要 原件参数及功能简介 主控器 STC89C52 STC89C52 公司生产的 STC89C52 单片机用高性能的静态 89C51 设计,由先进工艺制造,并带有非易失性 FLASH 程序存储器,它是 种高性能、低功耗的8 位 CMOS 微处理芯片,市场应用最多,主要特点有: 有 4K 的 FLASH 程序存储器 256 字节内部 RAM 电源控制模式:时钟可停止和恢复,空闲模式,掉电模式 6 个中断源 4 个中断优先级 4 个 8 位 I/O 口 全双工增强型 UARTLCD1602液晶接口GND1VCC2VO3RS4RW5E6DB07DB18DB29DB310DB411DB512DB613DB714BG/VCC15BG/GND16LCD1LCD1602GNDGNDVCCVCCR42KP00 P01 P02 P03 P04 P05 P06 P07P10 P11 P12 2 个 16 位定时、计数器 图二 STC89C52 DS1302 1)性能特性 DS1302 与单片机之间能简单地采用同步串行的方式进行通信,仅需用到三个口线: 复位 ,, 串行时钟。 时钟 /RAM 的读 /写数据以一个字节或多达 31 个字节的字符组方式通信。 DS1302 工作时功耗很低,保持数据和时钟信息时功率小十 1mW。 提供秒分时日日期。 月年的信息,每月的天数和闰年的天数可自动调整时钟 ,操作可通过 AM/PM 指示决定采用 24 或 12 小时格式。 2)管脚描 述 XI XZ 晶振管脚 GND 接地 RST 复位脚 I/O 数据输入 /输出引脚 SCLK 串行时钟 Vcc1, Vcc2 电源供电管脚 DS1302 串行时钟芯片 8 脚 DIP DS1302S 串行时钟芯片 8 脚 SOIC 200mil DS1302Z 串行时钟芯片 8 脚 SOIC 150mil 图三 DS1302 单元电路的设计 显示电路设计 显示部分采用普通的 STC89C52 显示 图四 显示电路 显示部分采用 2 块 4 位数码管,即 8 位共阳数码显示,由 STC89C52 芯片对该数码管传送数据。 而在 P2 口接入 8 个三极管对数码管的位控进行控制。 该 显示采用的是动态显示,段控和位控都经过反相器,显示的字形代码是共阳的显示代码,位控信号输出时是高电平有效,在校时时,采用的是点亮小数点信位调节器标志,哪位小数点亮表示调整的是该 位 的值。 键盘接口电路设计 由于键盘只有四个,采用独立式按钮,用查询法完成读健功能。 图五 按键电路 各键功能已写入程序,在使用按键的时候,根据有无按键否,一一进行判断,软件中采用 if 嵌套模式,因此使各按键的功能具有 多样性和课重复使用性。 因本次实训的课题,为实现,年月日,时分秒等时间的调试, 系统使用 5 只按键,4 只按键用来调整时间, 且其中一只在不设置时间的情况下可为强制打铃,另一只单独连接,可实行复位和强制结束打铃。 通过选择键选择调整位,选中位闪烁,按增加键为选中位加 1,按减少键为选中位减 1。 按强制打铃按钮是实现强制打铃或者强制关闭打铃。 响铃电路设计 响铃电路用到了蜂鸣器、三极管、 1K 电阻。 蜂鸣器两端分别接地和三极管。 三极管一段电源另一端与电阻相连并接入 STC89C52 的 接口。 图六 响铃 电路 总体运行进程 首先实现 24 小时制电子钟,在 8 位数码管显示,显示为时分秒,实现的格式为: 235959。 到达预定时间启动蜂鸣器开始打铃,打铃的方式分为起床、熄灯和上下课铃两种。 系统使用 5 只按键, 4 只按键用来调整时间, 且其中一只在不设置时间的情况下可为强制打铃 , 另一只单独连接,可实行复位和强制结束打铃。 通过选择键选择调整位,选中位闪烁,按增加键为选中位加 1,按减少键为选中位减 1。 按强制打铃按钮是实现强制打铃或者强制关闭打铃。 第四章 软件电路设计及流程图 基本原理概述 主程序首 先是初始化部分,主要是计时单元清零,中断初始化,堆栈指针初始化,启动定时器工作,然后是调用显示子程序。 主程序的起始存储地址是 0000H单元,但由于本系统用了定时器 T0 的中断,中断服务程序入口地址为 000BH,因此从 0000H 单元起存放一条短调转指令 AJMP,使真正的主程序从 0300H 单元开始存放。 中断服务程序设计 单片机内部的定时 /计数器 T0 定时 100ms,即 , 10 次中断即为 1 秒,60 秒为 1 分, 60 分为 1 小时, 24 小时为一天,如此循环,从而实现计时功能。 编写中断服务程序关键要注意 : ,本系统中是累加器 A 和程序状态字 PSW 值的保护。 ,因此时,分,秒单元加 1后要进行十进制调整,即要执行 DAA 指令,还要注意的是时计到 24 就回零,分和秒计到 60 就回零。 显示程序设计和按键判断与按键处理程序设计 显示采用的是动态显示,段控和位控都经过反相器,显示的字形代码是共阳的显示代码,位控信号输出时是高电平有效,在校时时,采用的是点亮小数点信位调节器标志,哪位小数点亮表示调整的是该 位 的值。 显示子程序的第一部分是拆字,显示缓冲 区是 2FH— 2AH;第二部分是查字型码,输出段控和位控信号,由于采用的是动态显示,所以每出输出一位的段控和位控信号要延时一定的时间,使 LED 显示器显示的字符时稳定的。 按键判断程序有编写时应注意按键的去抖动,该系统采用的是延时去抖动的方法,延时是通过调用子程序来实现的,每个按键按下后都要等待释放后再返回。 按键处理程序中的按键式校时的,所以进入按键处理程序后就关闭定时中断,对于动能键注意设置显示标志。 流程图 系统主程序流程图 图 7 主程序流程图 系统定时中断流程图 图 8 中断流程图 第五章 系统程序设计 程序设计概要 程序名称: 基于单片机的 作息时间器 系统设计 说明:实现 24 小时制电子钟, 8 位数码管显示,显示时分秒显示格式:235959(小时十位如果为 0 则不显示)。 到预定时问启动蜂鸣器模拟打铃,蜂鸣器 BEEP:。 打铃方式分起床、熄幻铃和上、下课铃两种。 系统使用 5 只按键, 4 只按键用来调整时间, 且其中一只 在不设置时间的情况下可 为强制打铃,另一只 单独连接,可实行 复位和强制结束打铃。 键 SET_KFY: ;通过选择键选择 要调的时间 ,选 中位闪烁。 可调整年月日,时分秒,周期 和预设闹钟时间。 键 SET_KFY:; 通过选择键选择调整位,选中位闪烁 ,且在 1 键选择到设置闹钟时间时可跳出预设闹钟时间。 增加键 ADD_KEY: ;按一次使选中位加 1。 减少键 DEC_KEY: ;按一次使选中位位。 1,且具有强制打铃效果 源程序清单 include //调用单片机头文件 define uchar unsigned char //无符号字符型 宏定义 变量范围 0~255 define uint unsigned int //无符号整型 宏定义 变量范围 0~65535 include //数码管段选定义 0 1 2 3 4 5 6 7 8 9 uchar code smg_du[]={0xa0,0xbb,0x62,0x2a,0x39,0x2c,0x24,0xBa,0x20,0x28, 0x30,0x25,0xe4,0x23,0x64,0x74,0xff}。 //断码 //数码管位选定义 uchar code smg_we[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f}。 //数码管位选定义 uchar dis_smg[8] = {0xa0,0xbb,0x62,0x2a,0x39,0x2c,0x24,0xBa}。 uchar smg_i = 8。 //显示数码管的个位数 bit flag_200ms。 bit flag_100ms。 bit flag_500ms。 //500ms 标志位 sbit beep = P3^7。 //蜂鸣器定义 bit flag_beep_en。 uint clock_value。 //用作闹钟用的 uchar flag_s = 0x03。 //控制数码管闪烁的变量 uchar flag_nl。 //农历 阳历显示标志位 uchar menu_1,menu_2,menu_i。 sbit dat0 = B^0。 sbit dat1 = B^1。 sbit dat2 = B^2。 sbit dat3 = B^3。 sbit dat4 = B^4。 sbit dat5 = B^5。 sbit dat6 = B^6。 sbit dat7 = B^7。 uchar daling_geshu=0。 uchar fen1,shi1。 //第 1 个打铃的时间 起床 uchar fen2,shi2。 //第 2 个打铃的时间 早自习 uchar fen3,shi3。 //第 3 个打铃的时间 早自习下 uchar fen4,shi4。 //第 4 个打铃的时间 第一节上课 uchar fen5,shi5。 //第 5 个打铃的时 间 第一节下课 uchar fen6,shi6。 //第 6 个打铃的时间 第二节上课 uchar fen7,shi7。 //第 7 个打铃的时间 第二节下课 uchar fen8,shi8。 //第 8 个打铃的时间 第三节上课 uchar fen9,shi9。 //第 9 个打铃的时间 第三节下课 uchar fen10,shi10。 //第 10 个打铃的时间 第四节上课 uchar fen11,shi11。 //第 11 个打铃的时间 第四节下 课 uchar fen12,shi12。 //第 12 个打铃的时间 第五节上课 uchar fen13,shi13。 //第 13 个打铃的时间 第五节下课 uchar fen14,shi14。 //第 14 个打铃的时间 第六节上课 uchar fen15,shi15。 //第 15 个打铃的时间 第六节下课 uchar fen16,shi16。 //第 16 个打铃的时间 第七节上课 uchar fen17,shi17。 //第 17 个打铃的时间 第七节下课 uchar fen18,shi18。 //第 18 个打铃的时间 第八节上课 uchar fen19,shi19。 //第 19 个打铃的时间 第八节下课 uchar fen20,shi20。 //第 20 个打铃的时间 晚自习上课 uchar fen21,shi21。 //第 21 个打铃的时间 晚自习下课 uchar fen22,shi22。 //第 22 个打铃的时间 熄灯 uchar fen23,shi23。 //第 23 个打铃的时间 uchar fen24,shi24。 //第 24 个打铃的时间 uchar fen25,shi25。 //第 25 个打铃的时间 uchar fen26,shi26。 //第 26 个打铃的时间 include /******************把数据保存到单片机内部 eeprom 中 ******************/ void write_eeprom() { SectorErase(0x2020)。 byte_write(0x2020, fen1)。 //第 1 个打铃的时间 byte_write(0x2020, shi1)。 byte_write(0x2020, fen2)。 //第 2 个打铃的时间 byte_write(0x2020, shi2)。 byte_write(0x2020, fen3)。 //第 3 个打铃的时间 byte_write(0x2020, shi3)。 byte_write(0x2020, fen4)。 //第 4 个打铃的时间 byte_write(0x2020, shi4)。 byte_write(0x2020, fen5)。 //第 5 个打铃的时间 byte_write(0x2020, shi5)。 byte_write(0x2020, fen6)。 //第 6 个打铃的时间 byte_write(0x2020, shi6)。 byte_write(0x2020, fen7)。 //第 7 个打铃的时间 byte_write(0x2020, shi7)。 byte_write(0x2020, fen8)。 //第 8 个打铃的时间 byte_write(0x2020, shi8)。 byte_write(0x2020, fen9)。 //第 9 个打铃的时间 byte_write(0x2017, shi9)。 byte_write(0x2018, fen10)。 //第 10 个打铃的时间 byte_write(0x2019, shi10)。 byte_write(0x2020, fen1。
阅读剩余 0%
本站所有文章资讯、展示的图片素材等内容均为注册用户上传(部分报媒/平媒内容转载自网络合作媒体),仅供学习参考。 用户通过本站上传、发布的任何内容的知识产权归属用户或原始著作权人所有。如有侵犯您的版权,请联系我们反馈本站将在三个工作日内改正。