找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2267|回复: 1
打印 上一主题 下一主题
收起左侧

stm32单片机计算器

[复制链接]
跳转到指定楼层
楼主
ID:356614 发表于 2018-6-28 23:05 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式


单片机源程序如下:
  1. #include <stm32f10x.h>
  2. #include <math.h>
  3. #include <bit.h>
  4. #define key1   PAIN(0)     //列
  5. #define key2   PAIN(1)
  6. #define key3   PAIN(2)
  7. #define key4   PAIN(3)
  8. #define led5   PAOUT(4)    //位选
  9. #define led6   PAOUT(5)
  10. #define led7   PAOUT(6)
  11. #define led8   PAOUT(7)
  12. #define led4   PAOUT(8)
  13. #define led3   PAOUT(9)
  14. #define led2   PAOUT(10)
  15. #define led1   PBOUT(6)
  16. #define duan_A PBOUT(13)   //段选
  17. #define duan_B PBOUT(14)
  18. #define duan_C PBOUT(15)
  19. #define duan_D PBOUT(8)
  20. #define duan_E PBOUT(9)
  21. #define duan_F PBOUT(10)
  22. #define duan_G PBOUT(11)
  23. #define dian   PBOUT(7)
  24. #define row1   PBOUT(12)     //行
  25. #define row2   PBOUT(0)
  26. #define row3   PBOUT(1)
  27. #define row4   PBOUT(5)
  28. void delay()
  29. {
  30.         int i,j;
  31.         for(i=0;i<100;i++)
  32.         {
  33.                 for(j=0;j<15;j++){       
  34.                 ;}
  35.         }       
  36. }
  37. void mydelay()
  38. {
  39.         int i,j;
  40.         for(i=0;i<30000;i++)
  41.         {
  42.                 for(j=0;j<15;j++){       
  43.                 ;}
  44.         }       
  45. }
  46. void shuzi(int shuzu[],int i){
  47.      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;}
  48.      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;}
  49.      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;}
  50.      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;}
  51.      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;}
  52.      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;}
  53.      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;}
  54.      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;}
  55.      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;}
  56.      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;}
  57.      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;}
  58. }
  59. void shuzi1(double shuzu1[],int i){
  60.            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;}
  61.      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;}
  62.      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;}
  63.      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;}
  64.      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;}
  65.      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;}
  66.      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;}
  67.      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;}
  68.      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;}
  69.      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;}
  70.      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;}
  71. }
  72. void weixianshi(int a[],int shu,int *yes){
  73.        
  74.         if(*yes==1){
  75.          a[0]=a[1];
  76.           a[1]=a[2];
  77.           a[2]=a[3];
  78.           a[3]=shu;
  79.           *yes=0;
  80.                }                               
  81. }
  82. void xianshi(int shuzu[],double shuzu1[]){
  83.         int i;
  84.        led8=0;
  85.      shuzi(shuzu,3);
  86.               dian=1;
  87.      delay();
  88.                dian=0;
  89.         led8=1;
  90.          delay();
  91.         led7=0;i=2;
  92.      shuzi(shuzu,2);
  93.         delay();
  94.        led7=1;
  95.          delay();
  96.       led6=0;i=1;
  97.        shuzi(shuzu,1);
  98.      delay();
  99.       led6=1;
  100.         delay();
  101.      led5=0;i=0;   
  102.    shuzi(shuzu,0);
  103.     delay();
  104.       led5=1;
  105.           delay();
  106.           led4=0;   
  107.    shuzi1(shuzu1,0);
  108.     delay();
  109.       led4=1;
  110.           delay();
  111.           led3=0;  
  112.    shuzi1(shuzu1,1);
  113.     delay();
  114.       led3=1;
  115.           delay();
  116.           led2=0;
  117.    shuzi1(shuzu1,2);
  118.     delay();
  119.       led2=1;
  120.           delay();
  121.             led1=0;
  122.    shuzi1(shuzu1,3);
  123.     delay();
  124.       led1=1;
  125.           delay();
  126. }
  127. void jishu(int a[],int b,int yuansu[],int *suanfa,double shuzu1[]){
  128.           int qian,bai,shi,ge,jieguo;
  129.           double jieguo1;
  130.          if((b!=5)&&(b!=0)){
  131.                   mydelay();
  132.           qian=a[0]==-1?0:a[0];
  133.            bai=a[1]==-1?0:a[1];
  134.           shi=a[2]==-1?0:a[2];
  135.             ge=a[3]==-1?0:a[3];
  136.           yuansu[0]=qian*1000+bai*100+shi*10+ge;
  137.            *suanfa=b;
  138.                 a[0]=-1;a[1]=-1;a[2]=-1;a[3]=-1;
  139.                                 }
  140.         if(b==5)
  141.       {   mydelay();
  142.          qian=a[0]==-1?0:a[0];
  143.            bai=a[1]==-1?0:a[1];
  144.           shi=a[2]==-1?0:a[2];
  145.             ge=a[3]==-1?0:a[3];
  146.           yuansu[1]=qian*1000+bai*100+shi*10+ge;
  147.          if(*suanfa==1)  jieguo=yuansu[0]+yuansu[1];
  148.           if(*suanfa==2)  jieguo=yuansu[0]-yuansu[1];
  149.           if(*suanfa==3)  jieguo=yuansu[0]*yuansu[1];
  150.            if(*suanfa==4)  
  151.                                                  {jieguo=(int)(floor((double)yuansu[0]/(double)yuansu[1]));
  152.               jieguo1=fmod((double)yuansu[0]/(double)yuansu[1],1.0);
  153.               shuzu1[0]=(jieguo1-fmod(jieguo1,0.1))/0.1;
  154.               shuzu1[1]=(fmod(jieguo1,0.1)-fmod(fmod(jieguo1,0.1),0.01))/0.01;
  155.               shuzu1[2]=(fmod(fmod(jieguo1,0.1),0.01)-fmod(fmod(fmod(jieguo1,0.1),0.01),0.001))/0.001;
  156.               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;
  157.                            };
  158.           a[0]=jieguo/1000==0?-1:jieguo/1000;
  159.           a[1]=((jieguo%1000)/100==0&&jieguo/1000==0)?-1:(jieguo%1000)/100;
  160.           a[2]=((jieguo%1000)%100/10==0&&jieguo/1000==0&&(jieguo%1000)/100==0)?-1:(jieguo%1000)%100/10;
  161.                 a[3]=(jieguo%1000)%100%10;
  162.        }
  163. }
  164. void delet(int a[],int *suanfa,int yuansu[],double shuzu1[]){
  165.                 a[0]=-1;a[1]=-1;a[2]=-1;a[3]=-1;
  166.                 shuzu1[0]=shuzu1[1]=shuzu1[2]=shuzu1[3]=-1;
  167.                  *suanfa=0;
  168.                 yuansu[0]=0;yuansu[1]=0;
  169. }
  170. int main(void)
  171. {   int yes=0,b=0,suanfa=0,shu=-2;
  172.     int yuansu[2]={0,0};
  173.     int shuzu[4]={-1,-1,-1,-1};
  174. double shuzu1[4]={-1,-1,-1,-1};   
  175.         GPIO_InitTypeDef GPIO_InitStructure;
  176.         RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB|RCC_APB2Periph_GPIOA,ENABLE);
  177. //列的初始化
  178.         GPIO_InitStructure.GPIO_Mode=GPIO_Mode_IPU;
  179.         GPIO_InitStructure.GPIO_Pin=GPIO_Pin_0|GPIO_Pin_1|GPIO_Pin_2|GPIO_Pin_3;
  180.         GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;
  181.         GPIO_Init(GPIOA,&GPIO_InitStructure);
  182. //位选初始化       
  183.         GPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_PP;
  184.         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;
  185.         GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;
  186.         GPIO_Init(GPIOA,&GPIO_InitStructure);
  187.         led5=0,led6=0,led7=0,led8=0,led4=0,led3=0,led2=0;
  188. //段选初始化       
  189.         GPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_PP;
  190.         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;
  191.         GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;
  192.         GPIO_Init(GPIOB,&GPIO_InitStructure);
  193.         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;
  194. //行的初始化
  195.         GPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_PP;
  196.         GPIO_InitStructure.GPIO_Pin=GPIO_Pin_12|GPIO_Pin_0|GPIO_Pin_1|GPIO_Pin_5;
  197.         GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;
  198.         GPIO_Init(GPIOB,&GPIO_InitStructure);
  199.         row1=0,row2=0,row3=0,row4=0;
  200.         while(1)
  201.         {
  202.       row1=0,row2=1,row3=1,row4=1;
  203. ……………………

  204. …………限于本文篇幅 余下代码请从51黑下载附件…………
复制代码

所有资料51hei提供下载:
单片机计算器.rar (248.97 KB, 下载次数: 37)


分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:1 发表于 2018-6-29 00:58 | 只看该作者
原理图能分享吗? 可附送积分
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表