简单嵌入式系统设计--数码管显示

文章目录

    • 一、 实验题目
    • 二、 实验目的
    • 三、 实验内容
    • 四、 实验结果与分析

开发环境:
联想yoga14s、Windows10、Keil uVision4、开发板STM32F103VB

一、 实验题目

控制最右边三位数码管,设置初始值为995,当按键k1每次按下时数码管三位十进制加1,当加到999时继续加1,显示为000;按键k2每次按下时数码管三位十进制减1,当减到000时继续减1,显示为999

二、 实验目的

掌握stm32的GPIO操作和中断操作,实现数码管显示、按键输入等功能。

三、 实验内容

分析题目,首先我们需要懂得如何操作GPIO。操作GPIO需要3个步骤:1、使用RCC开启GPIO的时钟;2、使用GPIO_Init函数初始化GPIO;3、使用数码管输出和按键输入的函数控制GPIO口。
对于数码管的GPIO口,需要使能GPIOB和GPIOE端口,将GPIOB设置为推挽输出;对于按键的GPIO口,需要使能GPIOC端口,将k0,k1设置成输入,在这里我设置成上拉输入,即输入端口信号默认值为1,当按键按下时,该位置0。代码如下:

u8 KEY_Scan(void){	 
	static u8 key_up=1;//按键按松开标志
	if(key_up && (KEY1==0 || KEY2==0))
	{
		delay_ms(10);		//去抖动 
		key_up=0;
		if(KEY1==0)
		{
			return 1;
		}
		else if(KEY2==0)
		{
			return 2;
		}
	}
	else if(KEY1==1 && KEY2==1) key_up=1;

	return 0;// 无按键按下
}

在主函数中,设置变量show_w为待显示的值,并初始化为995,再设置变量t用于保存按键输入时的变化值。主函数中利用循环不断检测t的值,如果值不为0,判断是1还是2,如果是1则将show_w值加1,若已为999则将值置为0;如果是2则将show_w值减1,若已为000则将值置为999。
如果t的值没有变,表明此时输入信号稳定,则将show_w的值显示在数码管中。代码如下:

//按键输入实验
int main(void)
{	
	int show_w=995;						  
	u8 t;	  
	Stm32_Clock_Init(9); //系统时钟设置
	delay_init(72);	     //延时初始化 
	LED_Init();		  	 //初始化与LED连接的硬件接口
	LED_SEL = 0;
	KEY_Init();          //初始化与按键连接的硬件接口
	while(1)
	{
	
	    while(1){
		t=KEY_Scan();//得到键值
		
	   	if(t)
		{						   
			switch(t)
			{				 
				case 1:
					if(show_w==999){
					show_w=0;
					}
					else  show_w++; 
					break;
				case 2:
					if(show_w==0){
					show_w=999;
					}
					else  show_w--;
					break;
			}
		}else delay_ms(1);
		SetLed(7, show_w%10);
		delay_ms(1);
		SetLed(6, show_w/10%10);
		delay_ms(1);
		SetLed(5, show_w/100);
		delay_ms(1); 
		}
	}	 
}

四、 实验结果与分析

实验结果:启动时,开发板初始状态为右边三位数码管显示995:
简单嵌入式系统设计--数码管显示_第1张图片
按下k1时,数码管的值加一,加到1000时置为000;按下k2时,数码管的值减一,减到-1时置为999:

简单嵌入式系统设计--数码管显示_第2张图片

你可能感兴趣的:(嵌入式硬件)