标题:
stm32单片机计算器
[打印本页]
作者:
一无是处
时间:
2018-6-28 23:05
标题:
stm32单片机计算器
单片机源程序如下:
#include <stm32f10x.h>
#include <math.h>
#include <bit.h>
#define key1 PAIN(0) //列
#define key2 PAIN(1)
#define key3 PAIN(2)
#define key4 PAIN(3)
#define led5 PAOUT(4) //位选
#define led6 PAOUT(5)
#define led7 PAOUT(6)
#define led8 PAOUT(7)
#define led4 PAOUT(8)
#define led3 PAOUT(9)
#define led2 PAOUT(10)
#define led1 PBOUT(6)
#define duan_A PBOUT(13) //段选
#define duan_B PBOUT(14)
#define duan_C PBOUT(15)
#define duan_D PBOUT(8)
#define duan_E PBOUT(9)
#define duan_F PBOUT(10)
#define duan_G PBOUT(11)
#define dian PBOUT(7)
#define row1 PBOUT(12) //行
#define row2 PBOUT(0)
#define row3 PBOUT(1)
#define row4 PBOUT(5)
void delay()
{
int i,j;
for(i=0;i<100;i++)
{
for(j=0;j<15;j++){
;}
}
}
void mydelay()
{
int i,j;
for(i=0;i<30000;i++)
{
for(j=0;j<15;j++){
;}
}
}
void shuzi(int shuzu[],int i){
if(shuzu[i]==-1) {duan_A=0,duan_B=0,duan_C=0,duan_D=0,duan_E=0,duan_F=0,duan_G=0;}
if(shuzu[i]==0) {duan_A=1,duan_B=1,duan_C=1,duan_D=1,duan_E=1,duan_F=1,duan_G=0;}
if(shuzu[i]==1) {duan_A=0,duan_B=1,duan_C=1,duan_D=0,duan_E=0,duan_F=0,duan_G=0;}
if(shuzu[i]==2) {duan_A=1,duan_B=1,duan_C=0,duan_D=1,duan_E=1,duan_F=0,duan_G=1;}
if(shuzu[i]==3) {duan_A=1,duan_B=1,duan_C=1,duan_D=1,duan_E=0,duan_F=0,duan_G=1;}
if(shuzu[i]==4) {duan_A=0,duan_B=1,duan_C=1,duan_D=0,duan_E=0,duan_F=1,duan_G=1;}
if(shuzu[i]==5) {duan_A=1,duan_B=0,duan_C=1,duan_D=1,duan_E=0,duan_F=1,duan_G=1;}
if(shuzu[i]==6) {duan_A=1,duan_B=0,duan_C=1,duan_D=1,duan_E=1,duan_F=1,duan_G=1;}
if(shuzu[i]==7) {duan_A=1,duan_B=1,duan_C=1,duan_D=0,duan_E=0,duan_F=0,duan_G=0;}
if(shuzu[i]==8) {duan_A=1,duan_B=1,duan_C=1,duan_D=1,duan_E=1,duan_F=1,duan_G=1;}
if(shuzu[i]==9) {duan_A=1,duan_B=1,duan_C=1,duan_D=1,duan_E=0,duan_F=1,duan_G=1;}
}
void shuzi1(double shuzu1[],int i){
if(shuzu1[i]==-1) {duan_A=0,duan_B=0,duan_C=0,duan_D=0,duan_E=0,duan_F=0,duan_G=0;}
if(shuzu1[i]==0.0) {duan_A=1,duan_B=1,duan_C=1,duan_D=1,duan_E=1,duan_F=1,duan_G=0;}
if(shuzu1[i]==1.0) {duan_A=0,duan_B=1,duan_C=1,duan_D=0,duan_E=0,duan_F=0,duan_G=0;}
if(shuzu1[i]==2.0) {duan_A=1,duan_B=1,duan_C=0,duan_D=1,duan_E=1,duan_F=0,duan_G=1;}
if(shuzu1[i]==3.0) {duan_A=1,duan_B=1,duan_C=1,duan_D=1,duan_E=0,duan_F=0,duan_G=1;}
if(shuzu1[i]==4.0) {duan_A=0,duan_B=1,duan_C=1,duan_D=0,duan_E=0,duan_F=1,duan_G=1;}
if(shuzu1[i]==5.0) {duan_A=1,duan_B=0,duan_C=1,duan_D=1,duan_E=0,duan_F=1,duan_G=1;}
if(shuzu1[i]==6.0) {duan_A=1,duan_B=0,duan_C=1,duan_D=1,duan_E=1,duan_F=1,duan_G=1;}
if(shuzu1[i]==7.0) {duan_A=1,duan_B=1,duan_C=1,duan_D=0,duan_E=0,duan_F=0,duan_G=0;}
if(shuzu1[i]==8.0) {duan_A=1,duan_B=1,duan_C=1,duan_D=1,duan_E=1,duan_F=1,duan_G=1;}
if(shuzu1[i]==9.0) {duan_A=1,duan_B=1,duan_C=1,duan_D=1,duan_E=0,duan_F=1,duan_G=1;}
}
void weixianshi(int a[],int shu,int *yes){
if(*yes==1){
a[0]=a[1];
a[1]=a[2];
a[2]=a[3];
a[3]=shu;
*yes=0;
}
}
void xianshi(int shuzu[],double shuzu1[]){
int i;
led8=0;
shuzi(shuzu,3);
dian=1;
delay();
dian=0;
led8=1;
delay();
led7=0;i=2;
shuzi(shuzu,2);
delay();
led7=1;
delay();
led6=0;i=1;
shuzi(shuzu,1);
delay();
led6=1;
delay();
led5=0;i=0;
shuzi(shuzu,0);
delay();
led5=1;
delay();
led4=0;
shuzi1(shuzu1,0);
delay();
led4=1;
delay();
led3=0;
shuzi1(shuzu1,1);
delay();
led3=1;
delay();
led2=0;
shuzi1(shuzu1,2);
delay();
led2=1;
delay();
led1=0;
shuzi1(shuzu1,3);
delay();
led1=1;
delay();
}
void jishu(int a[],int b,int yuansu[],int *suanfa,double shuzu1[]){
int qian,bai,shi,ge,jieguo;
double jieguo1;
if((b!=5)&&(b!=0)){
mydelay();
qian=a[0]==-1?0:a[0];
bai=a[1]==-1?0:a[1];
shi=a[2]==-1?0:a[2];
ge=a[3]==-1?0:a[3];
yuansu[0]=qian*1000+bai*100+shi*10+ge;
*suanfa=b;
a[0]=-1;a[1]=-1;a[2]=-1;a[3]=-1;
}
if(b==5)
{ mydelay();
qian=a[0]==-1?0:a[0];
bai=a[1]==-1?0:a[1];
shi=a[2]==-1?0:a[2];
ge=a[3]==-1?0:a[3];
yuansu[1]=qian*1000+bai*100+shi*10+ge;
if(*suanfa==1) jieguo=yuansu[0]+yuansu[1];
if(*suanfa==2) jieguo=yuansu[0]-yuansu[1];
if(*suanfa==3) jieguo=yuansu[0]*yuansu[1];
if(*suanfa==4)
{jieguo=(int)(floor((double)yuansu[0]/(double)yuansu[1]));
jieguo1=fmod((double)yuansu[0]/(double)yuansu[1],1.0);
shuzu1[0]=(jieguo1-fmod(jieguo1,0.1))/0.1;
shuzu1[1]=(fmod(jieguo1,0.1)-fmod(fmod(jieguo1,0.1),0.01))/0.01;
shuzu1[2]=(fmod(fmod(jieguo1,0.1),0.01)-fmod(fmod(fmod(jieguo1,0.1),0.01),0.001))/0.001;
shuzu1[3]=(fmod(fmod(fmod(jieguo1,0.1),0.01),0.001)-fmod(fmod(fmod(fmod(jieguo1,0.1),0.01),0.001),0.0001))/0.0001;
};
a[0]=jieguo/1000==0?-1:jieguo/1000;
a[1]=((jieguo%1000)/100==0&&jieguo/1000==0)?-1:(jieguo%1000)/100;
a[2]=((jieguo%1000)%100/10==0&&jieguo/1000==0&&(jieguo%1000)/100==0)?-1:(jieguo%1000)%100/10;
a[3]=(jieguo%1000)%100%10;
}
}
void delet(int a[],int *suanfa,int yuansu[],double shuzu1[]){
a[0]=-1;a[1]=-1;a[2]=-1;a[3]=-1;
shuzu1[0]=shuzu1[1]=shuzu1[2]=shuzu1[3]=-1;
*suanfa=0;
yuansu[0]=0;yuansu[1]=0;
}
int main(void)
{ int yes=0,b=0,suanfa=0,shu=-2;
int yuansu[2]={0,0};
int shuzu[4]={-1,-1,-1,-1};
double shuzu1[4]={-1,-1,-1,-1};
GPIO_InitTypeDef GPIO_InitStructure;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB|RCC_APB2Periph_GPIOA,ENABLE);
//列的初始化
GPIO_InitStructure.GPIO_Mode=GPIO_Mode_IPU;
GPIO_InitStructure.GPIO_Pin=GPIO_Pin_0|GPIO_Pin_1|GPIO_Pin_2|GPIO_Pin_3;
GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;
GPIO_Init(GPIOA,&GPIO_InitStructure);
//位选初始化
GPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_PP;
GPIO_InitStructure.GPIO_Pin=GPIO_Pin_4|GPIO_Pin_5|GPIO_Pin_6|GPIO_Pin_7|GPIO_Pin_8|GPIO_Pin_9|GPIO_Pin_10;
GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;
GPIO_Init(GPIOA,&GPIO_InitStructure);
led5=0,led6=0,led7=0,led8=0,led4=0,led3=0,led2=0;
//段选初始化
GPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_PP;
GPIO_InitStructure.GPIO_Pin=GPIO_Pin_13|GPIO_Pin_14|GPIO_Pin_15|GPIO_Pin_8|GPIO_Pin_9|GPIO_Pin_10|GPIO_Pin_11|GPIO_Pin_7|GPIO_Pin_6;
GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;
GPIO_Init(GPIOB,&GPIO_InitStructure);
duan_A=0,duan_B=0,duan_C=0,duan_D=0,duan_E=0,duan_F=0,duan_G=0,dian=0,led1=0;
//行的初始化
GPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_PP;
GPIO_InitStructure.GPIO_Pin=GPIO_Pin_12|GPIO_Pin_0|GPIO_Pin_1|GPIO_Pin_5;
GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;
GPIO_Init(GPIOB,&GPIO_InitStructure);
row1=0,row2=0,row3=0,row4=0;
while(1)
{
row1=0,row2=1,row3=1,row4=1;
……………………
…………限于本文篇幅 余下代码请从51黑下载附件…………
复制代码
所有资料51hei提供下载:
单片机计算器.rar
(248.97 KB, 下载次数: 37)
2018-6-29 00:57 上传
点击文件名下载附件
下载积分: 黑币 -5
作者:
admin
时间:
2018-6-29 00:58
原理图能分享吗? 可附送积分
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1