当前位置:文档之家› LCD12864写字符串程序及其头文件

LCD12864写字符串程序及其头文件

/**************************************
端口初始化
**************************************/
void port_init()
{
DDRA=0XFF;
PORTA=0XFF;
DDRC=0XFF;
PORTC=0XFF;
}
/******************************************
void LocateXY(uchar x,uchar y)
{
if(y==0)
{write_com(0x80+x);} //0
else if(y==1)
{write_com(0x90+x);} //1
else if(y==2)
{write_com(0x88+x);} //2
else if(y==3)
#include<macros.h>
#define uchar unsigned char
#define uint unsigned int
#define RS_0 PORTC&=~(1<<PC0) //数据指令选择端高电平数据低电平指令
#define RS_1 PORTC|=(1<<PC0)
#define RW_0 PORTC&=~(1<<PC1) //并口时,读写选择端,低电平写;串口时数据输入端
/************************源自*****2012年5月19日
调试成功
编辑环境:ICCAVR
功能:用LCD12864显示汉字
********************************/
#include<iom16v.h>
#include<macros.h>
#include"LCD_12864.c"
write_data(0xD5);// D5C5 D4F6 B9F0
delay(2);
write_data(0xC5);//八根线并行传输的原因,为此需要每八个字节进行传输
delay(2);
write_data(0xD4);
delay(2);
write_data(0xF6);
delay(2);
write_data(0xB9);
void LCD_init()
{
write_com(0x01);
delay(5) ; //清屏指令
PSB_1; //并口数据传输模式
RST_0; //低电平复位
delay(3);
RST_1; //
delay(3);
write_com(0x34); //扩充指令操作
delay(5);
write_com(0x30); //基本指令操作
delay(200);
write_string(0,1,"I Love微电子!");
delay(200);
write_string(0,2,"Working Hard !");
delay(200);
//write_string(0,3,"I Love English!");
//write_string(0,3,"做电子设计大赛!");//包含了汉字字符串中有汉字输入方式
delay(3);
write_com(0x0C); //显示开/关光标
delay(5);
write_com(0x01); //清除LCD的显示,即清屏指令
delay(5);
}
/********************************************
光标定位函数,X显示列,Y显示行
***********************************************/
}
LCD12864驱动文件
/**************************************
2012.5.18
2012.5.19调试成功
功能:驱动12864液晶显示
并口数据传输
*****************************************/
#include<iom16v.h>
{
RS_0;
RW_0;
EN_0;
Dataport=com;
delay(2);
EN_1;
delay(2);
EN_0;
}
/******************************************
写数据函数规定写数据的流程
*******************************************/
主函数
*******************************************/
void main()
{
uchar i;
port_init();
delay(100);//
port_init();//
LCD_init();
write_string(0,0,"zheng Zunggui");
{write_com(0x98+x);} //3
}
/*************************************************
显示屏字符串写入函数,X表示列,Y表示行
************************************************/
void write_string(uchar x,uchar y,uchar *s)
{
uint i,j;
for(i=0;i<ms;i++)
{
for(j=0;j<1140;j++);
}
}
/****************************************
写指令函数规定写指令操作
*****************************************/
void write_com(uchar com) //command
{
LocateXY(x,y);
while(*s)
{
write_data(*s);
s++;
}
}
#define PSB_1 PORTC|=(1<<PC3)
#define RST_0 PORTC&=~(1<<PC4) //复位信号,电平有效
#define RST_1 PORTC|=(1<<PC4)
#define Dataport PORTA //数据端口为A口
void delay(uint ms) //系统延时函数
void write_data(uchar data) //data
{
RS_1;
RW_0;
EN_0;
Dataport=data;
delay(2);
EN_1;
delay(2);
EN_0;
}
/**********************************************
LCD初始化函数
************************************************/
delay(2);
write_data(0xF0);
delay(2);
/*********
{
uint k;
for(k=0;k<2;i++)
{
write_com(0x98);
delay(2);
write_data(0xB1B0);//这种输入不正确
delay(200);
}
}
****************/
#define RW_1 PORTC|=(1<<PC1)
#define EN_0 PORTC&=~(1<<PC2) //并口时,读写使能;串口时,串行时钟
#define EN_1 PORTC|=(1<<PC2)
#define PSB_0 PORTC&=~(1<<PC3) //并口串口选择端,高电平为并口
/**************************************
此为单独操作汉字字符的方法
****************************************/
LocateXY(1,3);//单独写汉字时,要一个字节一个字节写入,分开地址不重合
//先高字节后低字节与ASCCII不冲突
相关主题