|
如题,RA8875关屏,设置亮度值并且保存,当按键按下的时候,读取亮度值并点屏,发现屏幕亮度比关屏的时候亮,概率比较大;
调用的函数为:
void RA8875_SetBackLight(u8 _bright)
{
if (_bright == 0)
{
RA8875_WriteReg(0x01, 0x00);
/* 关闭PWM, PWM1引脚缺省输出LOW */
RA8875_WriteReg(0x8A, 0 << 6);
display_off = 1;
}
else if (_bright == 1) /* 最大亮度 */
{
RA8875_WriteReg(0x01, 0x80);
/* 关闭PWM, PWM1引脚缺省输出HIGH */
RA8875_WriteReg(0x8A, 1 << 6);
display_off = 0;
}
else
{
/* 使能PWM1, 进行占空比调节 */
/* REG[8Ah] PWM1 Control Register (P1CR)
Bit7 脉波宽度调变 (PWM1) 设定
0 : 关闭,此状态下,PWM1 输出准位依照此缓存器Bit6 决定。
1 : 开启。
Bit6 PWM1 关闭时的准位
0 : 当PWM 关闭或于睡眠模式时,PWM1 输出为”Low” 状态。
1 : 当PWM 关闭或于睡眠模式时,PWM1 输出为”High” 状态。
Bit5 保留
Bit4 PWM1 功能选择
0 : PWM1 功能。
1 : PWM1 固定输出一频率为外部晶体振荡器Clock (Fin) 频率 1 /16 的Clock
Bit3-0 PWM1 电路的频率来源选择PWM_CLK 【不是PWM输出频率】
0000b : SYS_CLK / 1 1000b : SYS_CLK / 256
0001b : SYS_CLK / 2 1001b : SYS_CLK / 512
0010b : SYS_CLK / 4 1010b : SYS_CLK / 1024
0011b : SYS_CLK / 8 1011b : SYS_CLK / 2048
0100b : SYS_CLK / 16 1100b : SYS_CLK / 4096
0101b : SYS_CLK / 32 1101b : SYS_CLK / 8192
0110b : SYS_CLK / 64 1110b : SYS_CLK / 16384
0111b : SYS_CLK / 128 1111b : SYS_CLK / 32768
“SYS_CLK” 代表系统频率, 例如SYS_CLK 为20MHz, 当Bit[3:0] =0001b 时,PWM1 频率来源为10MHz。
对于安富莱的4.3寸模块,SYS_CLK = 68.75MHz
Bit3-0 选择8时,PWM_CLK = 68.75MHz / 256 = 0.2685546875 MHz = 268.55KHz;
实际输出的PWM波形频率 = PWM_CLK / 256 = 1.049kHz。【用示波器已验证,PWM频率很准】
选择10时,频率256Hz左右,避免1KHz的啸叫音
*/
display_off = 0;
RA8875_WriteReg(0x01, 0x80);
delay_ms(10);
RA8875_WriteReg(0x8A, (1 << 7) | 10);
delay_ms(10);
/* REG[8Bh] PWM1 Duty Cycle Register (P1DCR) */
RA8875_WriteReg(0x8B, _bright);
delay_ms(10);
}
}
请问高手这是怎么回事?求赐教 |
|