1234590qwehjm 发表于 2023-4-17 12:07 好的,谢谢 |
man1234567 发表于 2023-4-17 11:14 这个获取的AD值怎么转换,怎么看自己用的是多少位的ad |
1234590qwehjm 发表于 2023-4-17 00:38 将AD值与占空比进行关联就可以。 |
张大炮ie 发表于 2023-4-16 20:12 我想再问一下,怎么让它和通过ad获得的光敏电阻值结合,就是用光敏电阻的值去控制led的亮暗(值越小,灯越暗,值越大,灯越亮) |
张大炮ie 发表于 2023-4-16 20:12 谢谢大佬 |
#include<STC15.h> #define LED_PIN P1_0 void init_PWM() { TMOD |= 0x01; // 定时器0设置为16位定时器模式,以供PWM使用 ET0 = 1; //打开定时器中断 TR0 = 1; //启动定时器 } void delay_nms(unsigned int n) { // 毫秒级延时函数,可根据实际情况调节 unsigned int i,j; for (i=0; i<n; i++) { for (j=0; j<125; j++); } } void main() { unsigned char duty_cycle = 0; // 占空比,默认为0 unsigned char flag = 0; // 标志变量,用于判断递增还是递减 init_PWM(); while(1) { if(!flag) { duty_cycle++; if(duty_cycle == 255) { flag = 1; } } else { duty_cycle--; if(duty_cycle == 0) { flag = 0; } } LED_PIN = (duty_cycle == 0 || duty_cycle == 255) ? 0 : 1; // 避免输出高电平或低电平长时间照成LED损伤 delay_nms(10); // 延时10毫秒,可根据实际需求做出适当调整 } } void timer0() interrupt 1 { TH0 = 245; // 修改定时器初值 TL0 = 245; PWM_OUT = duty_cycle; // 修改PWM占空比 } 在上述代码中,循环呼吸灯的周期为500ms,可在 delay_nms() 函数中根据实际情况进行调整。同时,在 main() 函数中使用 flag 变量控制 duty_cycle 的递增和递减,从而实现循环呼吸灯的效果。在 timer0() 中断服务函数中,修改定时器初值并根据当前占空比设置 PWM 输出。 |