[教程资源]--[硬件教程]

一步步打造解方程计算器

2019-07-16 11:22:12  阅读6005



作者:广西玉林市民族中学 梁成      


      计算器大家都很用过,主要是用来进行加、减、乘、除、平方、开方等运算,能不能造一个用来解一元二次方程的计算器,输入方程的abc,就能求出x1、x2呢?下面大家跟我一步步制造解一元二次方程的计算器吧。
      先说一下制作思路:用ardoino UNO板作处理器,通过6个按键输入方程的abc,一个按键输入解命令,用1602液晶屏显示abc和x1、x2。
      第一步:液晶输出
      这里我们先来试试,如何在1602液晶屏上显示相应的数字。

      1602液晶屏与ardoino UNO的连接




1602液晶屏Vss和RW接电源负极,Vdd接电源正极,Vo接电位器中间引脚,电位器两端分别接电源正负极,其余引脚与Arduino数字输出口的接法如下表

1602液晶屏

RS

E

D4

D5

D6

D7

Arduino

6

5

4

3

2

1

连接好线路后,接通电源,用电压表测Vo与Vss之间的电压,调节电位器,使Vo与Vss之间的电压为1V。


程序如下图


部分程序解释

第二行:1602液晶屏与ardoino UNO的连接

第三行:液晶屏从第1列第1行开始显示,程序是从0数起的,0列0行是实际的第1列第1行。

写好程序,点击编译&下载,将程序写到ardoino UNO中,看看液晶屏,是不是在第一行开头起,显示出12345。如果没有显示,先调节电位器,再检查线路、程序是否正确。

第二步:按键输入数字

如下图,在数字口与地之间接一按键开关, 数字口与Vcc之间接10K电阻,当按键没有按下时,数字口通过电阻接Vcc,为高电位,值为1,当按键按下时,数字口通过按键接地,为低电位,值为0。程序中设a、b、c三个变量,初始化时a、b、c的值都为0。ardoino UNO检测到按键按下后,使a、b、c的值加1或减1。下面我们来试试通过a+按键(接数字口12)输入数字。



在面包板上的接线图

程序:

程序解释

重复执行,ardoino UNO要不断地检测

读数字口12=0,也就是按键接下,液晶显示:a。这里不是显示字符a,是显示变量a的值。

点击编译&下载, 液晶屏显示0.00(初始化a设定为0,自动带两位小数)。先不要按下按键,取下上拉电阻,看看液晶屏上的数字是不是在不断地增大;接上电阻,数字又稳定不变了,可以理解为上拉电阻起到防干扰的作用。按一下按键,看看液晶屏上的数字是不是加1.

到这里大家发现,按下按键,液晶屏上的数字不是加1,是加了几十到一百多,这是为什么呢?原来是ardoino UNO的运行速度很快,在我们按下按键到松开,重复执行了几十到一百多次,从而使得a的值增加了几十到一百多。我们加上等待按键松开的程序就可解决这个问题,如下图。


修改后编译&下载,大家试试,按一下按键,液晶屏显示1.00,再按一下,液晶屏显示2.00。可能有些人发现,按一下按键,显示的数字不是加1,是加了十左右,这又是为什么?如何解决呢?

我们平常所用的按键为机械弹性开关,由于触点的弹性作用,按键在闭合时不会马上稳定的接通,而是有一段时间的抖动,在断开时也不会立即断开。抖动时间由按键的机械特性所决定,一般为5ms~10ms。所以我们在做按键检测时都要加一个消抖的过程。




按键消抖的方法:延时重采样(去抖延时)

延时重采样的意思是,当第一次检测到键值由'1'变为'0'时,再延时一段时间(如10ms),再次采样,确认是否仍是'0';若是'0'则认为此时键值为'0',否则,重新执行检测过程。

8.jpg




再次修改后编译&下载,大家试试,按一下按键,液晶屏显示的数字就只加1,没问题了吧。用同样的方法,试试如何通过数字口7~11的按键使a减1,b、c加减1并显示在液晶屏上吧。

第三步:方程在液晶屏上的显示方式

方程的a、b、c三个系数有可能是两位数甚至更大,也可能是负数,液晶屏显示时,自动带两位小数,连小数点和负号,就自动占了3~4个字符的位置;1602液晶屏每行只能显示16个字符,以ax2+bx+c=0的形式在液晶屏的一行显示出来不好处理。那我们就来个简单的方法,只显示方程的a、b、c三个系数。

如下图,液晶屏第1行前面的数字表示a,第1行后面的数字表示b, 第2行前面的数字表示c,图中的数字表示方程1234x2-789x+345=0。


9.jpg

第二、三步和程序如下图:


10.jpg11.jpg

第四步:输入解方程命令并求解输出

在数字口0与地之间接一按键(解/返回键),当按下该按键,ardoino UNO对输入的a、b、c三个数进行相应计算,先判断有无解,无解液晶屏显示F,有解则解出方程的两个根并显示在液晶屏上。

12.jpg

再设3个变量,pbs表示根的判别式,xy表示方程的第一个根x1,xr表示方程的第二个根x2

13.jpg

程序解释

将pbs设定为b*b-4*a*c,判别式b2-4ac;

LCD clear 清屏,清除原来显示的a、b、c三个数;

在读数字口0=0之前一直等待,等再次按下解/返回按键,没有这句和后面的程序,当按下解按键,ardoino UNO很快显示解的结果,但也很快显示a、b、c三个数,我们看不到解的结果。加上这句,则在没有再次按下解/返回键,液晶屏一直显示解的结果,再次按下,则返回输入和显示a、b、c状态。这也是这个按键命名为解/返回按键的原因。

将a(b、c)设定为0,将a、b、c的值设定为0,便于下一个方程的输入。

这是判别式小于0的情况,否则,也就是判别式大于或等于0,方程有解。ardoino UNO进行计算并显示在液晶屏上。

打开数学课本,输入几个方程试试吧。


第五步:焊接,安装

计算器设计好了,总不能装在面包板上吧,下面来把按键、电阻、导线、液晶屏、排针焊接好,再做个外壳装好吧。调整好的电位器用固定电阻代替。

18.jpg


到此,一个解方程的计算器就做好了,拿到同学面前炫耀一下吧,可千万不要带进考场,小心被抓个处分还包邮哦。

下面是流程图和程序。

19.jpg


    本计算器源程序:请点击




关于我们 | 联系我们
© 好好搭搭在线 浙ICP备19030393号-1 浙公网安备 33010402003970号