怎么模拟自动触发触摸电路

怎么模拟自动触发触摸电路,第1张

您好,模拟自动触发触摸电路可以通过使用模拟信号发生器或者编写相应的程序来实现。其中,模拟信号发生器可以产生各种波形信号,包括正弦波、方波、三角波等,可以模拟出各种触摸信号。编写程序可以使用各种编程语言,如C、Python等,通过控制GPIO口输出高低电平来模拟触摸信号。

具体实现方法如下:

1使用模拟信号发生器:将模拟信号发生器的输出连接到触摸电路的输入端,通过调节信号发生器的输出波形和频率来模拟出各种触摸信号。

2编写程序:通过控制GPIO口输出高低电平来模拟触摸信号。首先需要了解触摸电路的输入方式,一般为电容触摸或者电阻触摸。对于电容触摸,可以通过在GPIO口输出高低电平的同时,将另外一个GPIO口设置为输入模式,来模拟出电容触摸信号。对于电阻触摸,可以通过在GPIO口输出高低电平的同时,通过一个电阻网络来模拟出电阻触摸信号。

总之,模拟自动触发触摸电路需要根据具体的电路设计和实现方式来选择相应的方法。

该程序已经很明白了,参数n为转一圈,你在调用函数的时候传参1就可以了,

你的主函数规定你输入三个命令行参数,第一个肯定是文件名,第二个为正传还是反转,第三个为转几圈。明白否?

不明白再问我

譬如你的文件名为xxx

编译

CC 为你的交叉编译器

$CC -o xxx xxxc

运行:

/xxx 0 1

此为正转一圈

/xxx 1 1

此为反转一圈

day12:按键KEY1和KEY2控制LED灯的亮灭KEY1控制LED1,KEY2控制LED2

bsp_ledh:

/ 和LED功能模块相关的程序 /

#ifndef __BSP_LED_H__

#define __BSP_LED_H__

#include "stm32f10xh"

/宏定义/

#define GPIO_CLK_D4 RCC_APB2Periph_GPIOC // 时钟

#define GPIO_PORT_D4 GPIOC // C端⼝

#define GPIO_PIN_D4 GPIO_Pin_2 // PC2引脚

#define GPIO_CLK_D5 RCC_APB2Periph_GPIOC // 时钟

#define GPIO_PORT_D5 GPIOC // C端⼝

#define GPIO_PIN_D5 GPIO_Pin_3 // PC2引脚

/参数宏定义/

/

digitalTOGGLE(p,i)是参数宏定义,p表⽰LED的端⼝号,ODR是数据输出寄存器,

查stm32f10x的官⽅中⽂⼿册的第82章的ODR寄存器,要点亮LED,根据原理图,要输出低电平0,

C语⾔中,^表⽰异或,即a^b表⽰a和b不同时输出为1,相同时输出为0,⽐如0^1=1,1^1=0,0^0=0,

这⾥为什么 *** 作ODR,p是什么?查看stm32f10xh⽂件,搜索GPIO_TypeDef就会明⽩,

i是LED的引脚对应的位电平,经过digitalTOGGLE(p,i) {p->ODR ^= i;}之后,

第⼀次p为0,i⼀直为1,第⼀次异或结果输出1,第⼆次输出0,第三次输出1,这样间断输出010101,灯不断亮灭

/

#define digitalTOGGLE(p,i) {p->ODR ^= i;}

#define LED1_TOGGLE digitalTOGGLE(GPIO_PORT_D4,GPIO_PIN_D4)

#define LED2_TOGGLE digitalTOGGLE(GPIO_PORT_D5,GPIO_PIN_D5)

/配置GPIO/

void LED_GPIO_Config(void);

#endif /__BSP_LED_H__/

bsp_ledc:

/ 和LED功能模块相关的程序头⽂件 /

#include "/led/bsp_ledh" /绝对路径,也可在Options for target中设置头⽂件/

/GPIO初始化/

void LED_GPIO_Config(void)

{

/外设结构体/

GPIO_InitTypeDef GPIO_InitStruct_D4, GPIO_InitStruct_D5;

/第⼀步:打开外设的时钟,看stm32f10x_rccc这个⽂件的RCC_APB2PeriphClockCmd函数介绍/

RCC_APB2PeriphClockCmd(GPIO_CLK_D4, ENABLE);

/第⼆步:配置外设的初始化结构体/

GPIO_InitStruct_D4GPIO_Pin = GPIO_PIN_D4; // PC2的那盏LED灯(D4)的引脚

GPIO_InitStruct_D4GPIO_Mode = GPIO_Mode_Out_PP; // 推挽输出模式

GPIO_InitStruct_D4GPIO_Speed = GPIO_Speed_10MHz; // 引脚速率

GPIO_InitStruct_D5GPIO_Pin = GPIO_PIN_D5; // PC3的那盏LED灯(D5)的引脚

GPIO_InitStruct_D5GPIO_Mode = GPIO_Mode_Out_PP; // 推挽输出模式

GPIO_InitStruct_D5GPIO_Speed = GPIO_Speed_10MHz; // 引脚速率

/第三步:调⽤外设初始化函数,把配置好的结构体成员写到寄存器⾥⾯/

GPIO_Init(GPIO_PORT_D4, &GPIO_InitStruct_D4);

GPIO_Init(GPIO_PORT_D5, &GPIO_InitStruct_D5);

}

bsp_keyh:

#ifndef __BSP_KEY_H__

#define __BSP_KEY_H__

#include "stm32f10xh"

#define KEY_ON 1

#define KEY_OFF 0

// 按键相关的宏定义

#define GPIO_CLK_KEY1 RCC_APB2Periph_GPIOA // 端⼝A时钟

#define GPIO_PORT_KEY1 GPIOA // A端⼝

#define GPIO_PIN_KEY1 GPIO_Pin_0 // PA0引脚

#define GPIO_CLK_KEY2 RCC_APB2Periph_GPIOC // 端⼝C时钟

#define GPIO_PORT_KEY2 GPIOC // C端⼝

#define GPIO_PIN_KEY2 GPIO_Pin_13 // PC13引脚

// 配置GPIO

void KEY_GPIO_Config(void);

// 按键扫描,看按键是否被按下,如果按下返回KEY_ON,否则返回KEY_OFF(进⾏宏定义)

uint8_t KEY_SCAN(GPIO_TypeDef GPIOx, uint16_t GPIO_Pin);

#endif / __BSP_KEY_H__ /

bsp_keyc:

#include "/key/bsp_keyh"

/ 按键初始化 /

void KEY_GPIO_Config(void)

{

/外设结构体/

GPIO_InitTypeDef GPIO_InitStruct_KEY1, GPIO_InitStruct_KEY2;

/第⼀步:打开外设的时钟,看stm32f10x_rccc这个⽂件的RCC_APB2PeriphClockCmd函数介绍/

RCC_APB2PeriphClockCmd(GPIO_CLK_KEY1|GPIO_CLK_KEY2, ENABLE); // 按下KEY1或KEY2

/第⼆步:配置外设的初始化结构体/

GPIO_InitStruct_KEY1GPIO_Pin = GPIO_PIN_KEY1; // KEY1的引脚

GPIO_InitStruct_KEY1GPIO_Mode = GPIO_Mode_IN_FLOATING; // 浮空输出模式(引脚电平由外部决定) GPIO_InitStruct_KEY1GPIO_Speed = GPIO_Speed_10MHz; // 引脚速率

GPIO_InitStruct_KEY2GPIO_Pin = GPIO_PIN_KEY2; // KEY1的引脚

GPIO_InitStruct_KEY2GPIO_Mode = GPIO_Mode_IN_FLOATING; // 浮空输出模式(引脚电平由外部决定) GPIO_InitStruct_KEY2GPIO_Speed = GPIO_Speed_10MHz; // 引脚速率

/第三步:调⽤外设初始化函数,把配置好的结构体成员写到寄存器⾥⾯/

GPIO_Init(GPIO_PORT_KEY1, &GPIO_InitStruct_KEY1);

GPIO_Init(GPIO_PORT_KEY2, &GPIO_InitStruct_KEY2);

}

/ 按键扫描(检测按键是否被按下):GPIOx为端⼝,GPIO_Pin为引脚 /

uint8_t KEY_SCAN(GPIO_TypeDef GPIOx, uint16_t GPIO_Pin)

{

/查看stm32f10x_gpioh⽂件最后⾯的函数,这个函数表⽰读引脚的输⼊电平(按键触发后输⼊的)/

// 这个函数,如果按键按下,则输出18V⾼电平,置1,否则为0

if(GPIO_ReadInputDataBit(GPIOx, GPIO_Pin) == KEY_ON)

{

// 如果⼀直按着就进⼊死循环

while(GPIO_ReadInputDataBit(GPIOx, GPIO_Pin) == KEY_ON);

// 放开按键就置1

return KEY_ON;

}

else

{

// 否则置0

return KEY_OFF;

}

}

mainc:

#include "stm32f10xh"

#include "/led/bsp_ledh"

#include "/key/bsp_keyh"

// 延迟函数

void delay(unsigned int i)

{

for(; i!=0; i--);

}

int main(void)

{

/GPIO初始化,在程序来到main函数的时候,系统时钟已经配置成72MHz/

LED_GPIO_Config(); // LED初始化

KEY_GPIO_Config(); // KEY初始化

while(1)

{

// 如果按下KEY1,则D4亮灭,KEY1对应的是PA0,A端⼝的第1个引脚

if(KEY_SCAN(GPIOA, GPIO_PIN_KEY1) == KEY_ON)

{

LED1_TOGGLE;

}

// 如果按下KEY2,则D5亮灭,KEY2对应的是PC13,C端⼝的第14个引脚

if(KEY_SCAN(GPIOC, GPIO_PIN_KEY2) == KEY_ON)

{

LED2_TOGGLE;

}

}

}

实验现象:

程序烧录到板⼦中,⼀开始LED1和LED2都是亮的(应该都是灭的才对),按下KEY1控制LED1的亮和灭,按下KEY2控制LED2的亮和灭============================================

下⾯是默认情况下LED2和LED2都是熄灭的情况:

mainc

/

KEY控制LED亮灭实验,LED⼀开始默认都熄灭,等按下KEY1或KEY2后才能亮

/

#include "stm32f10xh"

#include "/led/bsp_ledh"

#include "/key/bsp_keyh"

// 延迟函数

void Delay(unsigned int time)

{

for(;time!=0;time--);

}

int main(void)

{

uint8_t count = 1;

KEY_GPIO_Config();

while(1)

{

// LED默认情况下是灭的,等按下KEY1或KEY2时,对应的LED才会亮

if(KEY_SCAN(GPIO_PORT_KEY1, GPIO_PIN_KEY1) == KEY_ON)

{

if(count == 1)

{

LED_GPIO_Config(); // 按下KEY1时两个LED都亮

LED2_TOGGLE; // 让LED2灭(其实是亮-->灭),时间很短,⼈眼分辨不出来

count++;

}

else

{

LED1_TOGGLE;

}

}

if(KEY_SCAN(GPIO_PORT_KEY2, GPIO_PIN_KEY2) == KEY_ON)

{

if(count == 1)

{

LED_GPIO_Config(); // 按下KEY2时两个LED都亮

LED1_TOGGLE; // 让LED1灭(其实是亮-->灭),时间很短,⼈眼分辨不出来

count++;

}

else

{

LED2_TOGGLE;

}

}

}

}

5

百度文库VIP限时优惠现在开通,立享6亿+VIP内容

立即获取

day12:按键KEY1和KEY2控制LED灯的亮灭

day12:按键KEY1和KEY2控制LED灯的亮灭KEY1控制LED1,KEY2控制LED2

bsp_ledh:

/ 和LED功能模块相关的程序 /

#ifndef __BSP_LED_H__

#define __BSP_LED_H__

#include "stm32f10xh"

/宏定义/

#define GPIO_CLK_D4 RCC_APB2Periph_GPIOC // 时钟

#define GPIO_PORT_D4 GPIOC // C端⼝

#define GPIO_PIN_D4 GPIO_Pin_2 // PC2引脚

第一段:在OpenWrt中,配置GPIO中断需要在设备树中指定相应的GPIO引脚。这可以通过编辑设备树文件(dts)来完成。在设备树中,需要指定GPIO的编号、中断类型和中断触发方式。

第二段:首先,需要找到设备树中的GPIO节点,通常位于“/soc/gpio@XXX”路径下。在节点中,需要添加“interrupts”属性来定义中断类型和中断触发方式。例如,以下代码表示使用边缘触发方式的下降沿中断:

interrupts = <0 15 2>;

第三段:其中,第一个数字0表示中断类型,0代表使用IRQ号,1代表使用GPIO编号。第二个数字15是中断号,可以在设备树文件中找到。第三个数字2表示边缘触发方式,0表示低电平触发,1表示高电平触发,2表示下降沿触发,3表示上升沿触发。

第四段:完成设备树文件的编辑后,需要重新编译设备树并更新内核。然后,就可以在应用程序中使用GPIO中断了。例如,可以使用GPIO库的gpio_request()函数来请求GPIO资源,然后使用gpio_irq_request()函数注册中断处理函数,最后使用gpio_irq_enable()函数使能中断。在中断处理函数中,可以根据需要执行相应的 *** 作,比如读取GPIO状态、更新数据等。

单片机配置gpio期间失控是因为一个GPIO口,设置了低电平触发中断,一个按键接这个GPIO口,当这个按键按下时就会失控。根据查询相关资料得知,解决失控的办法为如果是低电平(不是低跳变),只要按键按着,中断会执行完一个马上出另外一个,持续不断。

基于BarrierBreaker版本,基于AR9331 AP121 Demo单板 来进行描述1灯A在mach-ap121c中,定义了灯所对应的GPIO定义:#define AP121_GPIO_LED_WLAN 0#define AP121_GPIO_LED_USB 1 并定义了灯的GPIO结构对象:static struct gpio_led ap121_leds_gpio[] __initdata = { { name = "ap121:green:usb", gpio = AP121_GPIO_LED_USB, active_low = 0, }, { name = "ap121:green:wlan", gpio = AP121_GPIO_LED_WLAN, active_low = 0, }, }在初始化函数:ap121_setup 中,利用ath79_register_leds_gpio(-1, ARRAY_SIZE(ap121_leds_gpio), ap121_leds_gpio);实现了LED device的注册。此函数调用后,会创建platform类型的设备,并和leds-gpio驱动(leds-gpioc)实现了绑定。这样,就会在/sys/devices/platform/leds-gpio/目录中,产生对应的led灯的控制目录:drwxr-xr-x 2 root root 0 Jan 1 1970 ap121:green:usbdrwxr-xr-x 2 root root 0 Jan 1 1970 ap121:green:wlanB进入上述任意一个目录,如:ap121:green:wlan,会有如下文件:-rw-r--r-- 1 root root 4096 Jan 15 06:19 brightness lrwxrwxrwx 1 root root 0 Jan 15 06:04 device -> ///leds-gpio-r--r--r-- 1 root root 4096 Jan 15 06:04 max_brightnesslrwxrwxrwx 1 root root 0 Jan 15 06:04 subsystem -> /////class/leds-rw-r--r-- 1 root root 4096 Jan 15 06:04 trigger-rw-r--r-- 1 root root 4096 Jan 15 06:04 uevent则通过 echo 1 > brightness,就可以控制灯亮; echo 0 > brightness,就可以控制灯灭 2按键A在mach-ap121c中,定义了按键对应的GPIO以及数据结构对象:#define AP121_GPIO_BTN_JUMPSTART 11#define AP121_GPIO_BTN_RESET 12 以及static struct gpio_keys_button ap121_gpio_keys[] __initdata = { { desc = "jumpstart button", type = EV_KEY, code = KEY_WPS_BUTTON, //定义在gpio-button-hotplugc debounce_interval = AP121_KEYS_DEBOUNCE_INTERVAL, gpio = AP121_GPIO_BTN_JUMPSTART, active_low = 1, }, { desc = "reset button", type = EV_KEY, code = KEY_RESTART, //定义在gpio-button-hotplugc debounce_interval = AP121_KEYS_DEBOUNCE_INTERVAL, gpio = AP121_GPIO_BTN_RESET, active_low = 1, }, } 在初始化函数:ap121_setup 中,利用ath79_register_gpio_keys_polled(-1, AP121_KEYS_POLL_INTERVAL,ARRAY_SIZE(ap121_gpio_keys),ap121_gpio_keys);实现了KEY device的注册。此函数调用后,会创建platform类型的设备,并和gpio-keys-polled驱动(gpio-button-hotplugc)实现了绑定。B 当按键时,则触发button_hotplug_event函数(gpio-button-hotplugc):调用button_hotplug_create_event产生uevent事件,调用button_hotplug_fill_even填充事件(JSON格式),并最终调用button_hotplug_work发出uevent广播上述广播,被procd进程中的hotplug_handler (procd/plug/hotplugc) 收到,并根据etc/hotplugjson中预先定义的JSON内容匹配条件,定位到对应的执行函数,具体为: [ "if", [ "and", [ "has", "BUTTON" ], [ "eq", "SUBSYSTEM", "button" ], ], [ "exec", "/etc/rcbutton/%BUTTON%" ] ],和 [ "if", [ "eq", "SUBSYSTEM", [ "net", "input", "usb", "ieee1394", "block", "atm", "zaptel", "tty", "button" ] ], [ "exec", "/sbin/hotplug-call", "%SUBSYSTEM%" ] ],

以上就是关于怎么模拟自动触发触摸电路全部的内容,包括:怎么模拟自动触发触摸电路、linux 步进电机 C语言编程,步距角为18度,我想把它改成转一圈后反转一圈。、按键带反回值keyon怎么控制led灯等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zz/10168671.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-06
下一篇 2023-05-06

发表评论

登录后才能评论

评论列表(0条)

保存