这是我前几天用stm32f03c8t6单片机做的一个简易计算器,用4×4矩阵键盘输入,LCD1602显示。下面是对我计算器的介绍,附件中还可以下载源程序代码码。我的简易计算器是搭建在面包板上面的,下面这是实物图和仿真图。
该计算器可以实现连续加减运算图:
较大数字或者较小数字可以用科学计数法显示
当用除法运算时,能够保留三位小数字
另外,在运算时还可以通过串口观察数据变化
下面是部分源码: #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;
int main() { LCD_init(); uart_init(9600);
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; }
if(q==1&&j==1) { x=-sum; printf("x=%lld ",x); d=1; m=0; }
/////////////////////////////////
if(q==1&&(j==2||j==0)) { y=sum; printf("y=%lld ",y); d=2; }
///////////////////////////////// n++; w++; delay_ms(100); } } if(a==10&n!=0&&m!=1&&flag!=0)//+号 { if(c>=1) { q=1; j=0; x=z;
} //LCD_write_data('+'); LCD_write_data(0x2b); printf(" + "); j=0; n=0; q=1; flag=1; b=0; sum=0; c++; w++;
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;
}
if(d==0) { j=1; } if(d==1) { j=2; }
n=0; q=1; flag=2; b=0; sum=0; m=-m; w++; c++; delay_ms(100); }
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;
} 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;
} printf("/"); 有需要的小伙伴可以到附件中去下载全部代码。 由于本人储备知识量较少,基础较为薄弱,计算器中使用变量较多,代码较为繁琐,感兴趣的小伙伴们可以在评论区相互探讨学习,若计算器中还存在问题,也希望大家可以指正批评。 最后,感谢大家的支持!!!
|