5321|5

68

帖子

0

TA的资源

一粒金砂(初级)

楼主
 

求救:T6963c的显示一直有一条横线向下刷 [复制链接]

T6963c的显示一直有横线不停的从上向下刷,我在左上角显示的一个字符。只有当那条线刷到最上边时,看一下就没了,不过那个字符是msp430送到LCM的那个。
有没有高人指点一下,是那里出的问题?

最新回复

ding yi xia  详情 回复 发表于 2006-11-21 21:32
 
点赞 关注

回复
举报

68

帖子

0

TA的资源

一粒金砂(初级)

沙发
 
最好把程序贴出来,注明你认为是哪部分有问题,大家帮助排除一下。
 
 

回复

70

帖子

0

TA的资源

一粒金砂(初级)

板凳
 
我把程序贴出来,大家帮忙看看

这里是t6963c的头文件t6963c.h

#ifndef T6993C
#define T6993C
/*t6963c.h文件地内容放在这里*/


#define STA0 0x01
#define STA1 0x02
#define STA01 0x03
#define STA2 0x04
#define STA3 0x08
#define STA4 0x10
#define STA5 0x20
#define STA6 0x40
#define STA7 0x80


#define LCM2MSP1 P4OUT |= BIT2; //4245(x1)数据传送方向选择为:由液晶到430
#define LCM2MSP2 P4OUT |= BIT1; //4245(x2)数据传送方向选择为:由液晶到430
#define MSP2LCM1 P4OUT &= ~BIT2; //4245(x1)数据传送方向选择为:由430到液晶
#define MSP2LCM2 P4OUT &= ~BIT1; //4245(x2)数据传送方向选择为:由430到液晶

#define SET_CMD P4OUT |= BIT4; //命令方式
#define SET_DAT P4OUT &= ~BIT4; //数据方式

#define SET_WR P4OUT &= ~BIT5; //
#define CANCEL_WR P4OUT |= BIT5; //

#define SET_RD P4OUT &= ~BIT6;
#define CANCEL_RD P4OUT |= BIT6;

#define RST P4OUT &= ~BIT3; delay(1000); P4OUT |= BIT3;


//-------------------------------------
extern void read_sta(void);
extern void ST01( void );
extern void ST2( void );
extern void ST3( void );
extern void ST6( void );
extern void write_data(unsigned char data);
extern void write_cmd(unsigned char cmd );
extern void write_onepara(unsigned char dat1,unsigned char cmd );
extern void write_dou××epara(unsigned char dat1,unsigned char dat2,unsigned char cmd );
extern int read_data(void);
extern void CLEAR_RAM( void );
extern void LcdInit( void );
extern void display_onechar(int x, int y, unsigned char code);
extern void delay(long v);
#endif
 
 
 

回复

73

帖子

0

TA的资源

一粒金砂(初级)

4
 
t6963c.c
-----------------------------------------------
#include <msp430x14x.h>
#include "t6963c.h"

static char STA=0;

/*************************************
读液晶状态字到STA
功能:用于往液晶写数据或命令之前判断忙闲
*************************************/
void read_sta(void)
{
STA = 0;
P5DIR = 0x00; //P5数据输入
P5OUT = 0xff;
LCM2MSP2 //4245(x2)数据传送方向选择为:由液晶到430
SET_CMD //命令方式
SET_RD //read
//delay(1);
STA = P5IN; //读回状态
//delay(1);
CANCEL_RD //cancel read
P5DIR = 0xff; //P5口置为数据输出方式
MSP2LCM2 //4245(x2)数据传送方向选择为:由430到液晶
}

/******************************************
判状态位S1,S0 函数(读写指令和读写数据状态)
******************************************/
void ST01( void )
{
do
{
read_sta();
}
while( (STA &= STA01) != 0x03 );

}

/*****************************************
判状态位S2函数(数据自动读状态)
*****************************************/
void ST2( void )
{
do
{
read_sta();
}
while( (STA &= STA2) != STA2);
}

/*****************************************
判状态位S3函数(数据自动写状态)
******************************************/
void ST3( void )
{
do
{
read_sta();
}
while( (STA & STA3) != STA3 );
}

/***************************************
判状态位S6函数(屏读/拷贝状态)
***************************************/
void ST6( void )
{
// do
// {
// read_sta();
// }
// while( (STA & 0x08) != 0x08 );
}

/*************************************
写入数据字节
***************************************/
void write_data(unsigned char data)
{
ST01(); //检测确定LCM状态
P5DIR = 0xff; //数据输出
P5OUT = data;
MSP2LCM2
SET_DAT //数据方式
//delay(1);
SET_WR // write
//delay(1);
CANCEL_WR
//LCM2MSP2
}

/************************************
写入命令字
*************************************/
void write_cmd(unsigned char cmd )
{
ST01(); //检测确定LCM状态
P5DIR = 0xff; //数据输出
P5OUT = cmd;
MSP2LCM2
//delay(1);
SET_CMD //命令方式
// delay(1);
SET_WR // write
CANCEL_WR
//MSP2LCM2
}
/************************************
写只有一个参数的命令
************************************/
void write_onepara(unsigned char dat1,unsigned char cmd )
{

write_data( dat1 );
write_cmd( cmd );

}
/************************************
写含有双参数的命令
************************************/
void write_dou××epara(unsigned char dat1,unsigned char dat2,unsigned char cmd )
{

write_data( dat1 );
write_data( dat2 );
write_cmd( cmd );

}

/***********************************
从LCM中读一个数据
***********************************/
int read_data(void)
{
int temp;
ST01();
P5DIR = 0x00; //P5数据输入
LCM2MSP2 //4245(x1)数据传送方向选择为:由液晶到430
SET_DAT //数据方式
SET_RD //read
temp = P5IN; //读回状态
CANCEL_RD //cancel read
P5DIR = 0xff; //P5口置为数据输出方式
MSP2LCM2 //4245(x1)数据传送方向选择为:由430到液晶
return temp;
}

/***********************************
清显示缓冲的函数
***********************************/
void CLEAR_RAM( void )
{
int i;
write_dou××epara( 0x00,0x00,0x24 ); /* 设置显示RAM 首地址 */

write_cmd( 0xb0 ); /* 设置自动写方式 */
for(i=0;i<8192;i++) /* 清8K存储器 */
{
ST3(); /* 判状态位STA3 */
write_data(0x00); /* 写入数据 */
}
write_cmd( 0xb2 ); /* 设置自动写结束指令 */

}

/***********************************
对液晶屏的一些初始设置函数
***********************************/
void LcdInit( void )
{
P4SEL=0x00; //P4设为一般I/O
P4DIR=0xFF; //P4设为输出
P4OUT=0xF8; //初始化 WR=1;RD=1;C/D=1(即才C 命令方式)
//OE=0(4545使能) 地人DIR1=DIR2=0(从430到LCM)

P5SEL=0x00;
P5DIR=0xFF;
P5OUT=0x00;

MSP2LCM1 // 4245#1 从430到LCM
MSP2LCM2 //D0-D7 到LCM
SET_CMD
CANCEL_WR //WR=1;
CANCEL_RD //RD=1
RST
write_dou××epara(0x00,0x00,0x40); /*设文本显示区域首地址为 0*/
write_dou××epara(0x20,0x00,0x41); /*设文本显示区域宽度为 32个字符*/
write_dou××epara(0x03,0x00,0x22); /* 设置CGRAM偏置地址 */

write_dou××epara(0x00,0x08,0x42); /*设图形显示区(文本属性)域首地址为 0x800*/
write_dou××epara(0x20,0x00,0x43); /*设图形显示区域(文本属性)宽度为 32 */
//write_cmd(0xa2); /*光标形状设置*/
//write_dou××epara(0x00,0x00,0x21); /* 设置光标 位置*/
write_cmd(0x84); /*显示方式设置逻辑"或"合成, 内部字符发生器有效*/
write_cmd(0x94); /*显示开关设置 开文本和关图形显示*/
CLEAR_RAM();
write_dou××epara(0x03,0x00,0x24);
}

/*********************************×
显示一个英文字符(文本属性显示方式)
***********************************/
void display_onechar(int x, int y, unsigned char code)
{
unsigned int addr;
addr = y*32+x; //locate ram地址
write_dou××epara((unsigned char)addr,(unsigned char)(addr/256),0x24); //设置显示存储器地址
write_onepara(code,0xc4);
write_dou××epara((unsigned char)addr,0x08,0x24); //设置显示存储器地址
write_onepara(0,0xc4); //装入字符代码,写入数据,地址不变
}
 
 
 

回复

80

帖子

0

TA的资源

一粒金砂(初级)

5
 
主程序main.c
---------------------------------
#include <msp430x14x.h>
#include "t6963c.h"

/********************************************************************
* 延时程序 *
*v=1延时约为1ms
*********************************************************************/
void delay(long v)
{
while(v!=0)v--;
}

/********************************************************************
* 启动高速晶振
*功能:
*原型:void run_xt2(void)
*说明:8m
**********************************************************************/
void run_xt2(void)
{
unsigned char i;
BCSCTL1 &= ~XT2OFF; // XT2on(6M晶振)
do
{
IFG1 &= ~OFIFG; // Clear OSCFault flag
for (i = 0xFF; i > 0; i--); // Time for flag to set
}
while ((IFG1 & OFIFG) != 0); // OSCFault flag still set?
// BCSCTL2 |= SELM1+SELS; // MCLK = SMCLK = XT2 (safe)

BCSCTL2 |= SELM_2+DIVA_0; // MCLK= XT2 (safe)
}
/*********************************************************************
* timerA初始化函数
*功能:初始化定时器间隔50毫秒
* : ccr0=20ms
*原型:void TimerA_init(unsigned int value);
*入口:定时间隔值
********************************************************************/
void timerA_init(void)
{
TACTL = TASSEL1 + TACLR+ID_3; // SELECT MCLK, clear TAR 8分频
CCTL0 = CCIE; // CCR0 interrupt ena××ed
CCR0 = 20000; //中断时间为20ms(TBCCR0/XT2)
TACTL|= MC0; // Start Timer_A in continuous mode
}
/********************************************************************
* 初始化端口数据
*功能:
*原型:void port_init(void)
*说明:8m
**********************************************************************/
void port_init(void)
{

P4SEL=0x00; //P4设为一般I/O
P4DIR=0xFF; //P4设为输出
P4OUT=0xF8; //初始化 WR=1;RD=1;C/D=1(即才C 命令方式)
//OE=0(4545使能) 地人DIR1=DIR2=0(从430到LCM)

P5SEL=0x00;
P5DIR=0xFF;
P5OUT=0x00;
}
void init()
{
//int i;
WDTCTL=WDTPW+WDTHOLD;//关狗
port_init();
run_xt2();
//for(i=0;i<0x3600;i++);
timerA_init();

LcdInit();
// _EINT();
}


int main( void )
{
//int i;
init();

for(i=0;i<10000;i++)
{display_onechar(0, 0, 0x31);}

return 0;

}
 
 
 

回复

71

帖子

0

TA的资源

一粒金砂(初级)

6
 
ding yi xia
 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/9 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表