#include<pic.h>
__CONFIG(0X1832);
//芯片配置字,看门狗关,上电延时开,掉电检测关,低压编程关,加密,4M晶体HS振荡
#define rs RA1
#define rw RA2
#define e
RA3
void init();//申明I/O口初始化函数
void lcd_init();//申明lcd初始化函数
void write(char x);//申明显示1个字节数据函数
void lcd_enable();//申明lcd显示设置函数
void delay(int x);//申明延时函数
void LCD_set_xy(unsigned char x,unsigned char y);
void write_CGRAM();
void write1();
unsigned char table[]= {0x03,0x04,0x08,0x10,0x10,0x11,0x10,0x10,0x1F,0x00,0x00,0x00,0x1C,0x02,0x00,0x00,
0x1F,0x00,0x00,0x00,0x07,0x08,0x00,0x00,0x18,0x04,0x02,0x01,0x01,0x11,0x01,0x01,
0x10,0x10,0x10,0x08,0x04,0x02,0x01,0x00,0x00,0x00,0x10,0x08,0x07,0x00,0x00,0x1F,
0x00,0x02,0x04,0x08,0x10,0x00,0x00,0x1F,0x01,0x01,0x01,0x02,0x04,0x08,0x10,0x00};
unsigned char NF[]={'2','0','1','1','.','0','1','.','3','0'};
//主函数
void main()
{
while(1)
{
init();//调用初始化函数
lcd_init();//调用lcd初始化函数
LCD_set_xy(5,0);
lcd_enable();
write1();//显示日期
delay(1);
}
}
//I/O口初始化函数
void init()
{
ADCON1=0X07;//定义A口为普通I/O口
TRISA=0X00;//设置A口为输出
TRISD=0X00;//设置D口为输出
}
//LCD初始化设置
void lcd_init()
{
PORTD=0X01;//清出显示
lcd_enable();
PORTD=0X38;//8位两行5*7点阵
lcd_enable();
PORTD=0X0f;//显示开,光标开,闪烁开
lcd_enable();
PORTD=0X0c;//光标移动文字不移动
lcd_enable();
}
//lcd显示设置函数
void lcd_enable()
{
rs=0;//该字节数据为命令而不是数据
rw=0;//此次操作为写而不是读
e=0;//拉低使能信号
delay(10);//保持使能信号为低一段时间(地址建立需要一段时间)
e=1;//拉高使能信号,建立lcd操作所需要的上升沿
}
//延时函数
void delay(int x)
{
int i,j;
for(i=x;i>0;i--)
for(j=110;j>0;j--);
}
//写数据指令
void write(char x)
{
PORTD=x;//待显示数据送到D口
rs=1;//该字节为数据而不是命令
rw=0;//此操作为写不是读
e=0;//拉低使能位
delay(10);//保持信号为低电平一段时间(地址建立需要的时间)
e=1;//拉高使能信号,建立lcd所需要的上升沿
}
//写入自定义字符
void write_CGRAM()
{
unsigned char i,j,kk;
unsigned char tmp=0x40; //操作CGRAM的命令码
kk=0;
for(j=0;j<8;j++)
//64 字节存储空间,可以生成 8 个自定义字符点阵
{
for(i=0;i<8;i++)
// 8 个字节生成 1 个字符点阵
{
PORTD=tmp+i;
//操作CGRAM的命令码+写入CGRAM地址.
lcd_enable();
write(table[kk]);
//写入数据
kk++;
}
tmp+=8;
}
}
//定义字符或数字的显示文字
void LCD_set_xy(unsigned char x,unsigned char y)
{
if (0==y) x|=0x80; //当要显示第一行时地址码+0x80;
else x|=0xC0; //在第二行显示是地址码+0xC0;
PORTD=x; //发送地址码 0x80-0x8F 或者0xC0-0xCF
}
//显示日期
void write1()
{
int i;
for(i=0;i<10;i++)
write(NF[i]);
}