0x00 前言
有一段时间没写51的单片机了,实验室的学长留了个小练习,我就用来当“复健”了。一个极其简易的计算器,看起来很简单,但有些细节也是琢磨了一下的(俺还是菜),用的是蓝桥杯的板子,代码的质量着实堪忧。
0x01 题目
小练习:简易计算器
初始显示界面
使用16个按键每个按键对应的值为
0 1 2 3
4 5 6 7
8 9 + -
* / 清除 =
可以实现两位数的加减
前两个数码管显示第一位数,第三个数码管显示+、-、*、/(然后+、-、*、/分别用A,B,C,D来表示)。第四五个数码管显示第二位数,第六位显示等号,第七八位显示结果。
限制范围,第一个数和第二个数限制在0-30以内的数,结果的范围在0—99,将回到最初的状态(都是0).
举个列子:
假设我要计算12+13=25;首先我要按下对应键值为1的按键,这时第一个数码管显示1,然后继续按下对应键值为2的按键,这时第二个数码管显示2,然后按下键值为+号的按键,这时第三个数码管显示A,然后继续按下对应键值为1的按键,这时第四个数码管显示为1,然后继续按下对应键值为3的按键,这时第五个数码管显示为3,再次按键计算按钮,第六个数码管显示等于号,并且第78数码管显示运算结果25。
清除键可以直接清除数码管,让数码管清0。
0x02 思路
1. 初始化系统。
2.判断当前将要赋值的位选,启用对应的按键。
3.当当前位选赋值完毕后,进行下一个位选(向右)的赋值。
4.实现计算的操作和一些其他的限制。
0x03 代码
质量着实堪忧(菜鸡瑟瑟发抖)
#include <REGX52.H>
typedef unsigned char u8;
typedef unsigned int u16;
sfr P4 = 0xc0;//蓝桥