基于STM32单片机的多路五路抢答器时间显示方案原理图程序设计

硬件电路的设计

(末尾附文件)
3.1系统的功能分析及体系结构设计
3.1.1系统功能分析
本设计由STM32F103C8T6单片机电路+LCD1602液晶显示电路+5路按键电路组成。
1、系统上电后,LCD1602液晶显示第一次按键按下时对应的标号。第1个按键先按下,则液晶显示1。第2个按键先按下,则液晶显示2。第3个按键先按下,则液晶显示3。第4个按键先按下,则液晶显示4。第5个按键先按下,则液晶显示5。
2、液晶只能显示1个数字。
3、除非系统再次上电或者按下复位按键,则开始新一轮的抢答。
3.1.2系统总体结构
本系统具体框图如下图所示:
基于STM32单片机的多路五路抢答器时间显示方案原理图程序设计_第1张图片

原理图:

基于STM32单片机的多路五路抢答器时间显示方案原理图程序设计_第2张图片
STM32单片机核心电路设计
STM32系列处理器是意法半导体ST公司生产的一种基于ARM 7架构的32位、支持实时仿真和跟踪的微控制器。选择此款控制芯片是因为本系统设计并非追求成本的最低或更小的功耗,而是在实现本设计功能的前提下能够提供更丰富的接口和功能以便于设计实验系统各实验项目所需的外围扩展电路。此款控制芯片在完成单片机课程的学习后上手较为容易,在医疗器械中应用广泛,具有很好的学习、实验研究价值。
一、STM32的主要优点:
(1)使用ARM最新的、先进架构的Cortex-M3内核
(2) 优异的实时性能
(3) 杰出的功耗控制
(4) 出众及创新的外设
(5) 最大程度的集成整合
(6) 易于开发,可使产品快速将进入市场
二、STM32——最佳的平台选项
对于使用同一平台进行多个项目开发而言,STM32是最
佳的选择:
(1) 从仅需少量的存储空间和管脚应用到需要更多的存储空间和管脚的应用
(2) 从苛求性能的应用到电池供电的应用
(3) 从简单而成本敏感的应用到高端应用
(4) 全系列脚对脚、外设及软件的高度兼容性,给您带来全方位的灵活性。您可以在不必修改您原始框架及软件的条件下,将您的应用升级到需要更多存储空间或精简到使用更少存储空间/ 或改用不同的封装的规格。
STM32F103C8T6单片机核心板接口电路图如下图所示。

基于STM32单片机的多路五路抢答器时间显示方案原理图程序设计_第3张图片
LCD1602液晶显示模块电路设计
LCD显示器分为字段显示和字符显示两种。其中字段显示与LED显示相似,只要送对应的信号到相应的管脚就能显示。字符显示是根据需要显示基本字符。本设计采用的是字符型显示。系统中采用LCD1602作为显示器件输出信息。与传统的LED数码管显示器件相比,液晶显示模块具有体积小、功耗低、显示内容丰富等优点,而且不需要外加驱动电路,现在液晶显示模块已经是单片机应用设计中最常用的显示器件了。LCD1602可以显示2行16个汉字。
一、LCD1602主要技术参数如下:
(1)显示容量为16×2个字符;
(2)芯片工作电压为4.5~5.5V;
(3)工作电流为2.0mA(5.0V);
(4)模块最佳工作电压为5.0V;
(5)字符尺寸为2.95×4.35(W×H)mm。
二、LCD1602采用标准的14脚,其接口的引脚说明如下:
(1)第1脚:VSS为地电源。
(2)第2脚:VDD接5V正电源。
(3)第3脚:V0为液晶显示器对比度调整端。
(4)第4脚:RS为寄存器选择,高电平时选择数据寄存器、低电平时选择指令寄存器。
(5)第5脚:RW为读写信号线,高电平时进行读操作,低电平时进行写操作。当RS和RW共同为低电平时可以写入指令或者显示地址,当RS为低电平RW为高电平时可以读忙信号,当RS为高电平RW为低电平时可以写入数据。
(6)第6脚:E端为使能端,当E端由高电平跳变成低电平时,液晶模块执行命令。
(7)第7~14脚:D0~D7为8位双向数据线。
(8)第15~16脚:空脚
基于STM32单片机的多路五路抢答器时间显示方案原理图程序设计_第4张图片
按键电路(含上拉电阻)设计
轻触按键是按键产品下属的一款分类产品,它其实相当于是一种电子开关,只要轻轻的按下按键就可以是开关接通,松开时是开关就断开连接,实现原理主要是通过轻触按键内部的金属弹片受力弹动来实现接通和断开的。
在本系统中,按键作为系统的输入,起到了人机交互的枢纽作用。按键的单片机控制引脚默认为高电平,当按键按下后,单片机的相关引脚则变成低电平。进而实现对系统的手动输入。其电路原理图如下图所示。电路中电阻作用为上拉电阻,保证按键信号的稳定输出。
基于STM32单片机的多路五路抢答器时间显示方案原理图程序设计_第5张图片

系统软件设计

基于STM32单片机的多路五路抢答器时间显示方案原理图程序设计_第6张图片
主程序:

#include "led.h"
#include "delay.h"
#include "sys.h"
#include "usart.h"
#include 
#include "timer.h"
#include "key.h"
#include "lcd1602.h"

char tab0[16]; //暂存数组
char tab1[16]; //暂存数组
unsigned char i;//中间变量i

unsigned int Dtimes = 0; //计时
unsigned int	keyFlag = 0;//按键按下标志
void CheckKey(void);

int main(void)
 { 
	delay_init();	    	 //延时函数初始化	  
	uart_init(9600);	 	//串口初始化为115200
//	uart2_init(9600)	;
  TIM3_Int_Init(499,7199);//50ms 
	 
//	LED_Init();		  		//初始化与LED连接的硬件接口
	KEY_Init(); 
	 
	Lcd_GPIO_init();  
	Lcd_Init();	
	
	while(1)
	{
		if(keyFlag == 0)//按键无任何按下
		{
			CheckKey();  //按键设置
		}		
		
		if(disFlag==1)					//显示
		{
			disFlag = 0;	
			if(keyFlag == 0)
			{
				Dtimes++;				
				sprintf(tab1,"    N     ");//没有人按键
			}
			else
			{
				sprintf(tab1,"    %d     ",keyFlag);//显示按键的值
			}	
			Lcd_Puts(0,1,(unsigned char *)tab1);	//初始化显示 
			sprintf(tab0,"time :%5.1fs     ",(float)Dtimes/10);		//显示时间		
			Lcd_Puts(0,0,(unsigned char *)tab0);	//初始化显示 					
		}
	}											    
}	


void CheckKey(void)
{ 
	static unsigned  char rekey =0;
	if((key1==0)||(key2==0)||(key3==0)||(key4==0)||(key5==0))		 //检测到按键按下
	{
		delay_ms(10);   //小抖动
		if(rekey==0)
		{
			if(key1==0)    //检测是否按下
			{
				rekey=1;
				keyFlag = 1;  //按键按下标志 
			}	
			else if(key2==0)//设置值键
			{
				rekey=1;		
				keyFlag = 2;  //按键按下标志 
			}
			else if(key3==0)//设置值键
			{
				rekey=1;	
				keyFlag = 3;  //按键按下标志 
			}
			else if(key4==0)//设置值键
			{
				rekey=1;	
				keyFlag = 4;  //按键按下标志 
			}
			else if(key5==0)//设置值键
			{
				rekey=1;	
				keyFlag = 5;  //按键按下标志 
			}			
		}
	}
	else
	{
	rekey=0;    //防止重复检测到按键
	}
}





.

链接:https://pan.baidu.com/s/18phyWbyP8TnbuF0rXMHb-g
提取码:1wov

.

你可能感兴趣的:(单片机,stm32,嵌入式硬件)