1、布置课题,明确任务、总体方案设计 1天 2、主体功能控制程序设计及调试 5天 3、程序综合联调及功能完善、改进、扩展 3天 4、答辩及编写设计说明书 3天
第二章总体方案设计与方案论证
本次课程设计的课题是设计全自动豆浆机模拟程序,需要运用微机原理与接口技术课本内容进行设计,设计的豆浆机不单单仅有煮豆浆功能。还带有水位报警,实时钟以及实时钟调校功能,模拟水温等功能。
总体设计方案
对于这次的课程设计,按照老师所讲,我们所采取的程序设计是按照模块化来进行程序的设计。将豆浆机的主工作流程作为一个模块,再加入其它功能的模块,比如实时钟调校模块,水位告警模块,模拟水温模块等,通过各个模块之间的循环调用,以此来完成整个全自动豆浆机的程序设计。
整个程序由自检模块,程序初始化,15个子模块组成的主流程循环调用,中断模块,延时子模块构成。
实时钟的调校方式
方案一:运用4X4键盘对应数字输入实时钟调整
通过对4X4键盘模块的程序设计,使键盘模块能够在实时钟调校功能中实现时分秒准确调时,并且有退格,取消,确定等按键调整实时钟调校,相对应的小时十位只能
输入0~2,小时个位只能按键输入0~4,分钟十位输入0~6,分钟个位输入0~9,能够较准确的对实时钟进行调校。
方案二.:通过调时键进入调时,四个按键对小时,分钟进行+1-1调校。 这个方案是更为简单的方案,只需要有个进入调时的按键和一个调时完成确定按键,以及4个加减时钟按键。通过对键号的扫描判断按键是否按下以此来实现对实时钟的调校功能。
这个方案最好的优点是简化了调校功能,使时钟能够以更简便的方式进行调校,为产品的外观设计提供了很大的方便。
通过上面的综合判断实时钟的调校我们选择方案二——按键加减调校。 键盘的扫描方式 方案一:扫描法
首先识别键盘有无键按下,驱动所有列线为‘0’,输入各行线电平如果有‘0’,就说明有键按下,如果行线电平全‘1’,则全部无键按下。其次是如有键被按下,识别具体的按键。依序驱动某一列为‘0’,其余列均为‘1’,输入各行线电平,如果某行线电平为‘0’,可确定此行列交叉点处的按键被按下;如果行线电平全为‘1’则本列无按键按下。这种方式太占用CPU的工作时间。
方案二:线反转法
首先列线输出为全‘0’,随后输入行线电平如有‘0’,则‘0’所在的行就是闭合的按键所在行;无‘0’则无键闭合。其次行线输出为全‘0’,随后输入列线电平如有‘0’,则‘0’所在的列就是闭合的按键所在列;无‘0’则无键闭合。
直通结合上述两步,可确定按键所在行和列。这种方式非常简单,并且很实用。 综合以上的分析,我们选择方案二——线反转法
计数方式
方案一:13位计数方式--方式0
定时器/计数器方式0 一共是有13位的计数方式。方式0是为兼容MCS-48而设,初值计算麻烦,在实际应用中,一般不用方式0。并且存在一个是时间误差,不能适用于精确定时。
方案二:16位计数方式--方式1
定时器/计数器方式1 一共是有16位的计数方式,由于它每个扫描周期都会有3~8个Tm(机器周期的时间误差,主要是用于要求不是很精确地定时,因为有随机性的误差产生。
方案三:8位计数自动重装工作方式--方式2
定时器/计数器方式2为自动恢复初值(初值会自动重装的8位定时器/计数器,当其计数溢出的时候,系统会自动重装初值,重新开始计数。这种工作方式可以省去用户软件中重装初值的指令执行时间,可以做到精确地定时时间。
综上所述,我们是要求能做到精确定时,所以选择方式2
按键输入消抖模块的选择
对于开关量输入的消抖处理一般有以下两种种处理方法。 方案一:软件延时消抖
即检测出键闭合后执行一个延时程序,产生5ms~10ms的延时,让前沿抖动消失后再一次检测键的状态,如果仍保持闭合状态电平,则确认为真正有键按下。当检测到按键释放后,也要给5ms~ 10ms的延时,待后沿抖动消失后才能转入该键的处理程序。
方案二:滚动滤波消抖法
滚动滤波消抖法就是通过滚动滤波法的原理,我们将PB0~PB7电平输入,并进行五次滚存消抖,新态存2EH,旧态存2FH,这个方法能够较好的完成按键的消抖,排除按键抖动所产生的不良效果,完善了按键功能。所以我们对消抖模块选择滚存消抖。
倒计时1S方法选择
方案一:在非倒计时显示情况下,延时可采取调用主程序,重复相应次数,得到相应延时时间。如主程序每调用一次需10ms,调用100次,则得到1s的延时。在倒计时显示情况下,采取在中断设置1s到标志位,用到倒计时开启标志位即可。
方案二:每次延时即开启1s到标志位。
两个方案相比较,方案一比较简单、灵活,所以采取第一种方案来进行精准计时。
第三章 总体软件设计说明与总工作流程 总工作流程如图所示 主流程 自检模块 程序初始化 B
蜂鸣器LED 灯缓 冲子模块
调用按键消抖子模块 1分钟内取消子模块 显示更新子模块 工作模式选择模块 调用拆字子模块 时钟设定子模块 调用键盘扫描子模块 启动子模块