單片機源程序如下:
- #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
|