本帖最后由 jjbboox 于 2015-5-18 10:19 编辑
LCD1602是大家DIY的时候比较常用的显示器件。
使用方便,编程简单。
1602有16个引脚,具体每个引脚的功能我也就不多说了。
本帖只讨论背光控制接口A和K(也有叫做BL+,BL-的)。
为了方便实现,我只用K来控制背光的开启和关闭。A只要接电源正极即可。
何为呼吸效果,或者通俗一点叫做渐暗,渐亮功能。
个人定义如下 呼:慢慢由亮变暗至关闭,吸:慢慢由暗变亮至打开
实现方法就是用简单的PWM输出,不断调节控制端口的低电平占空比来实现。
下面这段代码中包含一个函数来实现呼和吸。
代码应该很容易看懂,就不多解释。
有需要的可以拷贝到自己的代码中使用。
- #include <AT89X52.h>
- #include <Intrins.h>
- //端口定义
- #define LED_K P2_4 //LCD1602背光控制位 0:点亮 1:关闭
- //LCD1602背光控制
- #define LCD1602_LED_ON 0 //点亮背光
- #define LCD1602_LED_OFF 1 //关闭背光
- //--------------------------------------
- // 函数名 :StepLedBackLight
- // 说明 :PWM输出点亮或者熄灭某个输出口的LED
- // 参数 :
- // uchar ucSteps 分段时长(0-255)
- // char cDirect 步进方向(1呼,-1吸)
- // ulong ulEdge 开始前等待时长
- // 返回 :无
- //--------------------------------------
- void StepLedBackLight(unsigned char ucSteps, char cDirect, unsigned long ulEdge){
- unsigned long i;
- unsigned char j;
- //等待
- for(i = 0; i < ulEdge; i++);
- //呼吸
- for(i=0; i < ucSteps; i++){
- for(j=0; j < ucSteps - i; j++){
- LED_K = cDirect==1?LCD1602_LED_ON:LCD1602_LED_OFF;
- _nop_();
- _nop_();
- _nop_();
- _nop_();
- }
- for(j=0; j < i; j++){
- LED_K = cDirect!=1?LCD1602_LED_ON:LCD1602_LED_OFF;
- _nop_();
- _nop_();
- _nop_();
- _nop_();
- }
- }
- }
- //--------------------------------------
- // 函数名 :main
- // 说明 :主函数
- // :1.初始化各控制变量
- // :2.初始化中断
- // :3.初始化串口波特率
- // :4.循环检查按键
- // 参数 :无
- // 返回 :无
- //--------------------------------------
- void main()
- {
- //呼
- StepLedBackLight(150, 1, 25000);
- //吸
- StepLedBackLight(150, -1, 25000);
- }
复制代码
|