PWM 无极调光程序分享
分享下刚调通的无极调光程序1023级可调
程序结构简单明了
#include <STC15W408AS.h> //STC12C5A60S2 专用头
#include "STC15W-ADC.h" //STC15W4K-ADC 硬件ADC模数转换
#define uintunsigned int
#define uchar unsigned char
unsigned int ADC0;
sbit led=P5^5;
sbit pwm=P1^0;
uint cycle,high,low;
void delay(uint t)
{
while(t--);
}
void main()
{
InitADC(); //ADC初始化
cycle=1024; //周期
while(1)
{
ADC0=ADC(0);
high=ADC0;
led=1;
delay(high);
led=0;
low=cycle-high;//低电平时间等=于周期-高电平时间
delay(low);
}
}
顶一下
adc的头文件整上来哈
灵魂无处安放 发表于 2019-3-12 21:27
adc的头文件整上来哈
/*----------------------------
----------------------------*/
extern void _nop_ (void);
#define ADC_POWER 0x80 //ADC电源控制位
#define ADC_SPEEDLL 0x00 //540个时钟
/////-----初始化ADC-----/////
void InitADC(void)
{
P1ASF = 0xC7; //设置为AD口:P1.0,P1.1,P1.2,P1.6,P1.7.
ADC_RES = 0; //清除结果寄存器
ADC_CONTR = ADC_POWER | ADC_SPEEDLL;
//Delay(2); //ADC上电并延时
}
/*----------------------------
读取ADC结果
extern void _pop_ (unsigned char _sfr);
extern void _nop_ (void);
----------------------------*/
typedef unsigned char BYTE;
#define ADC_FLAG 0x10 //ADC完成标志
#define ADC_START 0x08 //ADC起始控制位
/////-----读取ADC某一个端口-----/////
unsigned int ADC(BYTE ch)
{ unsigned int ADC10;
ADC_CONTR = ADC_POWER | ADC_SPEEDLL | ch | ADC_START;
_nop_(); //等待4个NOP
_nop_();
_nop_();
_nop_();
while (!(ADC_CONTR & ADC_FLAG));//等待ADC转换完成
ADC_CONTR &= ~ADC_FLAG; //Close ADC
ADC10=ADC_RES*4+ADC_RESL;
return ADC10; //返回ADC结果
}
顶一个{:1_1:}{:1_1:} 看不懂,但还是要支持
这个程序的确可以调光。不过不实用,建议使用定时器或者硬件PWM实现调光。
pkintel 发表于 2019-3-13 18:49
这个程序的确可以调光。不过不实用,建议使用定时器或者硬件PWM实现调光。
...
不实用?和定时器中断有何必然关联
页:
[1]