大家好,今天在使用MSP430FR4133以8-Mux方式驱动一款段式液晶。代码模板使用的是TI官方提供的示例代码 “msp430fr413x_LCDE_01.C”。参照数据手册修改了相应的寄存器值。仿真后液晶不显示,请各位帮忙解惑,不胜感激。本人第一次使用MSP430系列单片机。代码如下:
#include <msp430.h> #define pos1 6// Digit A1 - L4 #define pos2 7// Digit A2 - L6 #define pos3 8// Digit A3 - L8 #define pos4 9// Digit A4 - L10 #define pos5 10// Digit A5 - L2 #define pos6 11// Digit A6 - L18 const char digit[10] = {0xFC,// "0"0x60,// "1"0xDB,// "2"0xF3,// "3"0x67,// "4"0xB7,// "5"0xBF,// "6"0xE4,// "7"0xFF,// "8"0xF7// "9" }; int main( void ) {WDTCTL = WDTPW | WDTHOLD;// Stop watchdog timer// Configure XT1 oscillatorP4SEL0 |= BIT1 | BIT2;// P4.2~P4.1: crystal pinsdo{CSCTL7 &= ~(XT1OFFG | DCOFFG);// Clear XT1 and DCO fault flagSFRIFG1 &= ~OFIFG;}while (SFRIFG1 & OFIFG);// Test oscillator fault flagCSCTL6 = (CSCTL6 & ~(XT1DRIVE_3)) | XT1DRIVE_2;// Higher drive strength and current consumption for XT1 oscillator// Disable the GPIO power-on default high-impedance mode// to activate previously configured port settingsP2OUT &= ~BIT7;// Clear P1.0 output latch for a defined power-on stateP2DIR |= BIT7;// Set P1.0 to output directionPM5CTL0 &= ~LOCKLPM5;// Configure LCD pinsSYSCFG2 |= LCDPCTL;// R13/R23/R33/LCDCAP0/LCDCAP1 pins selectedLCDPCTL0 = 0xFFFF;LCDPCTL1 = 0x00FF;LCDPCTL2 = 0x0000;// L0~L23 pins selected //使用L0-L23段LCDCTL0 = LCDSSEL_0 | LCDDIV_7;// flcd ref freq is xtclk// LCD Operation - Mode 3, internal 3.08v, charge pump 256HzLCDVCTL = LCDCPEN | LCDREFEN | VLCD_6 | (LCDCPFSEL0 | LCDCPFSEL1 | LCDCPFSEL2 | LCDCPFSEL3);LCDMEMCTL |= LCDCLRM;// Clear LCD memoryLCDCSSEL0 = 0x0000;// Configure COMs and SEGsLCDCSSEL1 = 0x00FF;// 选择L16-L23位COM脚LCDCSSEL2 = 0x0000;LCDM23 = 0x01;// L23 = COM0LCDM22 = 0x02;// L22 = COM1LCDM21 = 0x04;// L21 = COM2LCDM20 = 0x08;// L20 = COM3LCDM19 = 0x10;// L19 = COM4LCDM18 = 0x20;// L18 = COM5LCDM17 = 0x40;// L17 = COM6LCDM16 = 0x80;// L16 = COM7// Display "123456"LCDMEM[0] = 0XFF;LCDMEM[1] = 0XFF;LCDMEM[2] = 0XFF;LCDMEM[3] = 0XFF;LCDMEM[4] = 0XFF;LCDMEM[5] = 0XFF;LCDCTL0 |= LCD8MUX | LCDON;// Turn on LCD, 4-mux selectedPMMCTL0_H = PMMPW_H;// Open PMM Registers for writePMMCTL0_L |= PMMREGOFF_L;// and set PMMREGOFFwhile(1){//P2OUT ^= BIT7;// Toggle P1.0 using exclusive-OR//__delay_cycles(100000);// Delay for 100000*(1/MCLK)=0.1s}// __bis_SR_register(LPM3_bits | GIE);// Enter LPM3.5// __no_operation();// For debugger }
液晶接口如下图所示:
PS: 程序仿真可以正常运行。经过测试,各个IO输出正常
谢谢各位大神,求拯救。。
Maka Luo:
测试一下LCDPIN脚输出波形是否正确,如果LCD引脚输出波形正确,那可能是LCD那边问题。
另外建议所以LCDMEM 都写入0xFF,尽管部分你没有使用。
// Display "123456"LCDMEM[0] = 0XFF;LCDMEM[1] = 0XFF;LCDMEM[2] = 0XFF;LCDMEM[3] = 0XFF;LCDMEM[4] = 0XFF;LCDMEM[5] = 0XFF;
user3469646:
回复 Maka Luo:
感谢您的关注,按照您的建议测量了管脚输出波形,发现输出电平有问题,重新测试了 电容C5-C8两端的电压,分别是 Vc5~0.9V Vc6~0.9V Vc7~1.4V Vc8~0.8V
仔细检查了芯片各个管脚,不存在虚焊短路问题。请问这中情况有可能是什么原因造成的呢?
我仔细对比了MSP-EXP430FR4133开发板的原理图与我自己的图纸,关于段式液晶驱动的相关管脚连接都相同(除了COM与SEG脚)。而且相同的代码,下载入MSP-EXP430FR4133开发板,C1-C5电压是正常的1V\2V\3V\1V
Maka Luo:
回复 user3469646:
那应该是软件配置的问题。
LCD电压设置是否正确?
MSP430FR4133 SEG和COM是可以灵活配置的,这个配置和TI参考例程不一样,你需要自己修改。
martin wang:
解决了吗?我遇到同样问题,请赐教,qq:916922155
user4087491:
今天刚拿到这款的demo板,我试试
user5094947:
回复 Maka Luo:
您好,我这边遇到类似问题,L0-L22设置成seg,L32-L39设置成COM;通过查看波形,L0-L22都可以控制且波形正确,但是L32-L39COM口波形处于V2,V4之间的矩形波,对照手册,COM口波形不应该是这样,不知哪出问题了?驱动代码如下:LCDCTL0 = LCDSSEL_1|LCDDIV_7;// ALCK帧频率f(FRAME)在16Hz~64Hz
LCDBLKCTL = LCDBLKMOD_2;//allLCDVCTL = LCDCPEN |LCDREFEN |VLCD_8 |(LCDCPFSEL0|LCDCPFSEL1|LCDCPFSEL2|LCDCPFSEL3);//Mode 3查阅17.2.8 LCD Operation ModesLCDMEMCTL |= LCDCLRM;LCDPCTL0 = 0xFFFF;//L0-L15LCDPCTL1 = 0x007F;//L16-L22LCDPCTL2= 0x00FF;//L32-L39–LCDLCDCSSEL2 = 0x00FF;//L32-L39–COMLCDM39= BIT0;//COM0LCDM38= BIT1;//COM1LCDM37= BIT2;//COM2LCDM36= BIT3;//COM3LCDM35= BIT4;//COM4LCDM34= BIT5;//COM5LCDM33= BIT6;//COM6LCDM32= BIT7;//COM7
SYSCFG2 |= LCDPCTL;//P4.3 4 5 6 7–lcdLCDCTL0 |= LCD8MUX | LCDON;请帮忙看看,是否软件配置出问题了?
user5094947:
根据我这边测试表明,COM口只能配置L0-L19,波形才是正常的,配置成L20及以上的,以上操作配置出来波形不对,但我还不清楚如何操作。故而显示不正常。