这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界» 论坛首页» 企业专区» 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 跳转至

回复

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