LED灯自动闪烁
使用CH582M实现
int main()
{
uint8_t len;
SetSysClock(CLK_SOURCE_PLL_60MHz);
GPIOA_SetBits(GPIO_Pin_8);//LED灯
GPIOA_ModeCfg(GPIO_Pin_8, GPIO_ModeOut_PP_20mA);
while(1){
GPIOA_SetBits(GPIO_Pin_8);
DelayMs(1000);
GPIOA_ResetBits(GPIO_Pin_8);
DelayMs(1000);
}
}
用按钮控制LED灯开关
使用CH582M实现
int main()
{
uint8_t len;
SetSysClock(CLK_SOURCE_PLL_60MHz);
GPIOA_SetBits(GPIO_Pin_8);//LED灯
GPIOB_SetBits(GPIO_Pin_5);//按钮
GPIOA_ModeCfg(GPIO_Pin_8, GPIO_ModeOut_PP_5mA);
GPIOB_ModeCfg(GPIO_Pin_5, GPIO_ModeIN_PU);
GPIOA_InverseBits(GPIO_Pin_8);
while(1){
int newstates=GPIOB_ReadPort();
if(!(newstates & GPIO_Pin_5)){
GPIOA_InverseBits(GPIO_Pin_8);
DelayMs(1000);
}
}
}
使用树莓派 pico实现
from machine import Pin
from time import sleep
leds = Pin(0,Pin.OUT) # 定义LED管脚
up_button = Pin(1, Pin.IN, Pin.PULL_UP) # 设置up_button管脚为输入模式,上拉至高电平(3.3V)
leds.value(0)
makerobo_up_status = 1#初始化状态,1为高电平,即未按下状态
while True:
makerobo_up_tmp = up_button.value() #获取管脚当前状态
if makerobo_up_tmp != makerobo_up_status: #判断状态是否与初始化状态相同
if makerobo_up_tmp == 0: #判断是否被按下
leds.value(1)
sleep(0.05)
makerobo_up_status = makerobo_up_tmp #松开按键时自动弹开断开,状态被置为高电平状态回到初始化状态
sleep(0.05)
leds.value(0)
根据光敏的强度来控制LED的亮度
int main()
{
uint8_t len;
SetSysClock(CLK_SOURCE_PLL_60MHz);
GPIOA_SetBits(GPIO_Pin_8);//设置传感器io
GPIOA_ModeCfg(GPIO_Pin_8, GPIO_ModeIN_PU);
while(1){
int newstates=GPIOA_ReadPort();
if(!(newstates & GPIO_Pin_8)){
printf("状态为1");
DelayMs(1000);
}else{
printf("状态为0");
DelayMs(1000);
}
}
}
输出的内容不会显示,只有后期通过串口发送给另一个能显示的芯片获得调试信息,如:树莓派 pico。
from machine import Pin,PWM,ADC
from time import sleep
makerobo_flame = 0 # ADC0复用管脚为GP26
makerobo_R =2 # 定义LED管脚
makerobo_DO = 3 # 光敏传感器数字IO口
# 初始化程序
def makerobo_setup():
global p_R
global flame_ADC
global flame_DO
flame_DO = Pin(makerobo_DO,Pin.IN) # 设置光敏传感器数字IO口为输入模式
flame_ADC = ADC(makerobo_flame)
p_R = PWM(Pin(makerobo_R)) # 定义红色LED PWM
p_R.freq(2000) # 设置频率为2KHz
# 打印信息,打印出光敏传感器的状态值
def makerobo_Show(x):
if x == 1: # 安全
print ('')
print (' *******************')
print (' * Makerobo Safe~ *')
print (' *******************')
print ('')
if x == 0: # 有火焰
print ('')
print (' ******************')
print (' * Makerobo Fire! *')
print (' ******************')
print ('')
# 循环函数
def makerobo_loop():
makerobo_status = 1 # 状态值
# 无限循环
while True:
# 读取光敏传感器数字IO口
makerobo_tmp = flame_DO.value()
if makerobo_tmp != makerobo_status: # 判断状态发生改变
makerobo_Show(makerobo_tmp) # 打印出光敏传感器的提示信息
p_R.duty_u16(flame_ADC.read_u16()) # 改变占空比
makerobo_status = makerobo_tmp # 当前状态值作为下次状态值进行比较,避免重复打印
sleep(0.5) # 延时200ms
# 程序入口
if __name__ == "__main__":
makerobo_setup() # 初始化设置函数
makerobo_loop() # 循环显示信息
用按钮控制双色LED灯颜色变化
int main()
{
uint8_t len;
SetSysClock(CLK_SOURCE_PLL_60MHz);
GPIOA_SetBits(GPIO_Pin_8);//LED灯G
GPIOA_SetBits(GPIO_Pin_9);//LED灯R
GPIOB_SetBits(GPIO_Pin_5);//按钮
GPIOA_ModeCfg(GPIO_Pin_8, GPIO_ModeOut_PP_5mA);
GPIOA_ModeCfg(GPIO_Pin_9, GPIO_ModeOut_PP_5mA);
GPIOB_ModeCfg(GPIO_Pin_5, GPIO_ModeIN_PU);
GPIOA_InverseBits(GPIO_Pin_8);
GPIOA_InverseBits(GPIO_Pin_9);
int num=0;
while(1){
int newstates=GPIOB_ReadPort();
if(!(newstates & GPIO_Pin_5)){
if(num%2==0){
GPIOA_SetBits(GPIO_Pin_8);
DelayMs(1000);
GPIOA_InverseBits(GPIO_Pin_8);}
else{
GPIOA_SetBits(GPIO_Pin_9);
DelayMs(1000);
GPIOA_InverseBits(GPIO_Pin_9);}
}
num++;
}
}
ing
以下代码是欲用中断实现按钮控制LED灯的构想,目前并未实现
int main()
{
uint8_t len;
SetSysClock(CLK_SOURCE_PLL_60MHz);
GPIOA_SetBits(GPIO_Pin_8);//LED灯G
GPIOA_SetBits(GPIO_Pin_9);//LED灯R
GPIOB_SetBits(GPIO_Pin_5);//轻触按钮
GPIOA_ModeCfg(GPIO_Pin_8, GPIO_ModeOut_PP_20mA);
GPIOA_ModeCfg(GPIO_Pin_9, GPIO_ModeOut_PP_20mA);
GPIOB_ModeCfg(GPIO_Pin_5, GPIO_ModeIN_PU);
//GPIOA_InverseBits(GPIO_Pin_8);//初始为G
GPIOA_ResetBits(GPIO_Pin_9);
while(1){
void GPIOB_ITModeCfg(PB5, GPIO_ITMode_LowLevel);
// if(!(GPIOB_ReadITFlagPort())){
GPIOA_InverseBits(GPIO_Pin_8);
GPIOA_InverseBits(GPIO_Pin_9);
DelayMs(1000);
GPIOB_ClearITFlagBit(GPIO_Pin_5);}
// }
}
实现双色LED颜色自动变化
int main()
{
uint8_t len;
SetSysClock(CLK_SOURCE_PLL_60MHz);
GPIOA_SetBits(GPIO_Pin_8);//LED灯G
GPIOA_SetBits(GPIO_Pin_9);//LED灯R
GPIOA_ModeCfg(GPIO_Pin_8, GPIO_ModeOut_PP_20mA);
GPIOA_ModeCfg(GPIO_Pin_9, GPIO_ModeOut_PP_20mA);
GPIOA_ResetBits(GPIO_Pin_9);
while(1){
GPIOA_InverseBits(GPIO_Pin_8);
GPIOA_InverseBits(GPIO_Pin_9);
DelayMs(1000);
}
}
-- 完结 --