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: oint 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
|