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

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

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

x
stm32f03c8t6单片机做的一个简易计算器,用4×4矩阵键盘输入,LCD1602显示。下面是对我计算器的介绍,附件中还可以下载源程序代码码。我的简易计算器是搭建在面包板上面的,下面这是实物图和仿真图。
7 z$ Y- n) g/ ^9 [% A$ J
      
# u# I" A, ~- i1 `1 |

4 w) G2 V; Q) O1 M: x, n4 i- E

* B3 _% k$ Y% n 该计算器可以实现连续加减运算图:' g+ E  j* x3 D0 {9 n. i
( V5 x# A6 \+ d# C- G/ ~
- N' {8 H0 i# e$ m
   
; q! ~5 E4 q) E" }! `- U4 D较大数字或者较小数字可以用科学计数法显示
      
9 T+ v9 |& P; X0 W8 U7 _

: u: O. c( ]0 K2 R0 r0 N" S
当用除法运算时,能够保留三位小数字
   
8 P, g) J5 a9 m' E

) G9 Z5 T4 S6 D& h  n* S
$ @& F8 {/ J' c, E
另外,在运算时还可以通过串口观察数据变化
- C: g9 r, {) E  x6 g1 b. p
下面是部分源码:
#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;

: q' b0 ?. ^! x8 y, \1 e: C: o
int main()
{
        LCD_init();
        uart_init(9600);
, y: W) X. d8 ^2 u4 y* r/ p
        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;
            }
% T. q. w) c6 |: ~& g5 t
                       if(q==1&&j==1)
                                         {
                                                                x=-sum;
                                                                printf("x=%lld ",x);
                                                                d=1;
                                                                m=0;
            }

4 |6 ]) L  \" U" U
/////////////////////////////////

4 U8 ~9 k$ J/ B) I. {4 q
            if(q==1&&(j==2||j==0))
            {                    
              y=sum;
                                                        printf("y=%lld ",y);
                                                        d=2;
            }

4 K% l7 l+ ^& }0 `: K+ E0 f) N; Q. a5 z* W3 e9 U& `  J4 _
/////////////////////////////////
            n++;
                                                w++;
                                    delay_ms(100);
                                  }
                         }
                        if(a==10&n!=0&&m!=1&&flag!=0)//+
                   {
                                  if(c>=1)
                                        {
                                        q=1;
                                        j=0;
                                        x=z;

3 W9 e7 v; Q6 U9 G( U
                                        }
                      //LCD_write_data('+');
                                        LCD_write_data(0x2b);
                                        printf(" + ");
                                        j=0;
                                        n=0;
                                        q=1;
                                        flag=1;
                                        b=0;
                                        sum=0;
                                  c++;
                                  w++;

5 G3 }$ p1 W1 @$ H. a$ f2 ?* p
                                        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;

- j/ T9 P( S# T( ]5 v9 X( u# t( D
                                        }

1 o* A) w: u5 P1 W" }4 z  i
                          if(d==0)
                                {
                                j=1;
                                }
                                if(d==1)
                                {
                                j=2;
                                }
. V: K3 O8 p) k- ~; V
                    n=0;
        q=1;
        flag=2;
                          b=0;
                          sum=0;
                          m=-m;
                          w++;
                                c++;
                                delay_ms(100);
                 }

: `, l$ G: _- q& _7 p
                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;
- C& H* w% o  d; J& L4 q
                                        }
                                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;
& A; `/ o2 H5 M# c+ i4 q  V
                                        }
                                printf("/");
8 n) s8 V3 @7 S% W

该用户从未签到

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

该用户从未签到

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

本版积分规则

关闭

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

EDA365公众号

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

GMT+8, 2025-10-9 05:21 , Processed in 0.140625 second(s), 23 queries , Gzip On.

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

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

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