目录
一、任务要求 1
一、任务要求
设计一个模拟纸牌 24 点玩法的单片机模拟器,由单片机随机发出四个牌点,测试者在实验板按键上输入计算过程,单片机判断计算结果是否正确,并评定测试者的成绩。
【基本要求】:
1.测试多组数据
2.单片机在数码管上随机给出 4 张牌点,牌点范围为 1-13,10 到 13 由字符 a,b,c,d 表示
3.在单片机实验板按键中设计 4 个数学运算键+-×÷
4.4 个数字中每使用完一个后该字符应有明显标识
5.只允许测试者使用四则运算(可加括号)
6.无论测试结果是否正确,均有声光效果提示;
7.测试完毕,由单片机给出测试者的最终成绩
二、功能特点与使用说明
功能特点:
1.使用最低的系统时钟频率, 降低功耗
2.键盘扫描使用了软件消抖,防止按键被重复判别为弹起或按下
3.键值判断使用的是键值跳变判断,即使你一直将键盘按下,也不会重复执行命令
4.使用后缀表达式计算字符串算式,代码简洁易懂
2.设计思路:
键盘设计思路:首先通过 T2 扫描键盘,判断键盘是否被按下,这里运用了软件消抖的方法, 连续检测到四次键盘被按下(或松开)才会把键值数组里相应的地方置为 1(0)。然后通过
T4 扫描键值数组,如果检测到跳变(防止一直按着某个键,其键值一直为 1,导致其功能一直被反复执行),且跳变后键值为 1,则执行此键位的命令。
LCD 屏设计思路:通过字模软件生成数字字母及运算符号的 32 位字模数组,通过选择左右屏以及生成的 X,Y 坐标可以将数字显示在自己想要的地方
主程序设计思路:随机生成四个数并将其存在一个数组之中,然后显示在屏幕的上方。按键选择数或符号,本文转载自http://www.biyezuopin.vip/onews.asp?id=14870每选择了一个数,就会将其原数所在的区域清除,表示此数以及被选择了,然后将此数或此符号用字符的形式存在一个字符数组里面,最后按下等于键,就会运行计算此字符数组对应的表达式的值的程序,最后结果算出来如果等于 24,则会亮起黄灯,如果错误则会亮绿灯。
计算字符串表达式的设计思路:
1.中缀表达式转换为后缀表达式:
a).数字直接入队列
b).运算符要与栈顶元素比较
①栈为空直接入栈
②运算符优先级大于栈顶元素优先级则直接入栈
③小于或等于则出栈入列,再与栈顶元素进行比较,直到运算符优先级小于栈顶元
素优先级后,操作符再入栈
c).操作符是 ( 则无条件入栈
d).操作符为 ),则依次出栈入列,直到匹配到第一个(为止,此操作符直接舍弃,(直接出栈舍弃
2.通过逆波兰表达式计算结果:
获取字符串表达式的每一项,判断这一项是数据还是操作符,如果是数据,则让它入栈,如果是操作符,让数据出栈,和操作符进行运算 。