给个VHDL液晶1602显示汉字的程序,谢谢

我收藏的一个1602显示汉字程序

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

//lcd头文件

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

#include<reg52.h>

#include<string.h>

#include <absacc.h>

#define lcd_data P0 //定义端口

#define uchar unsigned char

#define uint unsigned int

sbit RS=P2^1;

sbit RW=P2^2;

sbit E=P2^3;

sbit BF=P0^7;

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

//延时函数

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

void delay(uint i)

{

while(i--);

}

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

//写控制字

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

void write_struct(uchar temp)

{

E=0;

delay(100);

//while(BF==1);

RW=0;

RS=0;

lcd_data=temp;

delay(3);

E=1;

delay(3);

E=0;

}

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

//写数据

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

void write_data(uchar temp)

{

delay(100);

//while(BF==1);

E=0;

RS=1;

RW=0;

lcd_data=temp;

E=1;

delay(3);

E=0;

}

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

//获得显示地址

//x表示是第几行显示 (0-1)

//y表示某行的第几个字符(0-15)

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

uchar getchar_adress(uchar x,uchar y)

{ uchar address;

if(x==0) address=0x80+y; //第一行

else address=0xc0+y; //第二行

return address;

}

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

//lcd初始化

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

void lcd_init()

{

write_struct(0x38); //设置接口DB宽度(8位)和LCM显示行数(2行)

write_struct(0x08); //

write_struct(0x0c); //设置光标为移位模式

write_struct(0x01); //执行清屏操作

write_struct(0x06); //设置光标为加1模式

}

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

//向CGRAM写入数据

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

void write_cgram(unsigned char adress,unsigned char *p)

{

char i;

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

{ write_struct(adress+i);

write_data(p);

}

}

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

//显示CGRAM数据

//x表示是第几行显示 (0-1)

//y表示某行的第几个字符(0-15)

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

void display_cgram(unsigned char x,uchar y,uchar *CgramData)

{

uchar address,cgram_address,p;

address=getchar_adress(x,y); //获得CGRAM字符显示位置

cgram_address=0x40+(address&0x07)*8; //CGRAM初始地址

p=address&0x07;

write_cgram(cgram_address,CgramData);

write_struct(address); //设置DDRAM地址

write_data(p);

}

//显示字符

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

void display(char temp0,char *p)

{

write_struct(temp0);

delay(3);

write_data(*p);

}

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

//显示字符串

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

void display_str(uchar x,uchar y,char *p)

{

char i,temp0;

temp0=getchar_adress(x,y);

write_struct(temp0);

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

{

if(*p=='\0')

break;

write_data(*p);

p++;

}

}

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

//清屏

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

void lcd_clr()

{

write_struct(0x01);

}

//*****************************************************end

上一篇:下一篇:现在中国的液晶电视,有几个品牌能全部国产化?就是LED.零件那些.中国能自己生产?
下一篇:上一篇:返回栏目