给个VHDL液晶1602显示汉字的程序,谢谢
发布网友
发布时间:2022-05-02 09:16
我来回答
共2个回答
热心网友
时间:2023-10-15 12:20
我收藏的一个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
热心网友
时间:2023-10-15 12:21
我收藏的一个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