生产线货物自动计数
1.问题描述‘实现生产线货物的自动计数,具体要求如下:
(1)对生产线上货物自动计数,并实现显示。 (2)现实的最大值是“100”,显示在“100”时若再来货物,则显示“1”。可以用按键清楚计数情况。
(3)在显示“100”到“1”的过程中有语音提示。 (4)测定系统已运行时间。
(5)采用按键模拟货物到来,按键状态人为控制, 2.算法及流程
整个程序有主程序、键盘扫描、放音、计时、计数与显示公务部分组成。 2-1主程序
按照结构化程序设计的原则,键盘扫描、放音、计时、计数与显示等功能由子程序完成;主程序仅控制程序主题流程,调用子程序实现各项功能。主程序如图1. 开始 N 有按键按下吗 Y 清零键 键值? 记数键 加1后溢出 把计数值number和计数值number加计数值number和 已运行时间的个数组keycodeLED1,取number的个数组keycodeLED 十百位存入数组清零 清零 十位,keycodeLED keycodeLED 数组清零 发音报警 用LED显示keycodeLED数组中的数据 图1
2-2键盘扫描子程序
由于机械触点具有弹性,在键被按下或弹起时会出现电压抖动,从最初按下到接触稳定要经过数毫秒时间。为保证键识别准确,必须进行去抖动处理。 可利用在中断服务程序中不断扫描键盘并去除抖动,把扫描结果存放在一个数据单元中供主程序读取。中断服务程序中键盘扫描的流程图如图2
2-3放音子程序
开始 有按键按下吗 N 返回 Y 行扫描确定键 是否与上一次 N 扫描值相同 清除扫描次数为0 Y 清键值为0 扫描次数加1 是否扫描到30次 Y 设置按键标识为1 保存键值 返回 图2 程序采用SACM2000非自动方式播放提示音。 2-4 计时子程序
计时部分采用IRQ4中断,中断源为4096Hz时基信号。为了计时,在中断服务程序等待中断,每中断一次计数值count增1,最后观察计数寄存器状态,即可以得货通过的总时间。中断服务程序流程如图3
中断入口
关中断
计数加1
开中断
中断出口
图3
2-5计数与显示
首先要获取键值,存入变量keyVal中,然后判断键的含义。
a, 若是“清零”键,则保存计时值入AllTime单元,计数值入Now_Number单元再将计数值清零,重新计数。
b,若是“计数”键,则需要判断是否会溢出最大数值Max_Number,不会溢出则继续加1计数,否则计数数值清零,并使溢出位加1,显示溢出值。 c,若是“已运行时间”键,则显示系统已运行时间。