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

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

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

x
stm32f03c8t6单片机做的一个简易计算器,用4×4矩阵键盘输入,LCD1602显示。下面是对我计算器的介绍,附件中还可以下载源程序代码码。我的简易计算器是搭建在面包板上面的,下面这是实物图和仿真图。
, A/ Z) C6 j# L* e& A
      

6 ^0 u5 D. W, K$ \
5 W$ D" x7 R1 K$ H. \# N; j8 R5 o
/ v3 C& o$ Y6 V+ C
该计算器可以实现连续加减运算图:
4 N+ A5 W0 v* ~7 o/ y. N7 v

* N+ G/ }0 V0 I! o. c4 ]' j4 }/ `0 G# ~. G- S' H2 S
   + X9 [: b0 T3 ?+ H9 j7 E3 c0 ~
较大数字或者较小数字可以用科学计数法显示
      ) x, k& G" s+ E) O$ W8 l

# P) a$ X9 z4 h
当用除法运算时,能够保留三位小数字
   
1 P( \( |6 l: Q1 z: v0 b# F  r

. q0 R3 I  u7 F6 ]9 N) n

1 M# N; l! ]( }+ y& J. `0 H& y另外,在运算时还可以通过串口观察数据变化
; v" j0 ]: q. P# u
下面是部分源码:
#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;

; @2 r8 x# D3 {, K9 j
int main()
{
        LCD_init();
        uart_init(9600);

- N! o' K( r0 K" U) ]  r* a0 {' |/ d1 F. F
        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;
            }
: J* P7 U, ~( p) e
                       if(q==1&&j==1)
                                         {
                                                                x=-sum;
                                                                printf("x=%lld ",x);
                                                                d=1;
                                                                m=0;
            }
3 @0 `1 ?/ p$ `" E/ s$ O# F$ }: u' J
/////////////////////////////////
0 \4 n$ M3 p+ h7 u+ K( a" z5 u* p' _
            if(q==1&&(j==2||j==0))
            {                    
              y=sum;
                                                        printf("y=%lld ",y);
                                                        d=2;
            }

* a: W& A( y0 t! D
5 Z+ r/ g% C' }. i/ F
/////////////////////////////////
            n++;
                                                w++;
                                    delay_ms(100);
                                  }
                         }
                        if(a==10&n!=0&&m!=1&&flag!=0)//+
                   {
                                  if(c>=1)
                                        {
                                        q=1;
                                        j=0;
                                        x=z;
' I% N1 J4 q/ G; D( |
                                        }
                      //LCD_write_data('+');
                                        LCD_write_data(0x2b);
                                        printf(" + ");
                                        j=0;
                                        n=0;
                                        q=1;
                                        flag=1;
                                        b=0;
                                        sum=0;
                                  c++;
                                  w++;

$ p- d, H8 M/ y
                                        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;
' P- S# f. ^, |! H% d
                                        }

3 s* ^* y$ C5 o# }
                          if(d==0)
                                {
                                j=1;
                                }
                                if(d==1)
                                {
                                j=2;
                                }

+ P3 U+ _& G/ w* j
                    n=0;
        q=1;
        flag=2;
                          b=0;
                          sum=0;
                          m=-m;
                          w++;
                                c++;
                                delay_ms(100);
                 }

% \+ o# k/ |' w1 A. V
                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;
) G/ N' L' E& W) M
                                        }
                                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;

& ~' z9 j  S( U
                                        }
                                printf("/");
) L0 T5 E$ q* I! @; U

该用户从未签到

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

该用户从未签到

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

本版积分规则

关闭

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

EDA365公众号

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

GMT+8, 2025-6-29 20:26 , Processed in 0.078125 second(s), 23 queries , Gzip On.

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

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

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