#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下没用
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
一周热门 更多>