标题: 有大哥能帮我看看为啥液晶点不亮吗?两周了,难受死我了 [打印本页]

作者: 智能羊羊    时间: 2021-8-4 15:30
标题: 有大哥能帮我看看为啥液晶点不亮吗?两周了,难受死我了
#include "ior5f10wmg.h"
#include "ior5f10wmg_ext.h"
#define CGC_SUBWAITTIME         185U
#include "stdint.h"
#define NOP     (__no_operation)

__intrinsic void __no_operation(void);
#define DI     (__disable_interrupt)

__intrinsic void __disable_interrupt(void);
#define DI      (__disable_interrupt)
#define EI      __enable_interrupt



void  R_LCD_Create (void)
{
    volatile uint16_t wt_count; //定义计数变量,延时用
   __intrinsic void __no_operation(void);
    LCDON = 0;           //让数据寄存器的数据与0相与,关闭LCD
    LCDM1 = 0x00;       //LCD模式寄存器1的初始化设定
    LCDM0 = 0x0D;       //LCD模式寄存器0的初始化设定,外部升压,A波形,4时间片,1/3偏压

    ISCLCD &= 0x02;      //LCD输入切换寄存器初始化设定
                         //怎么设定要看相应的引脚是否有参与LCD的功能
    LCDC0 = 0x07;        //LCD时钟控制寄存器0,其作用是控制帧频率,而帧频率由波形时间片等因素决定
                     //此处是fSUB/2^8 or fIL/2^8

    VLCON=0;
    VLCD = 0x04;         //LCD升压控制电平寄存器,在外部电阻分压方式下, VLCD 寄存器必须为初始值04H

    for (wt_count = 0; wt_count <= 1000; wt_count++)  //延时
    {
        NOP();
    }

   VLCON = 1;      
    for (wt_count = 0; wt_count <= 1000; wt_count++)
    {
        NOP();
    }

    SCOC = 1;           //允许LCD显示
}


void R_CGC_Create(void)//初始化时钟
{
volatile uint16_t i;
__intrinsic void __no_operation(void);
    OSMC = 0x80;   //超低消耗电流运行
    //设置时钟运行模式控制寄存器CMC
    CMC = 0x10;   // 副时钟系统XT1震荡模式,使震荡电路运行 ,且震荡模式为低功耗震荡
    //设置系统时钟控制器CKC

    //设置时钟运行状态控制寄存器
    CSC = 0x80;   //将XTSTOP位清零,使XT1震荡电路开始震荡
    //等待副时钟系统所需要的的时间
      for( i=0; i<=CGC_SUBWAITTIME; i++ )
    {
        NOP();
    }
    CKC = 0x40;  //通过CKC寄存器的CSS位将XT1振荡时钟设定为CPU/外围硬件时钟

}
void R_PORT_Create(void)
{
   PFSEG0 = 0x30;
   PFSEG1 = 0x35;
   PFSEG4 = 0xFF;
   PFSEG5 = 0x07;//根据用到的引脚设定
   //段输出引脚总共由端口模式控制寄存器(0),端口模式寄存器(0),端口寄存器(0)以及上面的LCD端口功能寄存器(1)决定,
   //所以下面还需设定端口模式寄存器,端口寄存器以及端口模式控制寄存器,原因是复用了端口
   PMC1 = 0xF0;//设置端口模式控制寄存器
   PMC2 = 0x0F;
   PMC4 = 0x00;

   //相应的端口模式寄存器需要置为0,默认复位后全为1
   PM1 = 0;
   PM2 = 0;
   PM5 = 0;
   PM7 = 0;

   PU12=0x00;
   P12=0x00;
   //相应的端口寄存器复位后都为零,所以可以不用设置?
   P1=0;
   P2=0;
   P5=0;
   P7=0;
}
void R_DISPLAY_ON (void)
{

    SEG0 = 0x0f;
    SEG1 = 0x0f;
    SEG2 = 0x0f;
    SEG3 = 0x0f;
    SEG4 = 0x0f;
    SEG5 = 0x0f;

    SEG8 = 0x0f;

    SEG10 = 0x0f;

    SEG12 = 0x0f;
    SEG13 = 0x0f;
    SEG30 = 0x0f;
    SEG31 = 0x0f;
    SEG32 = 0x0f;
    SEG33 = 0x0f;
    SEG34 = 0x0f;
    SEG35 = 0x0f;
    SEG36 = 0x0f;
    SEG37 = 0x0f;
    SEG38 = 0x0f;
    SEG39 = 0x0f;
    SEG40 = 0x0f;
    SEG41 = 0x0f;

}
void R_LCD_Start(void)
{

  LCDON = 1;  
}
int main( int argc, char **argv )
{
  R_CGC_Create();
    R_PORT_Create();
  R_LCD_Create();



  R_LCD_Start();


  while(1)
  {

    R_DISPLAY_ON ();
  }
}



1628062154310_DB09F92A-9D56-420c-A81E-D952F59D271D.png (105.77 KB, 下载次数: 53)

1628062154310_DB09F92A-9D56-420c-A81E-D952F59D271D.png

作者: 名字不是重点    时间: 2021-8-4 17:31
这 个什么MCU?
作者: zyluglugl    时间: 2021-8-4 22:59
找个逻辑分析仪,看看有没有数据,时钟对不对。还有建议你发帖时,先说明你的单片机的型号,连接折方式。LCD的型号。还有代码要有注释,这样人家才能看出你哪里有问题。
还有非常重要的就是你买个开发板,开发板会带有例程的,至少,你能知道你的LCD接线对不对,LCD或MCU是不是好的。
作者: Y_G_G    时间: 2021-8-5 00:15
LCD什么驱动的?如果有驱动,先用8051写代码,能显示一个字母符号之类的就可以了,这样你就知道这个驱动要怎么去控制了
如果是LCD没驱动,那么,它是要交流驱动的,(但我并不知道直流会不会不亮,反正一直是用交流的)
如果你那是用导电条接触的测试板,去马云家买一个金属引脚的吧,随便一个简单点的,先保证硬件电路不会出问题,然后,用8051先点亮,先了解LCD是怎么工作的
然后再去用你这单片机写,你用的单片机在这很少有人用的......
作者: wwh2382    时间: 2021-8-5 08:40
提供的信息太少,mcu、lcd是什么型号?大家帮不上忙,也难受死了
作者: rayin    时间: 2021-8-5 08:51
最少要贴出来MCU对接LCD部分的原理图,LCD是单色还是彩色,接口是MIPI,LVDS,MPU8bit,16bit的? 有最基本的信息,别人才能帮你分析啊
作者: design003    时间: 2021-8-5 09:14
两周时间足够你看完器件手册了  还没解决,看你贴出来的CPU 支持的液晶是段码式的   SEG 和COM都没连对你就做蜡了
作者: fhsgjsgjsfgjsfj    时间: 2021-8-5 11:11
提出问题也是一门学问,如何能清晰的表述,是解决问题的关键
作者: pcf2000    时间: 2021-8-5 11:26
语焉不详、去头掐尾也是爱莫能助的了。。。
作者: zheng_he    时间: 2021-8-5 11:29
原理图可以贴全一点,有可能是硬件设计的问题哦
作者: 0x00000000    时间: 2021-8-5 13:08
楼主这样提问对回答者的要求太高了,回答者得猜对你的所用的芯片,然后才能根据手册查看你的初始化代码是否正确。




欢迎光临 (http://www.51hei.com/bbs/) Powered by Discuz! X3.1