多功能闹钟软件设计
目前,在市场上流行着很多编程软件,种类繁多,功能五花八门,但是在选择时需多进行比较,选择最合理的,使之能够完成设计所要求的目的。所以在结合设计特点和本科阶段所学的相关知识后,设计最终选择Keil Vision4软件,并用C语言进行程序编写。
1 总体设计
软件设计主要由主程序、键盘输入、遥控输入、AD转换、LCD显示、数码显示、时钟读取、epprom数据保存组成。各个程序的主要功能如下:
1. 主程序:定义变量,开启各设备初始化,统筹各程序处理时间和顺序。
2. 矩阵键盘程序:定义每个按键被按下时所进行的操作,并扫描键盘,确定哪个按键被按下,然后实现相应操作。
3. 红外遥控程序:利用中断的方式开启红外遥控,利用外部中断0的电平读取红外信号。
4. LCD显示程序:显示当前各按键代表的是什么意思,配合键盘和遥控相应控制。
5. epprom储存程序:利用iic通信读取和写入要保存的信息。
6. 显示子程序:对固定字符和用户输入的密码进行显示。
7.时钟程序:对芯片直接读取获取时间信号。
8.AD程序:对传感器输入的模拟信号转化为的数字信号(这是24C02做的),利用51单片机和24C02通信获得测量结果。
2.1 主程序
主程序设计流程图如图2.1所示。主函数完成的事情是读取各模块的信息,编写LCD显示的内容,采集传感器信号。
图2.1 主程序设计流程图
2.2 矩阵键盘程序
矩阵键盘部分程序的程序流程如图22所示。
图2.2 键盘扫描设计流程图
这里矩阵键盘使用51单片机一组寄存器高四位做行,第四位做列,每次改变高低四位电平,判断该电平是否改变,若改变就代表按键被按下。按键值key按要求改变,测量五次取测得最多次数的key,这样可以降低干扰,且十分有效。
2.3 红外遥控程序
红外遥控是将红外信号转化为流程图如图2.3所示从这里面也可以看出,红外遥控首先要有一个9ms低电平,4.5ms高电平的重传引导信号,这里时间太长就直接判断为干扰,而后进入读取过程后,逻辑1为0.56ms低电平,1.25ms高电平,逻辑0位0.56ms低电平,0.56ms高电平。
图2.3 修改密码设计流程图
2.4 AD转换
这里是传感器采集信号的输入识别过程,由于外界环境比较复杂,所以传感器输入信号波动很正常,但是我们的显示不能这样,所以这里利用对比采集来减少误差,让传感器显示结果不那么波动,其流程图如下。
图2.4 开锁设计流程图
2.5 显示
显示过程由于既要显示数码管来验证,按键和红外传感器的准确性,又要显示LCD,所以寻找一个方法让显示不混乱,可以清晰舒服的看到显示结果是很重要的,其流程图如图2.5所示。
图2.5 显示设计流程图
这里是利用定时器,严格控制显示时间。并将定时器中的内容做到尽可能少,能放到主函数中的事情决不放到定时器中。
2.6 epprom读取
epprom的读写是依靠读写标志位来确定的,这里单独说一下读操作,写入与这个类似就不多叙述了。这里的流程图如下:
图2.6 读取epprom设计流程图
这里每次读取内容都要寻求地址,地址最高为255,这里采取多次读取,若不相等就更新一次,将第一次读取数据忽略。这样可以降低干扰,保证读写准确。
3 小结
根据多功能闹钟的功能要求,概括了功能的总体设计,再分别对每一个功能实现进行具体的展开,通过流程图对各个功能的实现进行了详细的阐述。
多功能闹钟功能测试
针对多功能闹钟的软硬件设计以及功能要求,提出了电子密码锁功能测试的要求,并对其各个功能进行了详细的测试,验证了每个功能的有效性和可靠性。
1. 测试要求
多功能闹钟的主要功能测试要求如下:
1. 按键准确;
2. 能够实现遥控;
3. 时钟运行准确;
4. 通过epprom保存信息,并可以在下次启动时准确读取;
5. 传感器采集信号正常。
6. 电机和蜂鸣器响应正常
7. 闹钟设置正常
2. 功能测试
2.1 闹钟测试
1. 测试步骤
(1) 设置闹钟;
(2) 调节当前时间靠近设定时间;
(3) 看蜂鸣器是否响。
2. 测试结果
执行步骤(1)后,显示屏上的内容如下图所示,这里面的第一个0为星期一不设置闹钟,第二个1是星期二设置闹钟,一共7个数字,第二张图片是显示闹钟设置的时间,可以按7或8切换页面来调节小时和秒。
设置工作日 | 设置时间 |
图2.1 闹钟设置图
执行完上面过程后,可以查看现在时间,这里显示精度虽然是1秒,但是实际上其误差小于1us。
图2.2 当前时间显示图
这里设置星期,小时,分钟到相应位置就可以了,月份和年份按正常来就可以了,调节完成后可以正常听到蜂鸣器。
图2.2 当前时间修改示意图
2.2 传感器调节
1. 测试步骤
(1) 查看传感器当前值;
(2) 修改当前传感器值,直到超过报警值;
(3) 看光照超过120后蜂鸣器是否响;
(4) 看温度超过30度后,电机是否转动。
2. 测试结果
运行(1)后查看传感器当前值:
图2.3 传感器测量值图
修改传感器值的情况如下,明显可以看到电机可以正常转动:
图2.4 调节温度
图2.5 光敏传感器调整
明显调整后蜂鸣器可以发出叫声。
2.3 遥控控制
1. 测试步骤
(1) 用遥控器强制开启蜂鸣器,电机;
(2) 手动关闭遥控;
(3) 看关闭遥控后是否还可以遥控设备;
2. 测试结果
运行完1后结果如下,根据LCD上面的提示开启电机和蜂鸣器,红外遥控:
图2.6 强制电机开启
图2.4 关闭红外遥控图
关闭和打开红外遥控只能靠矩阵键盘控制,关闭后直接关闭外部中断0,成功拒绝红外信号输入。
2.4 数据保存
1. 测试步骤
(1) 查看时间
(2) 重启后查看当前闹钟时间,对比看时钟是否重新开启过;
2. 测试结果
重置前时间 | 重置后时间 |
从时间上来看,我们重启并没有让ds1302时钟重启,这确定了我们的epprom存储与读取是正确的。
3. 小结
经过对各项功能的测试,以及对测试结果的分析,可以总结出,最终的多功能闹钟够正常实现所有设计的功能。
注意工程里面直接把u8,u16的定义放reg52.h里面了