四则运算计算器设计
AI summary
设计一个四则运算计算器,要求包括16个按键(数字、运算符和赋值号),支持显示计算结果并处理超出范围的错误。计算过程包括输入两个操作数和运算符,输出结果,并支持重复计算。设计采用有限状态机(FSM)实现,并进行了仿真测试和下板验证。
Last edited time
Sep 24, 2024 03:04 PM
Last edited by
Tags
Calculator Design
Finite State Machine
Arithmetic Operations
一:设计要求
在昨天矩阵键盘驱动基础之上,实现一个四则运算计算器功能。
+ - * /
- 矩阵键盘上一共按键个数16个,操作数(0~9:10个按键),操作符(+/-/*/:4个按键),赋值号(结果:1个按键),四则运算最起码需要15个按键。
多余的1个按键可以设置一些清除功能/其它运算功能。
- 数码管显示限制
显示有一定的限制,显示设备拓展:TFT/VGA/HDMI/LCD…
123 + 234 = 357 999999+1=1000000
9999 * 9999 = 99,980,001 24位计算结果:16,777,216
可以在超出计算/显示范围时,设置计算ERROR功能。
- 计算问题
正常计算:
1+1=2 2*2=4
异常计算:
1++(1+) ++1(0+1) 1+1+1(1+1=2+1=3)
…
二:设计分析
- 按键的键值数据显示在数码管上
参考练习3。
show_data[23:0]={show_data[19:0], key_data[3:0]}; //数码显示按键键值数据
- 表示操作数(表示操作数和显示键值数据保持一致)
key_data[3:0]=1 key_data[3:0]=2 key_data[3:0]=3
显示时:
show_data[23:0]=24’h000123
1 12 123
num1(第一个操作数)=num1 * 10 + key_data;
num1=1 num1=12 num1=123
无论操作数多/少,表示方式一样。
- 正常显示情况下,计算过程
1+1=2
首先确定第一个操作数1(显示和表示),然后确定操作符+(不显示:显示全0),再次确定第二个操作数1(显示和表示),最后输出计算结果(1+1=2)。
三:设计架构
四:计算模块逻辑分析和实现
- 一次计算过程:
num1(第一个操作数) opcode(操作符) num2(第二个操作数) =(赋值号)
result(计算结果)
- 当一次计算结果结束后,考虑重复计算可能:
- 第二次计算时会将第一次计算结果作为第一个操作数;
- 第二次计算时,不使用上次计算结果,重新输入第二次第一个操作数会覆盖之前的计算结果。
1+1=2*4=8
1+1=2 5/4=1
- 第一次计算过程和重复计算
- 首先划分操作数(num1和num2)和操作数(opcode);可以将矩阵键盘按键0~9设置为操作数,abcd设置为操作符(+ - * /),e/f任意一个设置为赋值号。
- 产生第一个操作数(num1)
- 产生操作符(opcode)
- 产生第二个操作数(num2)
- 产生赋值号(=)
- 判断当前具体是哪一种运算
- 对计算结果进行转码(对10求余)
- 1~7过程完成一次计算过程,后续考虑重新计算。
判断矩阵键盘上的按键是否按下,然后判断按键键值数据,如果键值数据<10,可以认为是操作数。
判断矩阵键盘上的按键是否按下,然后判断按键键值数据,如果键值数据>=10&&<14,可以认为是操作符。
判断矩阵键盘上的按键是否按下,然后判断按键键值数据,如果键值数据<10,可以认为是操作数。
判断矩阵键盘上的按键是否按下,然后判断按键键值数据,如果键值数据=14/15,可以认为是赋值号。
10 : result = num1 + num2; //+
11 : result = num1 - num2; //-
12 : result = num1 * num2; //*
13 : result = num1 / num2; ///
result / 100000 % 10 //十万位(显示在数码管最高位)
第二次计算时会将第一次计算结果作为第一个操作数;
1+1=2*4=8
第二次计算时,不使用上次计算结果,重新输入第二次第一个操作数会覆盖之前的计算结果。
1+1=2 5/4=1
- 采用FSM实现
- 仿真测试结果
- 下板验证
Loading...