ARM按键控制灯光

这篇具有很好参考价值的文章主要介绍了ARM按键控制灯光。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

uartt.c

#include "uartt.h"
char buf[51];
//初始化串口数据
void uart4_init()
{
  //1.UART4和GPIOB、GPIOG的时钟使能
  RCC->MP_AHB4ENSETR |= (0x1 << 2);  //GPIOB时钟
  RCC->MP_AHB4ENSETR |= (0x1 << 6);  //GPIOG时钟
  RCC->MP_APB1ENSETR |= (0x1 << 16); //UART4时钟
  RCC->MP_APB1ENSETR |= (0x3 << 4);
  //设置PB2和PG11的管脚复用
  GPIOB->MODER &= (~(0x3 << 4));
  GPIOB->MODER |= (0x2 << 4); //设置复用
  GPIOB->AFRL &= (~(0xF << 8));
  GPIOB->AFRL |= (0x8 << 8); //设置uart4功能复用
  GPIOG->MODER &= (~(0x3 << 22));
  GPIOG->MODER |= (0x2 << 22); //设置复用
  GPIOG->AFRH &= (~(0xF << 12));
  GPIOG->AFRH |= (0x6 << 12); //设置uart4功能复用
  //3.先去设置串口禁用,方便设置数据格式
  USART4->CR1 &= (~0x1);
  //4.设置8位数据位
  USART4->CR1 &= (~(0x1 << 28));
  USART4->CR1 &= (~(0x1 << 12));
  //5.设置没有奇偶校验
  USART4->CR1 &= (~(0x1 << 10));
  //6.设置16倍采样
  USART4->CR1 &= (~(0x1 << 15));
  //7.设置1位停止位
  USART4->CR2 &= (~(0x3) << 12);
  //8.设置1分频
  USART4->PRESC &= (~(0xF) << 0);
  //9.设置波特率为115208bps
  USART4->BRR = 0x22B;
  //10.发送器、接收器使能
  USART4->CR1 |= (0x1 << 3); //发送
  USART4->CR1 |= (0x1 << 2); //接收
  //11.串口使能
  USART4->CR1 |= (0x1 << 0);
  // 2.设置PF10 PE10 PE8为输出输出
  GPIOE->MODER &= (~(0x3 << 20));
  GPIOE->MODER |= (0x1 << 20);
  GPIOF->MODER &= (~(0x3 << 20));
  GPIOF->MODER |= (0x1 << 20);
  GPIOE->MODER &= (~(0x3 << 16));
  GPIOE->MODER |= (0x1 << 16);
  // 3.设置推挽输出
  GPIOE->OTYPER &= (~(0x1 << 10));
  GPIOF->OTYPER &= (~(0x1 << 10));
  GPIOE->OTYPER &= (~(0x1 << 8));
  // 4.设置输出速度为低速
  GPIOE->OSPEEDR &= (~(0x3 << 20));
  GPIOF->OSPEEDR &= (~(0x3 << 20));
  GPIOE->OSPEEDR &= (~(0x3 << 16));
  // 5.设置无上拉下拉
  GPIOE->PUPDR &= (~(0x3 << 20));
  GPIOF->PUPDR &= (~(0x3 << 20));
  GPIOE->PUPDR &= (~(0x3 << 16));
}
//封装函数发送一个字符数据
void myputchar(char i)
{
  //1.判断TDR寄存器是否为空,如果为空,向TDR寄存器写入数据
  while (!(USART4->ISR & (0x1 << 7)))
    ;
  USART4->TDR = i;
  //2.阻塞等待数据传输完成,函数返回
  while (!(USART4->ISR & (0x1 << 6)))
    ;
}
//
char mygetchar()
{
  char a;
  //判断RDR寄存器是否有就绪的数据,如果有就读取,否则等待
  while (!(USART4->ISR & (0x1 << 5)))
    ;
  a = USART4->RDR;
  return a;
}

void led1_on()
{
  GPIOE->ODR |= (0x1 << 10);
}
void led2_on()
{

  GPIOF->ODR |= (0x1 << 10);
}
void led3_on()
{

  GPIOE->ODR |= (0x1 << 8);
}

void led1_off()
{
  GPIOE->ODR &= (~(0x1 << 10));
}
void led2_off()
{
  GPIOF->ODR &= (~(0x1 << 10));
}
void led3_off()
{
  GPIOE->ODR &= (~(0x1 << 8));
}

main.c



#include "uartt.h"

void delay(int ms)

{

	int i, j;

	for (i = 0; i < ms; i++)

	{

		for (j = 0; j < 2000; j++)

			;

	}

}

int main()

{

	//1.串口的初始化

	uart4_init();

	char a;

	//char *str;

	//现象是发送一个a串口工具打印一个b

	while (1)

	{

		myputchar('\n');

		myputchar('\r');

		//2.从串口读取一个字符

		a = mygetchar();

		switch (a)

		{

		case 'a':

			led1_on();

			break;

		case 'b':

			led2_on();

			break;

		case 'c':

			led3_on();

			break;

		case 'e':

			led1_off();

			break;

		case 'f':

			led2_off();

			break;

		case 'g':

			led3_off();

			break;

		}

		//3.将读取到的字符发送回去

		myputchar(a);

	}



	return 0;

}

uartt.h

#ifndef __UARTTT_H__
#define __UARTTT_H__
#include "stm32mp1xx_gpio.h"
#include "stm32mp1xx_rcc.h"
#include "stm32mp1xx_uart.h"

//初始化串口数据
void uart4_init();
void myputchar(char i);
char mygetchar();
void led1_on();
void led2_on();
void led3_on();
void led1_off();
void led2_off();
void led3_off();

#endif

ARM按键控制灯光,arm开发,单片机,嵌入式硬件

ARM按键控制灯光,arm开发,单片机,嵌入式硬件

ARM按键控制灯光,arm开发,单片机,嵌入式硬件文章来源地址https://www.toymoban.com/news/detail-758574.html

到了这里,关于ARM按键控制灯光的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 基于单片机的智能路灯控制系统人体感应灯光控制系统的设计与实现

           功能介绍 以51单片机作为主控系统; LCD1602液晶显示当前时间、年月日、时分秒; 按键看看有设置自动手动模式; 3路红外探头用来感应当前3个区域是否有人; 按键可以设置当前时间、开启和关闭教室灯光时间; 在手动模式下,可以通过按键直接控制灯的开关;

    2024年02月13日
    浏览(43)
  • 【蓝桥杯单片机】工厂灯光控制系统案例解析(小蜜蜂老师基础综合实训)

    设备检测——移位 L1~L8在板子上是从左至右,但是在对P0口赋值时是16进制从 高位(L8)—低位(L0) 根据原理图,LED赋值 0亮1灭 为了方便赋值,可以把板子转一下,让LED排序与赋值顺序相同 左移 右移 控制移位补0 ,使LED依次点亮、依次熄灭 unsigned char i 作为下文表格中的循环变量

    2023年04月09日
    浏览(42)
  • 基于单片机的智能台灯 灯光控制系统人体感应楼梯灯系统的设计与实现

     功能介绍 以STM32单片机作为主控系统; 主通过光敏采集当前光线强度; 通过PMW灯光调节电路,我们可以根据不同的光线亮度,进行3挡调节; 通过人体红外检测当前是否有人; 通过不同光线情况下使用PWM脉冲电路进行调节当前灯光亮度; 液晶显示:本次设计所有的信息我

    2024年02月16日
    浏览(41)
  • 81、基于STM32单片机智能台灯 PWM调光坐姿矫正 灯光控制定时台灯设计

    毕设帮助、开题指导、技术解答(有偿)见文末。 目录 摘要 一、硬件方案 二、设计功能 三、实物图 四、原理图 五、PCB图  六、硬件框图 七、流程图 八、程序源码 九、资料包括 随着社会在不断进步,高科技含量决定着产品发展的新趋势和前景,智能化技术在电子产品领

    2024年02月02日
    浏览(56)
  • 五、51单片机控制矩阵按键

    1.1、矩阵按键原理分析 这里矩阵按键为4*4的矩阵按键。 (1)矩阵按键横向和纵向分割。 (2)按键两端分别接不同的IO引脚。 (3)按键物理作用不变:按下按键两端接通,弹起按键两端断开。 1.2、矩阵按键的工作过程 JP4接P3端口,JP4_8接P3^7...JP4_1接P3^0。 (1)IO端口(P3)先输出0x0f,按键列

    2023年04月20日
    浏览(63)
  • 四、51单片机控制独立按键

    按键相关知识。 1.1、按键工作原理 (1)按键内部是机械结构,也就是内部是没有电路的。按键对外表现位四个引脚,但本质上只是两个,引脚是两两连在一起的。按键按下内部引脚导通,松开内部断开。 (2)电路连接与原理图中图标。 按键一端接地,一端接单片机IO口。  (3)按

    2023年04月14日
    浏览(62)
  • ARM单片机中断处理过程解析

    前言 中断,在单片机开发中再常见不过了。当然对于中断的原理和执行流程都了然于胸,那么对于ARM单片机中断的具体处理行为,你真的搞清楚了吗? 今天来简单聊一聊,ARM单片机中断处理过程中的具体行为是什么样的,搞清楚了这些,让你彻底理解中断是如何执行的。 掌

    2024年02月06日
    浏览(43)
  • 如何使用单片机点亮LED灯,并使用按键控制[51单片机]

    首先先看一下我的板子,如果我们板子不相同,可能操作也不太相同 我们就不讲底层原理了,直接看,我们可以看到板子上有 8个LED灯   那这个8个LED用什么来控制呢,我们先看底层的线路图,所有的LEDD都连接到了P2带后缀的接口上, 那么只需要操作这几个接口的高低电频,

    2024年02月05日
    浏览(46)
  • 51单片机按键控制流水灯

    1独立按键的原理图 按键所对应的引脚为P3的0、1、2、3引脚口,并且这里总共有四个独立按键,它们公共的一段都接到了 GND 电源的负极。这样我们就知道按键上电的默认电平为高电平。所以我们只需要控制按键按下时给一个低电平0,不按下时默认高电平1就行。  2按键控制

    2024年02月11日
    浏览(55)
  • 51单片机-按键控制led灯

    1.开发环境介绍 使用C语言,环境为keil Keil C51是美国Keil Software公司出品的51系列兼容单片机C语言软件开发系统,与汇编相比,C语言在功能上、结构性、可读性、可维护性上有明显的优势,因而易学易用. 什么是单片机 单片机(Single-Chip Microcomputer)是一种集成电路芯片,把具

    2024年02月09日
    浏览(49)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包