求助:PIC16F1937段式LCD程序

2020-02-06 10:26发布

如题,在做PIC16F1937段式LCD程序时,不知道怎么回事段式LCD一直点不亮,还请高手帮帮忙,谢谢!

SEG0~SEG9 COM0~COM3
代码如下:
#include <pic16f1937.h>
//-------------------------------------------------------------------------------//
//函数名:Init_Port                                                                                                                            //
//功能:初始化I/O口                                                                                                                    //
//------------------------------------------------------------------------------//
void Init_Port(void)
{
       
        TRISA = 0x00;
        TRISB = 0x00;                       
        TRISC = 0x00;                               
        TRISD = 0x00;                                       
        TRISE = 0x00;       
        //////////////
        PORTA = 0x00;
        PORTB = 0x00;
        PORTC = 0x00;
        PORTD = 0x00;
        PORTE = 0x00;
}

//-------------------------------------------------------------------------------//
//函数名:lcd_init                                                                    //
//功能:lcd初始化                                                                    //
//------------------------------------------------------------------------------//
void lcd_init(void)
{
LCDCON=0b10011111;//
//|||||||+---LMUX0
//||||||+----LMUX1 11--1/4
//|||||+-----CS0 00=FOSC/8192,01 = T1OSC (Timer1) /32,
//||||+-----CS1 1x=LFINTOSC(31 kHz) /32
//|||+------VLCDEN
//||+-------WERR
//|+--------#SLPEN
//+---------LCDEN
LCDPS=0b00110000;//
//|||||||+---LP0 1111 = 1:16
//||||||+----LP1  
//|||||+-----LP2
//||||+-----LP3 0000=1:1  
//|||+------WA 1 = 允许写入LCDDATAx 寄存器
//||+-------LCDA 1 = 使能LCD 驱动模块
//|+--------BIASMD当LMUX<1:0>=11时:0=1/3偏置模式(不要将该位置1)
//+---------WFT 1在每一帧边界改变相位0在每一公共端类型内改变相位
//LCDREF=0B11101110;
//
LCDSE0=0b11111111;
LCDSE1=0b00000011;//LCD引脚使能寄存器,SEG0~SEG9
}

//-------------------------------------------------------------------------------//
//函数名:main                                                                                                                            //
//功能:主程序入口函数                                                                                            //
//------------------------------------------------------------------------------//
void main(void)
{
unsigned char i;
INTCON=0;//关闭总中断,禁止外设,timer0,外部,电平中断,清除timer0,外部,电平中断标志
ANSELA =0x00;
ANSELB =0x00;
//ANSELC =0x00;
ANSELD =0x00;
ANSELE =0x00;

Init_Port();
lcd_init();

LCDDATA0=0xfc;
LCDDATA3=0xfc;
LCDDATA6=0xfc;
LCDDATA9=0xfc;

while(1)
        {
        LCDDATA0 = 0XFF;
        DelayMs(500);       
        LCDDATA0 = 0X00;
        DelayMs(500);
        }

}
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
21条回答
surf_131
2020-02-06 17:53
pic16f914的,借鉴吧。这是我买的一个段式LCD开发板的测试程序。焊接好后一运行就全点燃了。

#include <pic.h>
#include <htc.h>
//#include <pic16f914.h>

__CONFIG(XT&WDTEN);


void init(void)
{
         

    CMCON0 = 0b00000111;   //COMPARATOR OFF
    ADCON0 = 0b00000000;   //ADC off

   // TRISA = 0b00000000;               
   // TRISB = 0b00000000;
   // TRISC = 0b00000000;
   // TRISD = 0b00000000;
   // TRISE = 0b00000000;    //数据方向寄存器
  
          OSCCON = 0b00001010;   //系统时钟由CONFIG决定
    /*         |||||||+---1 = 内部振荡器用作系统时钟 0 = 时钟源由配置字寄存器中的FOSC<2:0> 定义
               ||||||+----LTS = LFINTOSC稳定 0 = LFINTOSC不稳定
               |||||+-----HTS  1 = HFINTOSC稳定,0 = HFINTOSC不稳定,
               ||||+----- OSTS 1 = 器件使用由配置字寄存器中的FOSC<2:0> 定义的外部时钟源
               |||+------ IRCF
               ||+------- IRCF
               |+-------- IRCF
               +--------- IRCF 内部振荡器频率选择位
    */
          ANSEL=0;              //引脚被分配为数字IO,非模拟输入

           PORTA=0x00;
          PORTB=0x00;
          PORTC=0x00;  
          PORTD=0x00;
          PORTE=0x00;                  
          //RBIE=0;                    
}

void lcd_init(void)
{
          LCDCON = 0b10011111; //
    /*         |||||||+---LMUX0
               ||||||+----LMUX1 11--1/4
               |||||+-----CS0 00 = FOSC/8192,01 = T1OSC (Timer1) /32,
               ||||+----- CS1 1x = LFINTOSC (31 kHz) /32
               |||+------ VLCDEN
               ||+------- WERR
               |+-------- #SLPEN
               +--------- LCDEN
    */
    LCDPS = 0b00110000; //
    /*        |||||||+---LP0    1111 = 1:16
              ||||||+----LP1
              |||||+-----LP2
              ||||+----- LP3    0000 = 1:1
              |||+------ WA     1 = 允许写入LCDDATAx 寄存器
              ||+------- LCDA   1 = 使能LCD 驱动模块
              |+-------- BIASMD 当LMUX<1:0> = 11 时:0 = 1/3 偏置模式(不要将该位置1)
              +--------- WFT    1 在每一帧边界改变相位0在每一公共端类型内改变相位
    */

    LCDSE0  = 0b11111111;
    LCDSE1  = 0b00111111; //LCD 引脚使能寄存器  
}


void main(void)
{       
          init();
    lcd_init();
   
    LCDDATA0=0xff;
    LCDDATA1=0xff;
    LCDDATA2=0xff;
    LCDDATA3=0xff;
    LCDDATA4=0xff;
    LCDDATA5=0xff;
    LCDDATA6=0xff;
    LCDDATA7=0xff;
    LCDDATA8=0xff;
    LCDDATA9=0xff;
    LCDDATA10=0xff;
    LCDDATA11=0xff;
}

一周热门 更多>