这是我写的12864的C文件。这个文件在51上执行没有任何问题。真心不明白啊
#include "msp430x54x.h"
#include <stdlib.h>
#include <stdio.h>
#include "PIN_DEF.H"
#include "12864.h"
#define unchar unsigned char
#define unint unsigned int
//12864初始化 控制端口置为输出
void _12864_init()
{
P3DIR|=BIT7;
P3OUT|=BIT7;
P1DIR|=BIT2;
P1OUT&=~BIT2;
RW_OUT_MOD;
E_OUT_MOD;
RS_OUT_MOD;
}
//检测忙信号
unchar busy()
{
unchar result;
unchar record;
data_in_mod;
RS_OUT_MOD;
RW_OUT_MOD;
E_OUT_MOD;
RW_H;
RS_L;
E_H;
__delay_cycles(100);
record=P4IN;
result=(unchar)(record&0x80);
E_L;
return(result);
}
//写指令
void write(unchar cmd)
{
while(busy());
RS_OUT_MOD;
RW_OUT_MOD;
E_OUT_MOD;
RS_L;
RW_L;
E_L;
__delay_cycles(100);
data_out_mod;
P4OUT=cmd;
__delay_cycles(100);
E_H;
__delay_cycles(100);
E_L;
}
//写数据
void write_data(unchar data)
{
RS_OUT_MOD;
RW_OUT_MOD;
E_OUT_MOD;
RS_H;
RW_L;
E_L;
__delay_cycles(100);
data_out_mod;
P4OUT=data;
__delay_cycles(100);
E_H;
__delay_cycles(100);
E_L;
}
//读数据
unchar read_data()
{
RS_OUT_MOD;
RW_OUT_MOD;
E_OUT_MOD;
unchar data;
while(busy());
data_in_mod;
RS_H;
RW_L;
__delay_cycles(100);
data=P4IN;
E_L;
return(data);
}
//确定基本参数如基本动作还是高级动作
void LCD_init()
{
write(0x30);
__delay_cycles(100);
write(0x0c);
__delay_cycles(100);
write(0x01);
__delay_cycles(100);
}
//基本动作显示字符的显示位子
void lcd_pos(unchar X,unchar Y)
{
unchar pos;
if(X==0)
{X=0x80;}
else if(X==1)
{X=0x90;}
else if(X==2)
{X=0x88;}
else if(X==3)
{X=0x98;}
pos=X+Y;
write(pos);
}
//清屏
void LCD_clear()
{
unchar hang,lie;
write(0x34);//开扩充指令集
for(hang=0;hang<32;hang++)
{
write(0x80+hang);//先写Y坐标
write(0x80);//写X坐标
for(lie=0;lie<16;lie++)
{
write_data(0X00);
}
}
for(hang=0;hang<32;hang++)
{
write(0x80+hang);//先写Y坐标
write(0x88);//写X坐标
//X范围0~7
for(lie=0;lie<16;lie++)
{
write_data(0X00);
}
}
write(0x36);
write(0x30);
}
|