文章目录
- 一、功能简介
- 二、软件设计
- 三、实验现象
- 联系作者
一、功能简介
本项目使用STM32F103C8T6单片机控制器,使用动态数码管模块、矩阵按键、蜂鸣器模块等。
主要功能:
系统运行后,数码管默认显示0,输入对应的操作数进行四则运算,支持最大8位显示,支持显示小数点后2位数。
二、软件设计
/*
作者:嗨小易(QQ:3443792007)
*/
//将整数各位取出存放数组
//num:转换的整数
//buf:转换后存储到数组内
//返回值:整数的长度
u8 int_to_array(u32 num,u8 buf[])
{
u8 i=0;
u8 tempbuf[SMG_SHOW_BITNUM];
int j=0;
u8 cnt=0;
if(num!=0)//传入的数据不为0
{
while(num!=0)
{
tempbuf[i]=num%10;//将各个位的数赋值于数组tempbuf[i]
num/=10;//现在数组tempbuf[i]记录的是各个位上的数的反序
i++;//i记录这个数是几位数
}
for(j=i-1;j>=0;j--)
{
buf[cnt++]=gsmg_code[tempbuf[j]];
}
}
else//传入的数据为0
buf[cnt++]=gsmg_code[0];
return cnt;
}
//计算结果并显示
void get_result_show(void)
{
u8 smgbuf[SMG_SHOW_BITNUM];
u8 bitnum=0;
u8 key=0;
u8 buf[3];//缓存显示小数的数据
while(1)
{
key=KEY_Matrix_Scan();
if(key==14) //清除操作
{
sys_ctrl.equal=0;
sys_ctrl.sign=0;
sys_ctrl.curNum=0;
sys_ctrl.preNum=0;
sys_ctrl.dot=0;
break;
}
//等号键、计算结果
if(sys_ctrl.equal==SIGN_EQUAL)
{
switch(sys_ctrl.sign)
{
case SIGN_ADD: sys_ctrl.result=sys_ctrl.preNum+sys_ctrl.curNum;break;
case SIGN_MIN:
if(sys_ctrl.preNum<sys_ctrl.curNum)
sys_ctrl.result=sys_ctrl.curNum-sys_ctrl.preNum;
else
sys_ctrl.result=sys_ctrl.preNum-sys_ctrl.curNum;
break;
case SIGN_MUL: sys_ctrl.result=sys_ctrl.preNum*sys_ctrl.curNum;break;
case SIGN_DIV:
if(sys_ctrl.curNum!=0)
sys_ctrl.result=(float)sys_ctrl.preNum/sys_ctrl.curNum;
if(sys_ctrl.result!=(int)sys_ctrl.result)//有小数,保留小数后2位
{
sys_ctrl.result=sys_ctrl.result*100;
sys_ctrl.dot=2;
}
break;
}
bitnum=int_to_array(sys_ctrl.result,smgbuf);
if(sys_ctrl.dot)//有小数显示
{
if(sys_ctrl.result<10)//放大100倍结果小于10,比如0.01
{
buf[0]=0x3f|0x80;
buf[1]=0x3f;
buf[2]=smgbuf[0];
SMG_Display(buf,SMG_SHOW_BITNUM-1-bitnum);
}
else if(sys_ctrl.result<100)//放大100倍结果小于100,比如0.12
{
buf[0]=0x3f|0x80;
buf[1]=smgbuf[0];
buf[2]=smgbuf[1];
SMG_Display(buf,SMG_SHOW_BITNUM-bitnum);
}
else
{
smgbuf[bitnum-1-sys_ctrl.dot]|=0x80;
SMG_Display(smgbuf,SMG_SHOW_BITNUM+1-bitnum);
}
}
else //无小数显示
SMG_Display(smgbuf,SMG_SHOW_BITNUM+1-bitnum);
sys_ctrl.sign=0;
}
else
{
sys_ctrl.equal=0;
break;
}
}
}
三、实验现象
B站演示视频:https://space.bilibili.com/444388619
联系作者
专注于51单片机、STM32、国产32、DSP、Proteus、ardunio、ESP32、物联网软件开发,PCB设计,视频分享,技术交流。