赞
踩
用STM32实现简单的计算器,有基本的加减乘除,需要的小伙伴请点赞拿走
原理图
源程序代码
main.c
- #include "stm32f10x.h"
- #include "delay.h"
- #include "stdio.h"
- #include "LCD1602.h"
- #include "keyscan.h"
- #include "tsensor.h"
- #include "usart.h"
- #include "rtc.h"
- #define uint unsigned int
- #define uchar unsigned char
-
-
- uchar table[]= {" "};
- unsigned char w_tab[]={"20200401044"};
-
- long int data_a=0;
- long int data_b=0;
- long int data_c=0;
- int flag_x=0;
- uchar dispaly[10];
- uchar i,j;
- uchar k=0;
- uint key=0xff;
- uchar a=0;
- uchar b=5;
- uchar c=0;
- uchar d=5;
- uchar x=0;
-
-
-
- void W_lcd(unsigned char x,unsigned char y,unsigned char Data)
- {
- if(y==0) //
- {
- LCD_write_cmd(0x80 + x); //
- }
- else //
- {
- LCD_write_cmd(0xc0 + x); //
- }
- LCD_write_data(Data); //
- }
-
-
-
- void display_a() //
- {
- dispaly[4]=data_a%100000/10000; //
- dispaly[3]=data_a%10000/1000; //
- dispaly[2]=data_a%1000/100; //
- dispaly[1]=data_a%100/10; //
- dispaly[0]=data_a%10; //
-
- LCD_write_cmd(0x80+0); //
- if(data_a>9999)
- {
- LCD_write_data('0'+dispaly[4]); //
- }
- if(data_a>999)
- {
- LCD_write_data('0'+dispaly[3]); //
- }
- if(data_a>99)
- {
- LCD_write_data('0'+dispaly[2]); //
- }
- if(data_a>9)
- {
- LCD_write_data('0'+dispaly[1]); //
- }
- LCD_write_data('0'+dispaly[0]); //
- }
-
-
- void display_b() //
- {
- LCD_write_cmd(0x80+8); //
- dispaly[4]=data_b%100000/10000; //
- dispaly[3]=data_b%10000/1000; //
- dispaly[2]=data_b%1000/100;
- dispaly[1]=data_b%100/10; //
- dispaly[0]=data_b%10; //
- if(data_b>9999)
- {
- LCD_write_data('0'+dispaly[4]); //
- }
- if(data_b>999)
- {
- LCD_write_data('0'+dispaly[3]); //
- }
- if(data_b>99)
- {
- LCD_write_data('0'+dispaly[2]); //
- }
- if(data_b>9)
- {
- LCD_write_data('0'+dispaly[1]); //
- }
- LCD_write_data('0'+dispaly[0]); //
- }
-
-
- void display_c(x)
- {
- if(data_c<100000000&&data_c>-1) //
- {
- dispaly[8]=data_c%1000000000/100000000; //
- dispaly[7]=data_c%100000000/10000000; //
- dispaly[6]=data_c%10000000/1000000; //
- dispaly[5]=data_c%1000000/100000; //
- dispaly[4]=data_c%100000/10000; //
- dispaly[3]=data_c%10000/1000; //
- dispaly[2]=data_c%1000/100; //
- dispaly[1]=data_c%100/10; //
- dispaly[0]=data_c%10; //
- LCD_write_cmd(0x80+0x40+7); //
- }
- else
- {
- if(data_c>99999999)
- {
- LCD_write_data('0'+dispaly[8]); //
- }
- if(data_c>9999999)
- {
- LCD_write_data('0'+dispaly[7]); //
- }
- if(data_c>999999)
- {
- LCD_write_data('0'+dispaly[6]); //
- }
- if(data_c>99999)
- {
- LCD_write_data('0'+dispaly[5]); //
- }
- if(data_c>9999)
- {
- LCD_write_data('0'+dispaly[4]); //
- }
- if(data_c>999)
- {
- LCD_write_data('0'+dispaly[3]); //
- }
- if(data_c>99)
- {
- LCD_write_data('0'+dispaly[2]); //
- }
- if(data_c>9)
- {
- LCD_write_data('0'+dispaly[1]); //
- }
- LCD_write_data('0'+dispaly[0]); //
- }
- }
- else //
- {
- LCD_write_cmd(0x80+0x40+11); //
- LCD_write_data('E'); //
- LCD_write_data('r'); //
- LCD_write_data('r'); //
- LCD_write_data('o'); //
- LCD_write_data('r'); //
- }
- }
-
-
- void eql(uchar yunsuan) //
- {
- switch(yunsuan) //
- {
- case 1: data_c=data_a+data_b; //
- break; //
-
- case 2: if(data_a>=data_b) //
- {
- data_c=data_a-data_b; //
- }
- else //
- {
- data_c=data_b-data_a; //
- W_lcd(5,1,'-'); //
- }
- break; //
-
- case 3: data_c=(data_a*data_b); //
- break; //
-
- case 4: if(data_b==0) //
- {
- LCD_write_string(1,1,"Error");//
- }
- else
- {
- data_c=data_a/data_b;//
- }
- break; //
-
- case 0: break; //
- }
- }
-
-
-
-
- void main(void)
- {
- int flag=1;
- LCD_init(); //
- LCD_write_cmd(0x01); //
- display_a(); //
- delay_init();
- while(1)
- {
- if(!GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_0))
- {
- while(!GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_0));
- flag_x=1;
- LCD_write_string(0,0,table);
- display_a();
- }
- if(flag_x==1)
- {
- //GPIO_ResetBits(GPIOA,GPIO_Pin_12);
- //display_a();
- key=keyscan(); //
- //delay_ms(500);
- if(key!=0xff) //
- {
- if(key<10&&flag==1)
- {
- if(a<5) //n<5
- {
- data_a=data_a*10+key; //
- b=5; //m=5
- display_a(); //
- }
- a++; //n+1
- if(b<5) //m<5
- {
- data_b=data_b*10+key; //
- a=6; //n=6
- display_b(); //
- }
- b++; //m+1
- }
-
-
- if(key<10&&flag!=1)
- {
- if(c<5)
- {
- LCD_write_cmd(0x01); //
- data_a=data_c;
- data_b=0; //
- display_a(); //
- display_b();
- b=5; //m=5 //
- c=6;
- }
-
- if(b<5) //m<5
- {
-
- data_b=data_b*10+key; //
- c=6;
- display_b(); //
- }
- b++; //m+1
- }
-
-
- else
- {
- switch(key) //
- {
- case 10:a=5;b=0;x=1;c=5;
- W_lcd(6,0,'+'); //
- break;
-
- case 11:a=5;b=0;x=2;c=5;
- W_lcd(6,0,'-'); //
- break; //
-
- case 12:a=5;b=0;x=3;c=5;
- W_lcd(6,0,'*'); //
- break; //
-
- case 13:a=5;b=0;x=4;c=5;
- W_lcd(6,0,'/'); //
- break; //
-
- case 14:a=5;b=5;c=0;
- eql(x); //
- W_lcd(0,1,'='); //
- display_c(x); //
- flag++;
- break; //
-
- case 15:a=0;x=0;b=0;c=0;flag=1;
- data_a=0; //aÊý¾ÝÇå0
- data_b=0; //bÊý¾ÝÇå0
- data_c=0; //cÊý¾ÝÇå0
- LCD_write_string(0,0,table);
- LCD_write_string(0,1,table);
- W_lcd(0,0,'0'); //
- break; //
- }
- }
- do{key=keyscan();}
- while(key!=0xff); //
- /*
- while(key!=0xff)
- {
- key=keyscan();
- }*/
- }//(0xff!=key)
-
- }
- else
- {
- LCD_write_string(0,0,w_tab);
- }
- }//while
- }//main
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。