搜索
bottom↓
回复: 3

MSP430无法驱动OCMJ15X20D

[复制链接]

出0入0汤圆

发表于 2013-3-17 15:16:49 | 显示全部楼层 |阅读模式
直接移植的公司给的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_regname  P1
#define lcd_regdata  P1
#define lcd_regnada  P1
#define lcd_data     P1
#define lcd_control  P3
#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[4];
uchar taby[4];

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[i],inittab2[i]);
  }
}
//.............................................
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_regname  P7OUT
#define lcd_regdata  P7OUT
#define lcd_regnada  P7OUT
#define lcd_data     P7OUT
#define lcd_data_in  P7IN
#define lcd_control  P2OUT
#define uchar        unsigned char
#define uint         unsigned int
//=============================================
uchar  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  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  tab1[]={
"     金鹏电子有限公司D系列液晶模块     "
"             触摸屏演示程序             "
"               No-Touch!!               "
"                 X=                     "
"                 Y=                     "};

uchar tabx[4];
uchar taby[4];

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[i],inittab2[i]);
  }
}
//.............................................
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的是一样的,但是始终无法显示。请教各位啊

阿莫论坛20周年了!感谢大家的支持与爱护!!

如果想吃一顿饺子,就得从冰箱里取出肉,剁馅儿,倒面粉、揉面、醒面,擀成皮儿,下锅……
一整个繁琐流程,就是为了出锅时那一嘴滚烫流油的热饺子。

如果这个过程,禁不住饿,零食下肚了,饺子出锅时也就不香了……《非诚勿扰3》

出0入0汤圆

发表于 2013-3-18 08:33:49 | 显示全部楼层
lcd_cs1 =0; 能编译通过?
430不能直接位操作吧

出0入0汤圆

 楼主| 发表于 2013-3-18 09:45:41 | 显示全部楼层
dalarang 发表于 2013-3-18 08:33
lcd_cs1 =0; 能编译通过?
430不能直接位操作吧

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

出0入0汤圆

发表于 2014-3-10 01:12:32 | 显示全部楼层
标记!mark
!!
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-3-28 19:29

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表