求高手 指导 12864 移植到pic

2020-02-09 09:19发布

#include <p18f4580.h>
#define uchar unsigned char
#define uint  unsigned int
#pragma config OSC = HS
#pragma config WDT = OFF
#pragma config LVP = OFF
#pragma config DEBUG = ON

#define LCD_E   PORTCbits.RC0//引脚连接 rst已接电源5v
#define LCD_RW  PORTCbits.RC1
#define LCD_RS  PORTCbits.RC2
#define LCD_PSB PORTCbits.RC5
//void Delay(int num);
void LCD_WriteDatOrCom(uchar dat_comm,uchar content);
void delayus(uchar a);
void LCD_init(void);
void LCD_WriteString(uchar *str);
                       
/****************************************************************************/
//初始化LCD
void LCD_init(void)         
{       TRISCbits.TRISC0=0;
        TRISCbits.TRISC1=0;
        TRISCbits.TRISC2=0;
        TRISCbits.TRISC5=0;
       
          LCD_PSB=0;//串并方式选择
          //LCD_RS=0;
          LCD_WriteDatOrCom (0,0x30);  //30---基本指令动作  
           LCD_WriteDatOrCom (0,0x01);  //清屏,地址指针指向00H
          delayus(100);
           LCD_WriteDatOrCom (0,0x06);  //光标的移动方向
           LCD_WriteDatOrCom(0,0x0c);  //开显示,关游标


}

/*********写指令或数据(0,指令)(1,数据)**********/
void LCD_WriteDatOrCom(uchar dat_comm,uchar content)
{
  uchar a,i,j;
  delayus(100);
  //a=content;
  LCD_RS=1;
  LCD_E=0;
  LCD_RW=1;
  for(i=0;i<5;i++)
  {
    LCD_E=1;
    LCD_E=0;
  }
  LCD_RW=0;
  LCD_E=1;
  LCD_E=0;
  if(dat_comm)
    LCD_RW=1;   //data
  else
   LCD_RW=0;   //command
  LCD_E=1;
  LCD_E=0;
  LCD_RW=0;
  LCD_E=1;
  LCD_E=0;
  for(j=0;j<2;j++)
  {
    for(i=0;i<4;i++)
    {
            
      a=content&0x80;
      if(a==0)
                          LCD_RW=0;
                       else
                         LCD_RW=1;
      LCD_E=1;
      LCD_E=0;
      content=content<<1;
    }
    LCD_RW=0;
    for(i=0;i<4;i++)
    {
      LCD_E=1;
      LCD_E=0;
    }
  }
}

/*********************************************************************************/
//全屏显示函数
/*
void chn_disp (uchar code *chn)
{
        uchar i,j;
          LCD_WriteDatOrCom  (0,0x30);
          LCD_WriteDatOrCom  (0,0x80);
          for (j=0;j<4;j++)
          {
                    for (i=0;i<16;i++)
                    LCD_WriteDatOrCom  (1,chn[j*16+i]);
          }
}
*/
/*********************************************************************************/
//清屏函数
void LCD_clr(void)
{
        LCD_WriteDatOrCom (0,0x30);
          LCD_WriteDatOrCom (0,0x01);
          delayus(100);

}
/*****************************************************************************/
//向LCD发送一个字符串,长度64字符之内。
//应用:LCD_WriteString("您好!");
void LCD_WriteString(uchar *str)
{
        while(*str != '')
        {
                LCD_WriteDatOrCom(1,*str++);
        }
                *str = 0;
}
/******************************************************************************/
//延时函数


void delayus(uchar a)
{
   uchar i;
   for(i=a;i>0;i--)
        {
                _asm
        NOP
        _endasm
        }
}

void main()
{while(1){
         LCD_init();//初始化液晶显示器
         delayus(100);
        LCD_clr();//清屏
        delayus(100);
         LCD_WriteDatOrCom(0,0x80);                                                                                                                                               
        //LCD_WriteString("1234");
        LCD_WriteDatOrCom(1,0xc7);
       
}
}

c18 编译器 移植的51 上的(在51 上测试有用)  12864 是st7920 控制器 ,在pic下没用
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。