洛川子 发表于 2013-3-17 15:16:49

MSP430无法驱动OCMJ15X20D

直接移植的公司给的51程序代码,但是无法显示,公司说是可以去掉读的函数,直接写入就好,就现在51上测试成功,可以显示然后直接粘贴到430上,对延时和串口进行修改,但是一直是没有结果。。
请教各位啊

51程序,可以正常显示
PS:删除了读,这个算是最简单的显示程序了吧!
//=============================================
#include <reg52.h>
//=============================================
sbit lcd_rs   =P3^0;                //L:´æÈ¡»º´æÆ÷,H:´æÈ¡DDRAM
sbit lcd_wr   =P3^1;                //LÓÐЧ
sbit lcd_rd   =P3^2;                //LÓÐЧ
sbit lcd_cs1=P3^3;                //LÓÐЧ
//sbit lcd_cs2=P3^5;                //HÓÐЧ(¿ÉÖ±½ÓÉÏÀ­)
sbit lcd_busy =P3^5;
sbit lcd_int=P3^6;                //½ÓMCUµÄINT0
//sbit lcd_rst=P3^7;                //LÓÐЧ(¿ÉÐü¿Õ)

#define lcd_regnameP1
#define lcd_regdataP1
#define lcd_regnadaP1
#define lcd_data   P1
#define lcd_controlP3
#define uchar      unsigned char
#define uint         unsigned int

uchar code inittab1[]={
0x00,0x01,0x02,0x03,0x10,0x11,0x12,0x21,0x31,0x41,0x51,0x20,0x30,0x40,0x50,0x60,
0x61,0x70,0x71,0x72,0x80,0x81,0x91,0x90,0xA0,0xA1,0xA2,0xA3,0xB0,0xB1,0xC0,0xC1,
0xC8,0xC9,0xCA,0xD0,0xE0,0xF0,0xF1};
uchar code inittab2[]={
0xC9,0xE2,0x10,0x80,0x2B,0x00,0x91,0x27,0xEF,0x00,0x00,0x27,0xEF,0x00,0x00,0x00,
0x00,0x00,0x00,0xEF,0xAA,0x00,0x00,0x06,0x11,0x00,0x00,0x00,0x27,0xEF,0x00,0x36,
0x80,0x80,0x00,0x80,0x00,0xA0,0x1F};

uchar code tab1[]={
"   Õâ ÊÇ Ò» ¸ö ³Ì Ðò               "
"      hdfahfashdflajfhalsjfh      "
"          No-Touch!!   "
"               X=       "
"               Y=       "};

uchar code tab2[]="No-Touch!!";

uchar code tab3[]="Touch-Now!";

uchar tabx;
uchar taby;

void delay_nop (int k)
{
int i;
for(i=0;i<k;i++);
}
void delay1ms (int ms)
{
int i,j;
for(i=0;i<ms;i++)
    for(j=0;j<123;j++);
}
//=============================================
void lcd_regwr(uchar regnada) small
{
lcd_regnada = regnada;
lcd_cs1 =0; // chip enable.
lcd_rd = 1; //
lcd_rs = 0; // rs = 0;
lcd_wr = 0; // wr = 0;
delay_nop(10);
lcd_wr = 1; // wr = 1;
lcd_rs = 1; // rs = 1;
lcd_cs1 =1; // chip disable.
}
void lcd_datawrite(uchar wrdata) small
{                      //????DDRAM
//while(lcd_busy == 0);
delay_nop(10);
lcd_data = wrdata;
lcd_cs1 =0; // chip enable.
lcd_rd = 1; //
lcd_rs = 1; // rs = 1;
lcd_wr = 0; // wr = 0;
delay_nop(10);
lcd_wr = 1; // wr = 1;
lcd_rs = 1; // rs = 1;
lcd_cs1 =1; // chip disable.
}
void lcd_regwrite(uchar regname,uchar regdata) small
{                                 //д×ÊÁϵ½»º´æÆ÷
lcd_regwr(regname);
delay_nop(1);
lcd_regwr(regdata);
}
//.............................................

//=============================================
void lcd_reset(void) small
{               //????
delay1ms(240); // delay 240ms ??????
lcd_control = 0xff; // lcd_rs/wr/rd/cs1/cs2 normal - skeep high.
}
//.............................................
void lcd_initial(void) small
{                   //???
uchar i;
for(i=0;i<39;i++)
{
    lcd_regwrite(inittab1,inittab2);
}
}
//.............................................
void lcd_clear(void) small
{                   //??
uchar reg_rddata;
lcd_regwrite(0xe0,0x00);
//reg_rddata = lcd_regread(0xf0);
reg_rddata |= 0x08;
lcd_regwrite(0xf0,reg_rddata);
}
//.............................................
void lcd_character(uchar code *cha,uint count) small
{                                 //???????
uint i;
for(i=0;i<count;i++)
{
    lcd_datawrite(*cha);
    ++cha;
}
}
//.............................................
void gotoxy(uchar x,uchar y) small
{                         //???
lcd_regwrite(0x60,x); // active window top register(awtr)
lcd_regwrite(0x70,y); // active window top register(awtr)
}
//=============================================
void main (void)
{
//uchar reg_rddata;

lcd_reset();
lcd_initial();
lcd_clear();

lcd_regwrite(0x00,0xcd);
gotoxy(0x00,0x00);
lcd_character(tab1,180);

while(1);       
}
下面是430程序。。和51程序一样只是增加了精确的延时和修改了端口,可以和51程序进行对比
//=============================================
#include <msp430f2618.h>
#include <stdio.h>
#include "UART.h"
//=============================================
#define PORTF P2OUT
#define lcdcs1_H   PORTF|=BIT3   
#define lcdcs1_L   PORTF&= ~BIT3   
#define lcden_H      PORTF|=BIT2
#define lcden_L      PORTF&= ~BIT2
#define lcdrw_H      PORTF|=BIT1
#define lcdrw_L      PORTF&= ~BIT1
#define lcdrs_H      PORTF|=BIT0
#define lcdrs_L      PORTF&= ~BIT0
#define lcd_busy      P2IN&BIT5

#define lcd_regnameP7OUT
#define lcd_regdataP7OUT
#define lcd_regnadaP7OUT
#define lcd_data   P7OUT
#define lcd_data_inP7IN
#define lcd_controlP2OUT
#define uchar      unsigned char
#define uint         unsigned int
//=============================================
ucharinittab1[]={
0x00,0x01,0x02,0x03,0x10,0x11,0x12,0x21,0x31,0x41,0x51,0x20,0x30,0x40,0x50,0x60,
0x61,0x70,0x71,0x72,0x80,0x81,0x91,0x90,0xA0,0xA1,0xA2,0xA3,0xB0,0xB1,0xC0,0xC1,
0xC8,0xC9,0xCA,0xD0,0xE0,0xF0,0xF1};
ucharinittab2[]={
0xC9,0xE2,0x10,0x80,0x2B,0x00,0x91,0x27,0xEF,0x00,0x00,0x27,0xEF,0x00,0x00,0x00,
0x00,0x00,0x00,0xEF,0xAA,0x00,0x00,0x06,0x11,0x00,0x00,0x00,0x27,0xEF,0x00,0x36,
0x80,0x80,0x00,0x80,0x00,0xA0,0x1F};

uchartab1[]={
"   金鹏电子有限公司D系列液晶模块   "
"             触摸屏演示程序             "
"               No-Touch!!               "
"               X=                     "
"               Y=                     "};

uchar tabx;
uchar taby;

void lcd_regwr(uchar regnada) //small
{
lcd_regnada = regnada;//Delay_Us(1);
lcdcs1_L; // chip enable.
lcden_H; //
lcdrs_L; // rs = 0;
lcdrw_L; // wr = 0;//xiugaiguo
Delay_Us(3);
lcdrw_H; // wr = 1;//xiugaiguo
lcdrs_H; // rs = 1;
lcdcs1_H; // chip disable.
}
//.............................................
void lcd_datawrite(uchar wrdata) //small
{                      //写资料到DDRAM
while(lcd_busy == 0);
//Delay_Ms(1);
lcd_data = wrdata;//Delay_Us(1);
lcdcs1_L; // chip enable.
lcden_H; //
lcdrs_H; // rs = 1;
lcdrw_L; // wr = 0;
Delay_Us(3);
lcdrw_H; // wr = 1;
lcdrs_H; // rs = 1;
lcdcs1_H; // chip disable.
}
void lcd_regwrite(uchar regname,uchar regdata) //small
{                                 //写资料到缓存器
lcd_regwr(regname);
Delay_Ms(1);
lcd_regwr(regdata);
}

//.............................................
//=============================================
void lcd_reset(void) //small
{               //上电复位
Delay_Ms(240); // delay 240ms 等待上电复位
lcd_control = 0xff; // lcd_rs/wr/rd/cs1/cs2 normal - skeep high.
}
//.............................................
void lcd_initial(void) //small
{                   //初始化
uchar i;
for(i=0;i<39;i++)
{
    lcd_regwrite(inittab1,inittab2);
}
}
//.............................................
void lcd_clear(void) //small
{                   //清屏
uchar reg_rddata;
lcd_regwrite(0xe0,0x00);
//reg_rddata = lcd_regread(0xf0);
reg_rddata = 0x08;
lcd_regwrite(0xf0,reg_rddata);
}
//.............................................
void lcd_character(uchar*cha,uint count) //small
{                                 //显示中文或字符
uint i;
for(i=0;i<count;i++)
{
    lcd_datawrite(*cha);
    ++cha;
}
}
//.............................................
void gotoxy(uchar x,uchar y) //small
{                         //定坐标
lcd_regwrite(0x60,x); // active window top register(awtr)
lcd_regwrite(0x70,y); // active window top register(awtr)
}
//=============================================

void port_init(void) //写资料到缓存器   
{      
    P2DIR |= BIT0 + BIT1 + BIT2 + BIT3;
    P2DIR &= ~BIT5;
    P7DIR |= 0xff;
}   

void main (void)
{
WDTCTL = WDTPW + WDTHOLD;

Clock2_Init();
Timer_Init();

port_init();

lcd_reset();
lcd_initial();
lcd_clear();

lcd_regwrite(0x00,0xcd);
gotoxy(0x00,0x00);
lcd_character(tab1,180);

while(1);
}

这程序我感觉很简单了,基本上和51的是一样的,但是始终无法显示。请教各位啊

dalarang 发表于 2013-3-18 08:33:49

lcd_cs1 =0; 能编译通过?
430不能直接位操作吧

洛川子 发表于 2013-3-18 09:45:41

dalarang 发表于 2013-3-18 08:33 static/image/common/back.gif
lcd_cs1 =0; 能编译通过?
430不能直接位操作吧

亲,前面的哪个是51的代码哦。430的代码在后面类

jcsasm 发表于 2014-3-10 01:12:32

标记!mark
!!
页: [1]
查看完整版本: MSP430无法驱动OCMJ15X20D