【发布时间】:2017-06-06 07:18:18
【问题描述】:
我正在尝试将我的 LED 控制在 256 (0-255) 不同的亮度级别。我的控制器设置为 80mhz 并在 rtos 上运行。我将时钟模块设置为每 5 微秒和亮度中断一次,例如到 150。LED 正在变暗,但我不确定是否真的有 256 个不同的级别是否正确
int counter = 1;
int brightness = 0;
void SetUp(void)
{
SysCtlClockSet(SYSCTL_SYSDIV_2_5|SYSCTL_USE_PLL|SYSCTL_OSC_MAIN|SYSCTL_XTAL_16MHZ);
GPIOPinTypeGPIOOutput(PORT_4, PIN_1);
Clock_Params clockParams;
Clock_Handle myClock;
Error_Block eb;
Error_init(&eb);
Clock_Params_init(&clockParams);
clockParams.period = 400; // every 5 microseconds
clockParams.startFlag = TRUE;
myClock = Clock_create(myHandler1, 400, &clockParams, &eb);
if (myClock == NULL) {
System_abort("Clock create failed");
}
}
void myHandler1 (){
brightness = 150;
while(1){
counter = (++counter) % 256;
if (counter < brightness){
GPIOPinWrite(PORT_4, PIN_1, PIN_1);
}else{
GPIOPinWrite(PORT_4, PIN_1, 0);
}
}
}
【问题讨论】:
-
您不确定它是否正确?你试过了吗?具有无限循环的中断处理程序根本不可能工作!如果计数器是
uint8_t,那么您也不需要% 256。