打印

PIC16F877的I²C与金鹏LCD12232问题

[复制链接]
1490|2
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
langgao183|  楼主 | 2013-3-28 23:05 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 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模块的

沙发
yewuyi| | 2013-3-29 09:44 | 只看该作者
此类问题请联系LCD模块厂家索取DEMO程序,你自己按照那个移植一个代码即可,不会有高手闲的没事帮你一行行看代码的。

使用特权

评论回复
板凳
langgao183|  楼主 | 2013-3-29 14:05 | 只看该作者
yewuyi 发表于 2013-3-29 09:44
此类问题请联系LCD模块厂家索取DEMO程序,你自己按照那个移植一个代码即可,不会有高手闲的没事帮你一行行 ...

多谢版主

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

23

主题

112

帖子

1

粉丝