五一单片机控制12864液晶背光的问题。

你好!我用12864做了一个电子,可是到了晚上,背光灯实在是太亮了。关了吧!看不清字,不关吧,太亮睡不着觉!有什么好的方法,我想用单片机调节亮度。

如果不带PWM也可以用电位器,直接接在原来接p1.4的那条线,去掉三极管和电阻,直接用电位器提供调节。(其实你完全可以为了PWM而换单片机,换完了是一劳永逸,以后还多了ADC可以自动调节背光,可以唱出美妙的音乐,而不再是用方波输出的难听的音乐了)

如果单片机是带PWM的话就好办了,AT89S51当然不带,但是STC12C5A60S2就完全可以带替他,他是51系列单片机拓展型。(PWM不知道可以问我,完整程序我也有)

这样可以通过PWM来控制背光亮度(相当于能让单片机输出模拟信号,而不再只有高低两种电平)编程如下(在利用光敏电阻判断是否到晚上了,主程序就自己编吧):

sbit LED   = P1 ^ 4; //液晶屏背光定义(PWM控制,不能更改)

/*********************************************************************************************

函数名:PWM初始化函数(控制背光亮度)

调  用:PWM_init();

参  数:无

返回值:无

结  果:将PCA初始化为PWM模式,初始占空比为0

备  注:需要更多路PWM输出直接插入CCAPnH和CCAPnL即可

/**********************************************************************************************/

void PWM_init (void){

 CMOD=0x02; //设置PCA定时器

  CL=0x00; 

  CH=0x00;

 CCAPM1=0x42; //PWM1设置PCA工作方式为PWM方式(使用时删除//)

 CCAP1L=0x00; //设置PWM1初始值与CCAP0H相同

  CCAP1H=0x00; // PWM1初始时为0

  CR=1; //启动PCA定时器

}

/**********************************************************************************************/

/*********************************************************************************************

函数名:PWM1占空比设置函数(控制背光亮度)

调  用:PWM1_set();

参  数:0x00~0xFF(亦可用0~255)

返回值:无

结  果:设置PWM模式占空比,为0时全部高电平,为1时全部低电平

备  注:如果需要PWM1的设置函数,只要把CCAP0L和CCAP0H中的0改为1即可

/**********************************************************************************************/

void PWM1_set (unsigned char a){

 CCAP1L= a; //设置值直接写入CCAP0L

  CCAP1H= a; //设置值直接写入CCAP0H

}

/**********************************************************************************************/

/*********************************************************************************************

函数名:8位A/D转换初始化

调  用:Read_init (?);

参  数:输入的端口(0000 0XXX 其中XXX是设置输入端口号,可用十进制0~7表示,0表示P1.0,7表示P1.7)

返回值:无

结  果:

备  注:适用于STC12C5A60S2单片机

/**********************************************************************************************/

void Read_init (unsigned char CHA){

 unsigned char AD_FIN=0; //存储A/D转换标志

    CHA &= 0x07;            //选择ADC的8个接口中的一个(0000 0111 清0高5位)

    ADC_CONTR = 0x40;  //ADC转换的速度(0XX0 0000 其中XX控制速度,请根据数据手册设置)

    _nop_();

    ADC_CONTR |= CHA;       //选择A/D当前通道

    _nop_();

    ADC_CONTR |= 0x80;      //启动A/D电源

    DELAY_MS(1);            //使输入电压达到稳定(1ms即可)

}

/*********************************************************************************************

函数名:8位A/D转换函数(采集光敏电阻数据)

调  用:? = Read ();

参  数:无

返回值:8位的ADC数据

结  果:读出指定ADC接口的A/D转换值,并返回数值

备  注:适用于STC12C5A60S2单片机

/**********************************************************************************************/

unsigned char Read (void){

 unsigned char AD_FIN=0; //存储A/D转换标志

    ADC_CONTR |= 0x08;      //启动A/D转换(0000 1000 令ADCS = 1)

    _nop_();

    _nop_();

    _nop_();

    _nop_();

    while (AD_FIN ==0){     //等待A/D转换结束

        AD_FIN = (ADC_CONTR & 0x10); //0001 0000测试A/D转换结束否

    }

    ADC_CONTR &= 0xE7;      //1111 0111 清ADC_FLAG位, 关闭A/D转换, 

return (ADC_RES);          //返回A/D转换结果(8位)

}

/**********************************************************************************************/

/*********************************************************************************************

函数名:自动背光检测程序

调  用:AUTO_B();

参  数:无

返回值:无

结  果:检测环境光并控制背光亮度

备  注:

/**********************************************************************************************/

void AUTO_B (void){ //

 unsigned char d;

 d = Read();

 if(read_clock(0xc1) == 1){//检查自动调光开关

  if(d > 0xD0){//

   PWM1_set(1);//

  }else{

   PWM1_set(read_clock(0xc5)*0x1C);//

  }

 }

}

/*****************************************************************************/

参考资料:杜洋FT4未来时钟源程序

温馨提示:内容为网友见解,仅供参考
第1个回答  2011-02-09
如果是自带PWM模块的单片机,建议使用一楼的方法。没有的话,可以使用电位器调节亮度。如果想用单片机自动调节的话,建议增加一个限流电阻还有两个PNP的三级管。正常情况下,VCC经过被控制的其中一个三极管对背光供电。这样就可以由单片机控制背光的开启和关闭。白天的时候应该不需要开启背光的吧?然后下午的时候,开启这个控制背光的三极管,这时,此三极管导通。不过,输出的电流是通过一个限流电阻才到达背光的。这时,背光的亮度较低。这时,可以将另外一个三极管开启。这时,VCC经过两个三极管直接到达背光。这时背光的亮度最高。增加此三个元件后。可以有如下几种背光方案:白天时,关闭背光。节省电能。下午时,点亮背光。深夜关灯后,背光亮度减小。 背光的控制信号可以由光敏电阻得到信号。也可以由电子钟的时间值判断。时间值大于6,背光可以关闭。时间值大于16开启背光。不过是亮度低的背光。时间值大于18,开启全部三极管,背光最大亮度工作。时间值大于你睡觉时的时间后,背光再次变化成低亮度。深夜后,你可以直接关闭背光。也可以一直就这么低亮度的点亮背光。 限流电阻的值最好经过自己的试验。或是使用电位器自由调节。
第2个回答  2011-02-09
将12864控制背光的两脚一端接地,一端接IO口,让该IO口输出PWM信号
第3个回答  2011-02-09
液晶背光引脚你是怎么接的呀,接个电位器不就可以调节背光了吗,也不用非得用单片机控制,要是只为了方便自己玩加个电位器就可以!本回答被提问者采纳

五一单片机控制12864液晶背光的问题。
sbit LED = P1 ^ 4; \/\/液晶屏背光定义(PWM控制,不能更改)\/ 函数名:PWM初始化函数(控制背光亮度)调 用:PWM_init();参 数:无 返回值:无 结 果:将PCA初始化为PWM模式,初始占空比为0 备 注:需要更多路PWM输出直接插入CCAPnH和CCAPnL即可 \/***\/ void PWM_init (void){...

相似回答