STM32计算器仿真文件及源代码下载

用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

作者:岁月神偷\’

物联沃分享整理
物联沃-IOTWORD物联网 » STM32计算器仿真文件及源代码下载

发表评论