STM32裸机四则运算计算器实现,无需操作系统

能实现简单的四则运算,加减乘除,不需要操作系统,五个按键加上一个LCD屏幕就可以解决。

1.按键初始化

void KEY_Init(void) //IO初始化
{ 
 	GPIO_InitTypeDef GPIO_InitStructure;
 
 	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOE,ENABLE);//ʹÄÜPORTA,PORTEʱÖÓ

    //KEY0~KEY4
    GPIO_InitStructure.GPIO_Pin =GPIO_Pin_2|GPIO_Pin_3|GPIO_Pin_4|GPIO_Pin_5|GPIO_Pin_6;
	GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU; //上拉输入
 	GPIO_Init(GPIOE, &GPIO_InitStructure);//初始化IO口

}

 因为设置的是上拉输入,所以是接地。

2.按键处理函数

//按键处理函数
//返回按键值
//mode:0,不支持连按´;1,支持连按;
u8 KEY_Scan(u8 mode)
{	 
	static u8 key_up=1;//按键松开标志
	if(mode)key_up=1;  //支持连按		  
	if(key_up&&(KEY0==0||KEY1==0||KEY2==0||KEY3==0||KEY4==0))
	{
		delay_ms(10);//去抖动
		key_up=0;
		if(KEY0==0)return KEY0_PRES;
		else if(KEY1==0)return KEY1_PRES;
		else if(KEY2==0)return KEY2_PRES;
		else if(KEY3==0)return KEY3_PRES;
		else if(KEY4==0)return KEY4_PRES;
	}else if(KEY0==1&&KEY1==1&&KEY2==1&&KEY3==1&&KEY4==1)key_up=1; 	    
 	return 0;// 无按键按下
}

3.主函数

 int main(void)
 {	 
 	u16 x,y=0;
    u16 Z,flag,num=0;
	vu8 key=0;
	delay_init();	    	 //延时函数初始化

   //设置NVIC中断分组2,2位抢占优先级,2位响应优先级
	NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);
	uart_init(115200);	 	//´串口初始化为115200
	LCD_Init();  //LCD屏幕初始化
    KEY_Init();  //按键初始化
	POINT_COLOR=RED;  //设置字体为红色
  	while(1) 
	{
		
		key=KEY_Scan(0);	//等到键值
	   	if(key)
		{						   
			switch(key)
			{			
        case KEY2_PRES:		
					flag=1;
        break;				
				case KEY0_PRES:
					if (flag==1)x--;
				  else   x++;
					break; 
				case KEY1_PRES:
					if (flag==1)y--;
					else  y++;
					break;
				case KEY3_PRES:
       {u8 i;
		     i++;
					
				if(i>4)i=0;
					switch(i)
					{case 1:
						LCD_ShowString(55,150,10,10,24,(u8*)"+");
						Z=1;
						break;						
  					case 2: 
						LCD_ShowString(55,150,10,10,24,(u8*)"-");
						Z=2;
						break;
						case 3: 
						LCD_ShowString(55,150,10,10,24,(u8*)"*");
						Z=3;
						break;
						case 4: 
						LCD_ShowString(55,150,10,10,24,(u8*)"/");
						Z=4;
						break;
						}
				};break;
			 
				case KEY4_PRES:	
         flag=0;					
				if(Z==1)num=x+y;
				if(Z==2)num=x-y;
				if(Z==3)num=x*y;
				if(Z==4)num=x/y;
        break;	
				
			}
		}else delay_ms(10); 
	
		LCD_ShowNum(30,120,x,4,24);
		LCD_ShowNum(30,180,y,4,24);
		LCD_ShowString(55,210,10,10,24,(u8*)"="); 	
		LCD_ShowNum(30,240,num,5,24);
	}
		
}

KEY2按键。按下去之后标志位flag就会发生变化,当确定flag变成1的时候在按下KEY0和KEY1时,x,y的值就是变成减少的,否则就是增加。每次增加1或者减少1。通过按下KEY3,运用switch语句获取当前运算符号。

实验结果

 

制作不易,需要完整的工程文件,点赞加收藏评论区留邮箱

物联沃分享整理
物联沃-IOTWORD物联网 » STM32裸机四则运算计算器实现,无需操作系统

发表评论