本帖最后由 langgao183 于 2013-3-28 23:18 编辑
#include <pic.h>
#define uchar unsigned char
#define uint unsigned int
__CONFIG(0x3B31);
void delay2()//70u秒
{
uchar f;
for(f=6;f--;f>0)
;
}
void delay3()//1.6毫秒
{
uchar i,j;
for(i=5;i--;i>0)
for(j=40;j--;j>0)
;
}
void LCD_com(uchar a)
{
uchar b,c;
b=a;
b&=0xf0;//把传过来的数进行变换
a<<=4;
SSPIF=0;
SEN=1;//使能I²C
while(SSPIF==0)//发送命令0xf8
;
SSPBUF=0XF0;
SSPIF=0;
while(SSPIF==0)
;
SSPBUF=0X80;
SSPIF=0;
while(SSPIF==0)//发送高四位字节命令
;
SSPBUF=b;
SSPIF=0;
while(SSPIF==0)//发送低四位字节命令
;
SSPBUF=a;
SSPIF=0;
while(SSPIF==0)
;
SSPIF=0;
ACKSTAT=1;//发送停止应答
while(SSPIF==0)
;
SSPIF=0;
PEN=0;//关闭通信
while(SSPIF==0)
;
SSPIF=0;
}
void init()
{
GIE=0;//关闭中断,因为只用到SSPIF来检测
TRISE=0;//我的片选接的是RE2口
RE2=1;
TRISC=0xff;//设置I²C的端口为输入
SSPSTAT=0x80;
SSPCON=0x38;
SSPCON2=0;
SSPADD=0x09;//波特率为100K
}
void LCD_init()//12232初始化
{
delay3();
LCD_com(0x30);//8位数据口,精简指令
delay2();
LCD_com(0x02);//清DDRAM
delay2();
LCD_com(0x06);//游标及显示右移一位
delay2();
LCD_com(0x0c);//显示开,游标关,反白关
delay2();
LCD_com(0x01);//这个是请屏幕0x01
delay3(); /
LCD_com(0x80);//设置首次显示位置
delay2();
}
void main()
{
delay3();//延时1.6毫秒
init();//I²C初始化
delay3();//延时1.6毫秒
LCD_init();//12232初始化
}
各位大侠,程序下载下去后LCD的整个屏幕依然是黑点,到底哪里不妥的?帮我纠正纠正,谢谢!!还有我是直接用硬件I²C模块的
|