本帖最后由 new world 于 2016-10-14 11:40 编辑
不知道为什么,Nokia5110就是点不亮,连背光都不亮,我都弄了两三天了,都还没解决这个问题,故而来求助大神来了
首先,是我的单片机的电路图 (MSP430F149)
下面是程序 Nokia5110的头文件
#ifndef _NOKIA_H_
#define _NOKIA_H_
#define RST_L P6OUT &= ~BIT1
#define RST_H P6OUT |= BIT1
#define CE_H P5OUT |= BIT2
#define CE_L P5OUT &= ~BIT2
#define DIN_H P5OUT |= BIT1
#define DIN_L P5OUT &= ~BIT1
#define CLK_H P6OUT |= BIT0
#define CLK_L P6OUT &= BIT0
#define DC_Data P5OUT |= BIT0
#define DC_Com P5OUT &= ~BIT0
/*
#define DC_Data P6OUT |= BIT0
#define DC_Com P6OUT &= ~BIT0
#define CLK_H P5OUT |= BIT0
#define CLK_L P5OUT &= BIT0
*/
#include "include.h"
void Nokia_Init();
void Nokia_WriteByte(uchar date,uchar com);
void Nokia_Lospot(uchar x,uchar y);
void Nokia_WriteChar(uchar x,uchar y,uchar c);
void Nokia_WriteString(uchar x,uchar y,uchar *s);
void Nokia_PortInit();
void Nokia_ClearScreen();
void Nokia_FillScreen();
#endif
下面是Nokia5110.c
//
//Nokia5110 屏幕点亮失败
//现象:屏幕不亮,不显示字符等
//
#include "nokia.h"
//Nokia初始化
void Nokia_Init()
{
RST_L;
Delay_us(1);
RST_H;
CE_L;
Delay_us(1);
CE_H;
Delay_us(1);
Nokia_WriteByte(0x21,0); //掉电模式 水平显示 H=1 使用拓展指令
Nokia_WriteByte(0xaa,0); //设置偏置电压 0xc8
Nokia_WriteByte(0x06,0); //设置温度矫正
Nokia_WriteByte(0x13,0); //设置偏置系统为 1:48
Nokia_WriteByte(0x20,0); //使用基本指令 H=0
Nokia_ClearScreen();
Nokia_WriteByte(0x0c,0);
CE_L;
}
//Nokia 写入
//date : 数据/命令
//com: 0:命令 1:数据
void Nokia_WriteByte(uchar date,uchar com)
{
uchar i;
CE_L;
CLK_H;
if(com == 1)
DC_Data;
else
DC_Com;
for(i=0;i<8;i++)
{
if(date & 0x80)
DIN_H;
else
DIN_L;
CLK_L;
date = date << 1;
//Delay_ms(1);
CLK_H;
}
CE_H;
}
//设置坐标
//x:横坐标 y:纵坐标
void Nokia_Lospot(uchar x,uchar y)
{
Nokia_WriteByte(0x40|y,0);
Nokia_WriteByte(0x80|x,0);
}
//写入字符
//x:横坐标 y:纵坐标 c:字符
void Nokia_WriteChar(uchar x,uchar y,uchar c)
{
uchar i;
c=c-32;
Nokia_Lospot(x,y);
for(i=0;i<6;i++)
Nokia_WriteByte(font6x8,1);
}
//写入字符串
//x:横坐标 y:纵坐标 *s:字符串
void Nokia_WriteString(uchar x,uchar y,uchar *s)
{
uchar i;
*s-=32;
Nokia_Lospot(x,y);
while(*s)
{
for(i=0;i<6;i++)
Nokia_WriteByte(font6x8,1);
s++;
}
}
//Nokia 端口初始化
void Nokia_PortInit()
{
P5SEL =0X00;
P5DIR =0xff;
P6SEL =0X00;
P6DIR = 0xff;
}
//清除屏幕
void Nokia_ClearScreen()
{
uint i;
Nokia_WriteByte(0x0c,0); //设置为普通显示模式
Nokia_WriteByte(0x80,0); //设置坐标x
//Nokia_WriteByte(0x40,0); //设置坐标y
for(i=0;i<503;i++)
Nokia_WriteByte(0,1);
}
void Nokia_FillScreen()
{
uint i;
Nokia_WriteByte(0x0c,0); //设置为普通显示模式
Nokia_WriteByte(0x80,0); //设置坐标x
//Nokia_WriteByte(0x40,0); //设置坐标y
for(i=0;i<503;i++)
Nokia_WriteByte(0xff,1);
}
主函数main()
// 时钟源选择
void int_clk()
{
uchar i;
BCSCTL1 &= ~XT2OFF;
BCSCTL2 |= SELM1+SELS+DIVS_3;
do
{
IFG1 &= ~OFIFG;
for(i=0;i<100;i++)
;
}
while((IFG1 & OFIFG) !=0);
IFG1&= OFIFG;
}
int main( void )
{
// Stop watchdog timer to prevent time out reset
WDTCTL = WDTPW + WDTHOLD;
int_clk(); // 时钟源选择
P4SEL =0X00;
P4DIR = 0XFF;
Nokia_PortInit();
P2OUT = ~0X01;
Nokia_Init();
P4OUT= ~0X02;
Nokia_ClearScreen();
Nokia_WriteString(3,3,"hello");
Nokia_WriteChar(4,2,'m');
P4OUT = ~0X04;
void Nokia_FillScreen();
while(1);
{
Delay_ms(100);
}
return 0;
}
希望大神能给找找原因
本帖最后由 new world 于 2016-10-14 11:40 编辑
不知道为什么,Nokia5110就是点不亮,连背光都不亮,我都弄了两三天了,都还没解决这个问题,故而来求助大神来了
首先,是我的单片机的电路图 (MSP430F149)
下面是程序 Nokia5110的头文件
#ifndef _NOKIA_H_
#define _NOKIA_H_
#define RST_L P6OUT &= ~BIT1
#define RST_H P6OUT |= BIT1
#define CE_H P5OUT |= BIT2
#define CE_L P5OUT &= ~BIT2
#define DIN_H P5OUT |= BIT1
#define DIN_L P5OUT &= ~BIT1
#define CLK_H P6OUT |= BIT0
#define CLK_L P6OUT &= BIT0
#define DC_Data P5OUT |= BIT0
#define DC_Com P5OUT &= ~BIT0
/*
#define DC_Data P6OUT |= BIT0
#define DC_Com P6OUT &= ~BIT0
#define CLK_H P5OUT |= BIT0
#define CLK_L P5OUT &= BIT0
*/
#include "include.h"
void Nokia_Init();
void Nokia_WriteByte(uchar date,uchar com);
void Nokia_Lospot(uchar x,uchar y);
void Nokia_WriteChar(uchar x,uchar y,uchar c);
void Nokia_WriteString(uchar x,uchar y,uchar *s);
void Nokia_PortInit();
void Nokia_ClearScreen();
void Nokia_FillScreen();
#endif
下面是Nokia5110.c
//
//Nokia5110 屏幕点亮失败
//现象:屏幕不亮,不显示字符等
//
#include "nokia.h"
//Nokia初始化
void Nokia_Init()
{
RST_L;
Delay_us(1);
RST_H;
CE_L;
Delay_us(1);
CE_H;
Delay_us(1);
Nokia_WriteByte(0x21,0); //掉电模式 水平显示 H=1 使用拓展指令
Nokia_WriteByte(0xaa,0); //设置偏置电压 0xc8
Nokia_WriteByte(0x06,0); //设置温度矫正
Nokia_WriteByte(0x13,0); //设置偏置系统为 1:48
Nokia_WriteByte(0x20,0); //使用基本指令 H=0
Nokia_ClearScreen();
Nokia_WriteByte(0x0c,0);
CE_L;
}
//Nokia 写入
//date : 数据/命令
//com: 0:命令 1:数据
void Nokia_WriteByte(uchar date,uchar com)
{
uchar i;
CE_L;
CLK_H;
if(com == 1)
DC_Data;
else
DC_Com;
for(i=0;i<8;i++)
{
if(date & 0x80)
DIN_H;
else
DIN_L;
CLK_L;
date = date << 1;
//Delay_ms(1);
CLK_H;
}
CE_H;
}
//设置坐标
//x:横坐标 y:纵坐标
void Nokia_Lospot(uchar x,uchar y)
{
Nokia_WriteByte(0x40|y,0);
Nokia_WriteByte(0x80|x,0);
}
//写入字符
//x:横坐标 y:纵坐标 c:字符
void Nokia_WriteChar(uchar x,uchar y,uchar c)
{
uchar i;
c=c-32;
Nokia_Lospot(x,y);
for(i=0;i<6;i++)
Nokia_WriteByte(font6x8,1);
}
//写入字符串
//x:横坐标 y:纵坐标 *s:字符串
void Nokia_WriteString(uchar x,uchar y,uchar *s)
{
uchar i;
*s-=32;
Nokia_Lospot(x,y);
while(*s)
{
for(i=0;i<6;i++)
Nokia_WriteByte(font6x8,1);
s++;
}
}
//Nokia 端口初始化
void Nokia_PortInit()
{
P5SEL =0X00;
P5DIR =0xff;
P6SEL =0X00;
P6DIR = 0xff;
}
//清除屏幕
void Nokia_ClearScreen()
{
uint i;
Nokia_WriteByte(0x0c,0); //设置为普通显示模式
Nokia_WriteByte(0x80,0); //设置坐标x
//Nokia_WriteByte(0x40,0); //设置坐标y
for(i=0;i<503;i++)
Nokia_WriteByte(0,1);
}
void Nokia_FillScreen()
{
uint i;
Nokia_WriteByte(0x0c,0); //设置为普通显示模式
Nokia_WriteByte(0x80,0); //设置坐标x
//Nokia_WriteByte(0x40,0); //设置坐标y
for(i=0;i<503;i++)
Nokia_WriteByte(0xff,1);
}
主函数main()
// 时钟源选择
void int_clk()
{
uchar i;
BCSCTL1 &= ~XT2OFF;
BCSCTL2 |= SELM1+SELS+DIVS_3;
do
{
IFG1 &= ~OFIFG;
for(i=0;i<100;i++)
;
}
while((IFG1 & OFIFG) !=0);
IFG1&= OFIFG;
}
int main( void )
{
// Stop watchdog timer to prevent time out reset
WDTCTL = WDTPW + WDTHOLD;
int_clk(); // 时钟源选择
P4SEL =0X00;
P4DIR = 0XFF;
Nokia_PortInit();
P2OUT = ~0X01;
Nokia_Init();
P4OUT= ~0X02;
Nokia_ClearScreen();
Nokia_WriteString(3,3,"hello");
Nokia_WriteChar(4,2,'m');
P4OUT = ~0X04;
void Nokia_FillScreen();
while(1);
{
Delay_ms(100);
}
return 0;
}
希望大神能给找找原因