当前位置: 首页 > news >正文

免费网站空间php深圳设计公司名称

免费网站空间php,深圳设计公司名称,建设三合一网站,怎么叫人做网站矩阵键盘工作原理 矩阵键盘由多个独立按键组成,按键的一端接地,一端接MCU的GPIO。当按键没有被按下时,电路其实是一个断路,将单片机该引脚设置成输入上拉状态,读到的电平为高电平。当按下按键时,引脚会被拉…

矩阵键盘工作原理

矩阵键盘由多个独立按键组成,按键的一端接地,一端接MCU的GPIO。当按键没有被按下时,电路其实是一个断路,将单片机该引脚设置成输入上拉状态,读到的电平为高电平。当按下按键时,引脚会被拉低,此时读到的电平为低电平,说明按键已经被按下。
4*4的矩阵键盘,通常采用逐行逐列进行扫描。先扫描第一行,将该行输出高电平,其他行输出低电平,记为0xF7(1111 0111)。然后开始扫描列,控制列的引脚为输入引脚,将其和0XF7相与,如果哪一位为0,那么就证明哪一个被按下。
其本质就是进行逐行扫描和逐列扫描,然后判断是第几行的第几列个按键,进而进行整体按键值得确定。
在这里插入图片描述

实验案例

随机按下矩阵键盘按键,可以在TFTLCD屏上观察到相应的数值。

  • 实验需要:STM32核心板 和 4*4矩阵键盘
  • 电路原理图:
    在这里插入图片描述

其中KR-0对应单片机PC0,KR-1对应PC1,KR-2对应PC2,KR-3对应PC3,KC-0对应PC4,KC-1对应PC5,KC-2对应PC6,KC-3对应PC7。
程序源码:
首先,要对矩阵键盘IO进行初始化,定义好矩阵键盘的行和列。然后需要定义好矩阵键盘扫描函数,用于判断键盘按键是否按下。矩阵键盘扫描函数如下。

u8 keyscan(void)
{ uint8_t LIE,HANG,k,i=0;GPIO_Write(GPIOC, 0xF0);                            //D0-D3拉低,D4-D7拉高if((GPIO_ReadInputData(GPIOC)&0xF0)!=0xF0)          //有按键按下{delay_ms(40);                                     //去抖if((GPIO_ReadInputData(GPIOC)&0xF0)!=0xF0)       //再次判断是否按下{LIE=GPIO_ReadInputData(GPIOC);                 //读取按键按下后得到的代码HANG=LIE;                                      //将代码复制给行LIE=~LIE;                                      //将键码取反,例如:按下某个键得到0111 0000,取反后得到1000 1111LIE=LIE&0XF0;                                  //得到列1000 1111&1111 0000得到1000 0000,得到列数for(i=0;i<4&&((HANG&0xF0)!=0xF0);i++)          //逐次将行拉高,判断列数中原来变低的位是否变高{                                              //读到之前检测到为低的列变高则推出GPIO_Write(GPIOC, (HANG&0xF0)|(0x01<<i));  //进行行扫描,逐次将行口线拉高,列保持为按下的状态HANG=GPIO_ReadInputData(GPIOC);            //读取IO口,用以判断是否扫描到行坐标		   }HANG&=0x0F;                                    //将航值取出k=LIE|HANG;                                    //行列相加则得到键码GPIO_Write(GPIOC, 0xF0);                       //D0-D3拉低,D4-D7拉高,此处用来将行状态初始化为未按下时的状态while((GPIO_ReadInputData(GPIOC)&0xF0)!=0xF0)  //判释放{delay_ms(40);                             //后延消抖。时间需要长一点}return k;                                      //返回键码}}	return (0);                                         //无键按下,返回0
}

在主函数中实现功能,进行函数调用。为方便验证按键是否按下并方便观察,使其在屏幕中显示,主函数中包含显示功能。主函数如下。

int main(void){	 u8 x=0;u8 lcd_id[12];			//存放LCD ID字符串u8 key_value;u8 buf[20]; delay_init();	    	 //延时函数初始化	  NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);	 //设置NVIC中断分组2:2位抢占优先级,2位响应优先级uart_init(115200);	 	//串口初始化为115200LED_Init();			     //LED端口初始化LCD_Init();KEY_Init(); //矩阵按键初始化!!!   sprintf((char*)lcd_id,"LCD ID:%04X",lcddev.id);//将LCD ID打印到lcd_id数组。	POINT_COLOR=RED;	  LCD_ShowString(30,40,210,24,24,"STM32 ^_^"); LCD_ShowString(30,70,200,16,16,"TFTLCD TEST");LCD_ShowString(30,90,200,16,16,"STM32F103ZET6");LCD_ShowString(30,110,200,16,16,lcd_id);		//显示LCD IDLCD_ShowString(30,130,200,12,12,"2020/5/4");while(1) {		key_value = keyscan();if(key_value > 0){		LCD_ShowNum(30,170,key_value,4,12);}} 
}

实验现象:
矩阵键盘从左上角到右下角显示的数值依次为1~16。

红外对管测速原理

红外对管实质上是一种光电转换器件,由发射管和接收管组成。发射管发出的光束经过聚焦后照射到被测物体上。接收管则负责接反射回来的光束,将光信号转换为电信号,产生光电效应。转换的这个电信号的大小取决于接收到的光强度。
为了能够准确地检测物体的移动速度,需要对接收管产生的电信号进行适当的处理。常见的信号处理电路包括放大器、滤波器、比较器等。放大器用于放大微弱的电信号,滤波器用于消除噪声,比较器用于将信号转换为数字信号。

实验案例

在实验中,我们采用定时器中断,实现红外对管的测速。

  • 实验需要:STM32核心板+直流电机+蜂鸣器+光电对管
  • 电路原理图:
    在这里插入图片描述

LM393会将光电对管输出的电压变化转换为高低电平方波并通过IRS-IO输出到单片机,其中滑动电阻用于控制光电对管的灵敏度。
光电对管的输出口会通过选择开关与单片机的PB13接口相连。
程序源码:
1、中断函数和中断服务程序

void EXTIX_Init(void)
{EXTI_InitTypeDef EXTI_InitStructure;NVIC_InitTypeDef NVIC_InitStructure;INFRARED_Init();RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO,ENABLE);	//使能复用功能时钟//PB13	  中断线以及中断初始化配置 下降沿触发 PB13  //红外对管对应PB13GPIO_EXTILineConfig(GPIO_PortSourceGPIOB,GPIO_PinSource13); EXTI_InitStructure.EXTI_Line=EXTI_Line13;EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;	EXTI_InitStructure.EXTI_LineCmd = ENABLE;EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Rising;  // 下降沿EXTI_Init(&EXTI_InitStructure);		//根据EXTI_InitStruct中指定的参数初始化外设EXTI寄存器NVIC_InitStructure.NVIC_IRQChannel = EXTI15_10_IRQn;			//使能红外对管所在的外部中断通道NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0x02;	//抢占优先级2, NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0x03;					//子优先级3NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;								//使能外部中断通道NVIC_Init(&NVIC_InitStructure); 
}
//外部中断13服务程序 
void EXTI15_10_IRQHandler(void)
{if(EXTI_GetITStatus(EXTI_Line13)==SET){count ++ ;	BEEP=!BEEP; 	EXTI_ClearITPendingBit(EXTI_Line13); //清除LINE13 上的中断标志位  }	
}

2、主函数

int main(void){		delay_init();	    	 //延时函数初始化¯	  NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2); /设置NVIC中断分组22抢占优先级,2响应优先级uart_init(115200);	 //´串口初始化为115200DCMOTOR_Init();      //直流电机初始化 LCD_Init();POINT_COLOR=RED;INFRARED_Init();   	//初始化红外对管的硬件接口DCMOTOR1 = 1;       //启动直流电机LED_Init();      //LED初始化 LCD_ShowString(30,40,210,24,24,"STM32 ^_^"); LCD_ShowString(30,70,200,16,16,"TFTLCD TEST");LCD_ShowString(30,90,200,16,16,"STM32F103ZET6");LCD_ShowString(30,130,200,12,12,"2020/5/4"); LCD_ShowString(30,170,200,16,16,"COUNT:"); TIM3_Int_Init(4999,7199);//10Khz的技术频率,技术到5000为500msEXTIX_Init();		  	//外部中断初始化¯count = 0 ;timer_count = 0 ;while(1){	if(timer_count > 0){	count_temp = count;count = 0;timer_count = 0;		LCD_ShowNum(78,170,count_temp,4,16);		//当前显示的为1s内转的格数	count_temp = 0 ;}  }}

实验现象:
下载成功后,复位,两个直流电机带动码盘转动。通过红外对管检测码盘计数,并在液晶屏上显示0.5秒内码盘转动格子数。

http://www.yayakq.cn/news/981140/

相关文章:

  • 提供网站制作公司报价扬州网站建设小程序
  • 网站建设优化是什么鬼?赣州建设工程信息网
  • 我的网站设计联盟网站建设属于哪个税收服务编码
  • 公司网站建设方案汇报电商产品营销推广
  • 网络推广方法技巧南宁关键词排名优化外包
  • 建立一个网店网站wordpress手机app编辑文章
  • 网站链接失效怎么做室内设计资源网
  • 商城 网站 功能cpa网站怎么做
  • 设计素材网站外网搜索引擎网站推广法
  • 广州网站设计教程中国林业工程建设协会官方网站
  • 烟台网站制作培训婚纱网站建设目的
  • 购物网站建设公网站报价表格
  • 做淘宝网站用什么浏览器网站具有购买功能需要怎么做
  • 对网站访客做简要分析wordpress模板安装完没有导航栏
  • 设计logo网站推荐淘宝客网站怎么做优化
  • 成都网站建设好新手学做网站手机
  • 网站类别选择电子信息工程移动互联网 学什么
  • 个人网站备案取消长沙网站建设开发
  • 各大网站黑白几天wordpress建立扁平化
  • 安康做网站的公司电话淄博百度网络推广公司
  • 做3d效果在哪个网站建筑公司网站模板
  • 男人不知本网站 枉做标志空间 网站
  • 网上有哪些购物网站wordpress登陆错误500
  • 做网站的专业叫什么软件织梦移动网站
  • 男女做暖网站是什么今天河北邢台确诊名单
  • 怎样优化手机网站南阳企业网站建设公司
  • 公司优化网站的案例鸿川建设工程有限公司官方网站
  • 具有价值的广州做网站js实现网站简体转繁体
  • 网站建设模式化的体现用源码建设网站
  • 开一家网站建设公司好域名注册腾讯云