12864字符和汉字显示程序

  • 格式:doc
  • 大小:28.50 KB
  • 文档页数:4

#include

#define uchar unsigned char

#define uint unsigned int

sbit lcdrs=P2^4;

sbit lcdrw=P2^5;

sbit lcden=P2^6;

/******************************

函数名:delayus()

功 能:延时k微秒

参 数:k

返回值:无

*******************************/

void delayus(uint k)

{

while(k--);

}

/******************************

函数名:lcd_wrcom()

功 能:12864写命令

参 数:lcd_com

返回值:无

*******************************/

void lcd_wrcom(char lcd_com)

{

uchar temp;

lcdrs=0;

lcdrw=1;

do //12864判忙

{

lcden=1;

temp=P0;

delayus(6);

lcden=0;

}

while(temp & 0x80);//不忙则退出循环

lcdrw=0;

P0=lcd_com; //写命令

lcden=1;

delayus(6);

lcden=0;

}

/******************************

函数名:lcd_wrdata()

功 能:12864写数据

参 数:lcd_dat

返回值:无

*******************************/

void lcd_wrdata(char lcd_dat)

{

uchar temp;

lcdrs=0;

lcdrw=1;

do //12864判忙

{

lcden=1;

temp=P0;

delayus(6);

lcden=0;

}

while(temp & 0x80);

lcdrs=1;

lcdrw=0;

P0=lcd_dat; //写数据

lcden=1;

delayus(6);

lcden=0;

}

/******************************

函数名:init_12864()

功 能:12864初始化

参 数:无

返回值:无

*******************************/

void init_12864()

{

delayus(100); //延时100微秒

lcd_wrcom(0x30);//功能设定

delayus(5000);

lcd_wrcom(0x02);//地址归位

delayus(100);

lcd_wrcom(0x0e);//显示状态 delayus(100);

lcd_wrcom(0x1c);//游标和显示的移位

delayus(100);

lcd_wrcom(0x01);//清屏

delayus(5000); //延时5毫秒

}

/*******************************************

函数名称:disp_HZ

功 能:控制液晶显示汉字

参 数:addr--显示位置的首地址

pt--指向显示数据的指针

num--显示汉字个数

返回值 :无

********************************************/

void disp_HZ(uchar addr,const uchar * pt,uchar num)

{

uchar i;

lcd_wrcom(addr);

for(i = 0;i < (num*2);i++)

lcd_wrdata(*(pt++));

}

/******************************

函数名:main()

功 能:调用子程序/12864显示程序

参 数:无

返回值:无

*******************************/

void main() //显示字符

{

uchar i;

const uchar hang1[]={"一路江南"};//汉字显示

init_12864();

lcd_wrcom(0x80);//设定显示起始地址

for(i=0;i<16;i++)

lcd_wrdata(0x00+i);

lcd_wrcom(0x90);//设定显示起始地址

for(i=0;i<16;i++)

lcd_wrdata(0x10+i);

lcd_wrcom(0x88);//设定显示起始地址

for(i=0;i<16;i++) lcd_wrdata(0x20+i);

lcd_wrcom(0x98);//设定显示起始地址

for(i=0;i<16;i++)

lcd_wrdata(0x30+i);

disp_HZ(0x80,hang1,4);//调用显示汉字

while(1);

}