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 |