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 jint 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
|