这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » 企业专区 » Microchip » PIC单片机自带的LCD控制器,求指点,代码是否有错

共5条 1/1 1 跳转至

PIC单片机自带的LCD控制器,求指点,代码是否有错

助工
2014-12-31 10:41:10     打赏

void init_lcd()
{
	
	//----------------------------------------------------------清清除中断标志
	PIR2bits.LCDIF=0;		//清清除中断标志	
	//------------------------------------------------------------------LCDCON------7~0位
	LCDCONbits.LCDEN=0;					//使能LCD模块	1使能 0除能
	LCDCONbits.SLPEN=0;					//休眠模式下是否使能lcd,1禁止 0使能
	LCDCONbits.WERR=0;					//lcd写失败错误位,1有,0无
	//空白位				
									
	LCDCONbits.CS1=1;						//时钟源选择
	LCDCONbits.CS0=0;

	LCDCONbits.LMUX1=0;					//公共端选择
	LCDCONbits.LMUX0=1;
	//------------------------------------------------------------------LCDPS------7~0位
	LCDPSbits.WFT=0;						//A波形
	LCDPSbits.BIASMD=0;					//1/3偏置
	LCDPSbits.LCDA=0;						//标志位,0不在工作,1正在工作
	LCDPSbits.WA=1;							//允许写入数据

	LCDPSbits.LP3=0;						//预分频比
	LCDPSbits.LP2=0;
	LCDPSbits.LP1=0;
	LCDPSbits.LP0=0;

	//-------------------------------------------------------------------LCDREF------7~0位
	LCDREFbits.LCDIRE=0;				//内部参考电压使能
	LCDREFbits.LCDIRS=0;				//内部参考电压源
	LCDREFbits.LCDIRI=0;				//内部参考梯形电阻网络空闲使能位
	//空白位

	LCDREFbits.VLCD3PE=0;				//VLCD3是否连接到内部偏压
	LCDREFbits.VLCD2PE=0;				//VLCD2是否连接到内部偏压
	LCDREFbits.VLCD1PE=0;				//VLCD1是否连接到内部偏压
	//空白位
/*	//-------------------------------------------------------------------LCDCST------7~0位
	//空白位
	//空白位
	//空白位
	//空白位
	//空白位
	LCDCSTbits.LCDCST2=0;
	LCDCSTbits.LCDCST1=0;
	LCDCSTbits.LCDCST0=0;
*/	//-------------------------------------------------------------------LCDRL------7~0位
	LCDRLbits.LRLAP1=0;	//参考梯形电阻网络A时间功率控制位,功耗模式
	LCDRLbits.LRLAP0=0;

	LCDRLbits.LRLBP1=0;	//参考梯形电阻网络B时间功率控制位,功耗模式
	LCDRLbits.LRLBP0=0;
	//空白位

	LCDRLbits.LRLAT2=0;	//功耗模式
	LCDRLbits.LRLAT1=0;
	LCDRLbits.LRLAT0=0;
	//------------------------------------------------------------------ANSELx------7~0位
//	ANSELA=0;
//	ANSELB=0;

//	ANSELD=0;
//	ANSELE=0;

	//-------------------------------------------------------------------LCDSEn------------
	LCDSE1=0xfe;//seg9~seg15使能
	LCDSE2=0xff;//seg16~seg23使能  			LCDSE0~2 一共24段

	//-------------------------------------------------------------------LCDDATAn-----------
	LCDDATA1=0Xfe;//seg8~seg15,	相对于com0的seg8~seg15的8位数据
	LCDDATA2=0Xff;//seg16~seg23,	相对于com0的seg16~seg23的8位数据

	LCDDATA4=0Xfe;//seg8~seg15,	相对于com1的seg8~seg15的8位数据
	LCDDATA5=0Xff;//seg16~seg23,	相对于com1的seg16~seg23的8位数据

	//----------------------------------------------------------------------使能

	LCDCONbits.LCDEN=1;	//使能LCD模块



//	LCDPSbits.WA=0;

}




现在似乎已经使能了,因为初始化后LCD全部清空了。

可是我写的数据不是0啊,不知道是不是哪里配置错了,大家提提意见。

芯片是PIC16F1934 




关键词: PIC LCD控制器    

院士
2014-12-31 10:52:53     打赏
2楼
Microchip的片子

专家
2014-12-31 10:57:07     打赏
3楼
现在是什么现象?

助工
2014-12-31 11:14:14     打赏
4楼
LCD无显示,SEG口无波形

助工
2014-12-31 12:55:48     打赏
5楼

结贴了,附上正确代码------

void init_lcd()
{

	//----------------------------------------------------------清清除中断标志
PIR2bits.LCDIF=0;		//清清除中断标志	
	//------------------------------------------------------------------LCDCON------7~0位
	LCDCONbits.LCDEN=0;					//使能LCD模块	1使能 0除能
	LCDCONbits.SLPEN=0;				//休眠模式下是否使能lcd,1禁止 0使能
	LCDCONbits.WERR=0;					//lcd写失败错误位,1有,0无
	//空白位				
									
	LCDCONbits.CS1=1;						//时钟源选择
	LCDCONbits.CS0=0;

	LCDCONbits.LMUX1=0;					//公共端选择
	LCDCONbits.LMUX0=1;

	//------------------------------------------------------------------LCDPS------7~0位
	LCDPSbits.WFT=0;						//A波形
	LCDPSbits.BIASMD=0;					//1/3偏置
	LCDPSbits.LCDA=0;					//标志位,0不在工作,1正在工作
	LCDPSbits.WA=1;							//允许写入数据

	LCDPSbits.LP3=0;						//预分频比
	LCDPSbits.LP2=0;
	LCDPSbits.LP1=0;
	LCDPSbits.LP0=0;

	//-------------------------------------------------------------------LCDREF------7~0位
	LCDREFbits.LCDIRE=1;				//内部参考电压使能 ***【十分重要】
	LCDREFbits.LCDIRS=1;			//内部参考电压源   ***【十分重要】--来自FVR缓冲区
	LCDREFbits.LCDIRI=0;				//内部参考梯形电阻网络空闲使能位
	//空白位

	LCDREFbits.VLCD3PE=0;				//VLCD3是否连接到内部偏压
	LCDREFbits.VLCD2PE=0;				//VLCD2是否连接到内部偏压
	LCDREFbits.VLCD1PE=0;				//VLCD1是否连接到内部偏压
	//空白位
	//-------------------------------------------------------------------LCDCST------7~0位
	//空白位
	//空白位
	//空白位
	//空白位
	//空白位
	LCDCSTbits.LCDCST2=0;//对比度  000最大   111最小
	LCDCSTbits.LCDCST1=0;
	LCDCSTbits.LCDCST0=0;
	//-------------------------------------------------------------------LCDRL------7~0位
	LCDRLbits.LRLAP1=0;	//参考梯形电阻网络A时间功率控制位,功耗模式
	LCDRLbits.LRLAP0=0;

	LCDRLbits.LRLBP1=0;	//参考梯形电阻网络B时间功率控制位,功耗模式	**【十分重要】
	LCDRLbits.LRLBP0=1;//功耗模式随意,但一定要打开				**【十分重要】
	//空白位,					

	LCDRLbits.LRLAT2=0;	//功耗模式
	LCDRLbits.LRLAT1=0;
	LCDRLbits.LRLAT0=0;
	//------------------------------------------------------------------ANSELx------7~0位
//	ANSELA=0;	//复用口使能寄存器,慎用
//	ANSELB=0;

//	ANSELD=0;
//	ANSELE=0;

	//-------------------------------------------------------------------LCDSEn------------
	LCDSE1=0xfe;//seg9~seg15使能
	LCDSE2=0xff;//seg16~seg23使能  			LCDSE0~2 一共24段

	//-------------------------------------------------------------------LCDDATAn-----------
	LCDDATA1=0X00;//seg8~seg15,	相对于com0的seg8~seg15的8位数据
	LCDDATA2=0X00;//seg16~seg23,	相对于com0的seg16~seg23的8位数据

	LCDDATA4=0X00;//seg8~seg15,	相对于com1的seg8~seg15的8位数据
	LCDDATA5=0X00;//seg16~seg23,	相对于com1的seg16~seg23的8位数据

	//----------------------------------------------------------------------使能

LCDCONbits.LCDEN=1;	//使能LCD模块


}

 

后话:

 代码是参考演示版 才写出来的,1参考电压,2功耗模式,这两个十分重要,如代码所示。

前面就是因为这里没设置好,结果无显示,实际上代码都是对的。

演示版代码还是问代理商拿的,由此可见,资料十分的重要啊。



共5条 1/1 1 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册 ]