发布网友 发布时间:2022-04-20 04:47
共1个回答
热心网友 时间:2023-07-25 09:32
一般情况下,用单片机的PWM实现LED的渐亮渐灭,当然,PWM也是靠定时器实现的,不过你自己也可以模拟出来。给你一个例程,我是用AVR的片子 第一种,PWM方式: /定时器T2初始化 void timer2_init(void) { TCCR2 = 0x00;//停止定时器 ASSR = 0x00;//异步时钟模式 TCNT2 = 0x00;//初始值 OCR2 = 0x7F;//匹配值,改变此值,即可改变占空比的大小,从而调节亮度 TIMSK |= 0x00;//中断允许 TCCR2 = 0x61;//启动定时器 } 第二种,采用模拟方式,现场写: /定时器T2初始化 void timer2_init(void) { TCCR2 = 0x00;//停止定时器 ASSR = 0x00;//异步时钟模式 TCNT2 = 0x06;//初始值 OCR2 = 0x05;//匹配值 TIMSK |= 0x40;//中断允许 TCCR2 = 0x03;//启动定时器 } //T2溢出中断服务程序 #pragma interrupt_handler timer2_ovf_isr:5 void timer2_ovf_isr(void) { TCNT2 = 0x06; //1ms定时初值 add_num++; //当然,这个得你事先定义好,用于定时器时间累加 if(add_num<a) LED_ON; //灯亮的时间 if(add_num<b) LED_OFF;//灯灭的时间,b>a,如果b=2a,那么占空比即为50%,a就相当于初值了,改变a,b的大小,即可模拟出PWM了 }