ESP32玩转MicroPython(三) 延时、计时 和GPIO *** 作

ESP32玩转MicroPython(三) 延时、计时 和GPIO *** 作,第1张

使用 time 模块:

这些延时是阻塞式延时, 后续程序需要等待其完成

ESP32端口有四个硬件计时器。使用 machineTimer 类,其计时器ID为0到3(包括3):

这些延时是计数器延时, 不会阻塞其他程序

下面这个例子能够很好的看出这一点

值得注意的是, 回调函数必须有一个形参t来接收定时器本身 ,这样可以从回调中停止定时器了

使用 machinePin 类:

可用的引脚来自以下范围(包括以下范围):0-19、21-23、25-27、32-39。这些对应于ESP32芯片的实际GPIO引脚号。

引脚1和3分别是REPL UART TX和RX

引脚6、7、8、11、16和17用于连接嵌入式闪存,不建议用于其他用途

引脚34-39仅用于输入,也没有内部上拉电阻

可以设置某些引脚的上拉值PinPULL_HOLD以降低深度睡眠期间的功耗。

如果按下按键, 则暂停/重启 闪灯

下面的例子做了一个简易呼吸灯效果:

#include "reg51h" //包含头文件\x0d\#define uchar unsigned char\x0d\#define uint unsigned int\x0d\//\x0d\//延时函数\x0d\//\x0d\delay(uint time) //int型数据为16位,所以最大值为65535 \x0d\ {\x0d\ uint i,j; //定义变量i,j,用于循环语句 \x0d\ for(i=0;i回答于 2022-11-16

可以用软件PWM做出来

这是一个软件PWM的函数

由于晶振不一样,你需要自己写延时函数void DelayUS(unsigned int ntime);

void pwm_output(int updated_rate)

{

int pwm_high,pwm_low,pwm_cycle; //分别为频率周期内高电平时间,低电平时间,周期

pwm_high = updated_rate;

pwm_cycle = 1500; //频率周期为1500微秒,约333Hz(计算方法为每一秒种内的微秒除以频率周期),可更改。

pwm_low = (pwm_cycle - pwm_high);

pwm_out = 0; //PWM高电平输出

DelayUS(pwm_high); //周期内PWM高电平输出时间

pwm_out = 1; //PWM低电平输出

DelayUS(pwm_low); //周期内PWM低电平输出时间

}

就是一个典型的差分放大电路,输入的一串电容是用于滤波的,与输入电阻组成了低通滤波器。

对应于公式R1的电阻是R134、R934串联,也即2K。对应于R4的电阻是R128、R132并联,也即1664K。所以增益大概832倍,即832×(PHV-减PHV+)。

扩展资料:

由红外线传感器、信号放大电路、电压比较器、延时电路和音响报警电路等组成。

红外线探测传感器IC1探测到前方人体辐射出的红外线信号时,由IC1 的②脚输出微弱的电信号,经三极管VT1 等组成第一级放大电路放大,再通过C2输入到运算放大器IC2中进行高增益、低噪声放大,此时由IC2①脚输出的信号已足够强。

IC3作电压比较器,它的第⑤脚由R10、VD1提供基准电压,当IC2①脚输出的信号电压到达IC3的⑥脚时,两个输入端的电压进行比较,此时IC3的⑦脚由原来的高电平变为低电平。IC4 为报警延时电路,R14 和C6 组成延时电路,其时间约为1 分钟。

当IC3的⑦脚变为低电平时,C6通过VD2放电,此时IC4 的②脚变为低电平,它与IC4的③脚基准电压进行比较,当它低于其基准电压时,IC4 的①脚变为高电平,VT2 导通,讯响器BL通电发出报警声。人体的红外线信号消失后,IC3的⑦脚又恢复高电平输出,此时VD2 截止。

由于C6两端的电压不能突变,故通过R14向C6 缓慢充电,当C6两端的电压高于其基准电压时,IC4的①脚才变为低电平,时间约为1 分钟,即持续1分钟报警。

由VT3、R20、C8 组成开机延时电路,时间也约为1 分钟,它的设置主要是防止使用者开机后立即报警,好让使用者有足够的时间离开监视现场,同时可防止停电后又来电时产生误报。

该装置采用9-12V直流电源供电,由T 降压,全桥U整流,C10 滤波,检测电路采用IC5 78L06供电。本装置交直流两用,自动无间断转换。

参考资料来源:百度百科-LM358

void Display (a) //显示函数 显示256帧中的一帧

{ //PORTA = 0x08; //亮(PA3高对应着发亮) //这里注释掉,看下你的LED灯会不会亮,如果不亮就是设备的问题了,看下这个变量哪里用到了。

Delay (a); //延时a的长度

PORTA = 0x00; //暗

Delay (255-a);//延时总PWM长度减a

}

#include "reg51h" //包含头文件

#define uchar unsigned char

#define uint unsigned int

//

//延时函数

//

delay(uint time) //int型数据为16位,所以最大值为65535

{

uint i,j; //定义变量i,j,用于循环语句

for(i=0;i<time;i++) //for循环,循环50time次

for(j=0;j<50;j++); //for循环,循环50次

}

//

//主函数

//

void main() //主函数

{

uint i; //定义变亮i

while(1) //进入while死循环

{

for(i=0;i<200;i++) //for循环,实现LED由亮逐渐变暗

{

P0=0xff; //熄灭8位发光二极管

delay(i); //延时保持熄灭状态i个时间单位

P0=0x00; //点亮8位发光二极管

delay(200-i); //延时保持点亮状态200-i个时间单位

}

P0=0xff; //熄灭8位发光二极管

delay(5000); //延时保持熄灭状态5000个时间单位,使现象更明显

for(i=0;i<200;i++) //for循环,实现LED由暗逐渐变亮

{

P0=0x00; //点亮8位发光二极管

delay(i); //延时保持熄灭状态i个时间单位

P0=0xff; //熄灭8位发光二极管

delay(200-i); //延时保持点亮状态200-i个时间单位

}

}

}

以上就是关于ESP32玩转MicroPython(三) 延时、计时 和GPIO *** 作全部的内容,包括:ESP32玩转MicroPython(三) 延时、计时 和GPIO *** 作、51单片机设计呼吸灯是什么、哪位大神可以帮我做呼吸灯,即一个亮,另一个就暗。一直循环,用89c52单片机写等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

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

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

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

发表评论

登录后才能评论

评论列表(0条)

保存