找回密码
 注册
关于网站域名变更的通知
查看: 122|回复: 2
打印 上一主题 下一主题

基于stm32简易计算器制作(lcd1602显示)

[复制链接]

该用户从未签到

跳转到指定楼层
1#
发表于 2022-5-31 09:27 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

EDA365欢迎您登录!

您需要 登录 才可以下载或查看,没有帐号?注册

x
stm32f03c8t6单片机做的一个简易计算器,用4×4矩阵键盘输入,LCD1602显示。下面是对我计算器的介绍,附件中还可以下载源程序代码码。我的简易计算器是搭建在面包板上面的,下面这是实物图和仿真图。3 X; c9 O) ^. B* n) ^+ u+ M. h& U
      
% U( \5 t7 t  T
* K# W5 K* r* C: N1 C( R
9 y( Z7 H, C& V$ i
该计算器可以实现连续加减运算图:9 ?# q1 g( p6 t, U% L! b
" E0 P: g+ }* w5 H

4 f# R3 u+ K+ G# D
   ' P/ Y/ ]; \! d  t3 H2 z
较大数字或者较小数字可以用科学计数法显示
      
' r0 F1 C( i' |- o3 T) R: S

) y+ e5 G1 ^+ V( C7 K
当用除法运算时,能够保留三位小数字
   - I& s& \. [8 W3 q% o
7 @  E- W  r! f% g) _0 e
, p/ J! C8 y6 u( [8 ^$ G
另外,在运算时还可以通过串口观察数据变化

) [0 r; M1 ?5 W
下面是部分源码:
#include "stm32f10x.h"
#include "delay.h"
#include "keyscan.h"
#include "LCD1602.h"
#include "usart.h"
#include "math.h"
u8 num,flag;
double r,o;
long long a,b,x,y,z,sum,k;
int e,f,g,h,i,t,len,w,l;
int s,m,w,j,q,d,n,c=0;
6 J- [0 U0 o( i7 n
int main()
{
        LCD_init();
        uart_init(9600);
( W6 u; ?2 Z! T, d, O
        while(1)
        {
          num=keyscan();
                a=num;
                                if(a>=0&&a<=9&&s!=2&&flag!=0)
                                {
                                        if(a!=0||n!=0)
                                        {
                                                LCD_write_data((u8)a+0x30);
                                                if(n==0)
                                                {
                                                        b=a;
                                                }
                                                else
                                                {
                                                        b=sum*10;
                                                        sum=a;
                                                }
                                                sum=sum+b;
///////////////////////////////                        
            if(q==0&&j==0)
            {                                 
                                                                x=sum;
                                                                printf("x=%lld ",x);
                                                                d=1;
                                                                m=0;
            }
1 |+ D% A+ s2 E# h+ w# D2 l
                       if(q==1&&j==1)
                                         {
                                                                x=-sum;
                                                                printf("x=%lld ",x);
                                                                d=1;
                                                                m=0;
            }
: R7 H1 `/ H# O1 p! R9 w, n4 w
/////////////////////////////////
+ e0 ~+ R% r; P0 C# H# d' c5 k
            if(q==1&&(j==2||j==0))
            {                    
              y=sum;
                                                        printf("y=%lld ",y);
                                                        d=2;
            }

# B* X0 m0 H  C( K9 n) u0 c
0 w- [+ \3 |  k4 U$ u6 u6 B
/////////////////////////////////
            n++;
                                                w++;
                                    delay_ms(100);
                                  }
                         }
                        if(a==10&n!=0&&m!=1&&flag!=0)//+
                   {
                                  if(c>=1)
                                        {
                                        q=1;
                                        j=0;
                                        x=z;
. g) F0 d5 b3 I- N& b
                                        }
                      //LCD_write_data('+');
                                        LCD_write_data(0x2b);
                                        printf(" + ");
                                        j=0;
                                        n=0;
                                        q=1;
                                        flag=1;
                                        b=0;
                                        sum=0;
                                  c++;
                                  w++;

, W. r4 p6 |" G+ k: P1 u
                                        delay_ms(100);
                         }
                        if(a==11&&m!=1&&flag!=0)
                        {
                                //LCD_write_data('-');
                          LCD_write_data(0x2d);//''
                                printf(" - ");
                                if(c>=1)
                                        {
                                        q=1;
                                        j=0;
                                        x=z;
0 |& ]+ T2 b: e) `5 u) k
                                        }

5 q; [) ~- p( j3 Q+ c, r
                          if(d==0)
                                {
                                j=1;
                                }
                                if(d==1)
                                {
                                j=2;
                                }
& j$ {8 B# N8 |4 }
                    n=0;
        q=1;
        flag=2;
                          b=0;
                          sum=0;
                          m=-m;
                          w++;
                                c++;
                                delay_ms(100);
                 }
2 E* L1 \, G9 ]# w" b4 y
                if(a==12&n!=0&&m!=1&&flag!=0)
                {
                          LCD_write_data('*');//×
                                //LCD_write_data(0x2a);//×
                          if(c>=1)
                                        {
                                        q=1;
                                        j=0;
                                        x=z;

  x7 r( k% |3 O0 ^' a9 P1 l! U. o
                                        }
                                printf(" * ");
                          j=0;
        n=0;
        q=1;
        flag=3;
                          b=0;
                          sum=0;
                          m=-m;
                          w++;
                                c++;
                                delay_ms(100);
                }
                if(a==13&n!=0&&m!=1&&flag!=0)
                {
                        // LCD_write_data('');//除号
                                LCD_write_data(0xfd);//÷
                          if(c>=1)
                                        {
                                        q=1;
                                        j=0;
                                        x=z;

! w8 z. O* X6 h& S
                                        }
                                printf("/");

) [  b( K: ?. v# x6 g, J, v

该用户从未签到

2#
发表于 2022-5-31 11:20 | 只看该作者
来了来了,学习学习。

该用户从未签到

3#
发表于 2022-5-31 14:27 | 只看该作者
学习学习,支持版主
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

推荐内容上一条 /1 下一条

EDA365公众号

关于我们|手机版|EDA365电子论坛网 ( 粤ICP备18020198号-1 )

GMT+8, 2025-7-19 09:48 , Processed in 0.109375 second(s), 23 queries , Gzip On.

深圳市墨知创新科技有限公司

地址:深圳市南山区科技生态园2栋A座805 电话:19926409050

快速回复 返回顶部 返回列表