标题:
有大哥能帮我看看为啥液晶点不亮吗?两周了,难受死我了
[打印本页]
作者:
智能羊羊
时间:
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)
下载附件
2021-8-4 15:29 上传
作者:
名字不是重点
时间:
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