8255的Wr和rd直接與單片機的wr和rd相連,作為外部存儲器,8255。
的PA端口連接到LCD1602的數據端口。這個程序的功能是在LCD上顯示字符串和自己。
已成功實現定義的圖形(板自行焊接)*/
/* * * * * * * * * * * * * * * * * *包含頭文件* * * * * * * * * * * * * * * * * * * *
# include & ltREGX51。H & gt
# include & ltabsacc.h & gt
#定義清晰屏幕LCD_write_command(0x01)
#定義uint無符號整數
#定義uchar無符號字符
/* * * * * * * * * * * *定義接口* * * * * * * * * * * * * * * * * * * *
#定義LCDIO P0
#定義PA XBYTE[0xFF00]
#定義PB XBYTE[0xFF01]
#定義PC XBYTE[0xFF02]
#定義COM XBYTE[0xFF03]
sbit lcd1602_rs=p1^0;
sbit lcd1602_rw=p1^1;
sbit lcd1602_en=p1^2;
無符號字符表1[]={ 0x03,0x07,0x0f,0x1f,0x1f,0x1f,0x1f,0x1f,
0x18,0x1E,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f,
0x07,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f,
0x10,0x18,0x1c,0x1E,0x1E,0x1E,0x1E,0x1E,
0x0f,0x07,0x03,0x01,0x00,0x00,0x00,0x00,
0x1f,0x1f,0x1f,0x1f,0x1f,0x0f,0x07,0x01,
0x1f,0x1f,0x1f,0x1f,0x1f,0x1c,0x18,0x00,
0x1c,0x18,0x10,0x00,0x00,0x00,0x 00 };//心形圖案
/* * * * * * * * * * * *定義函數* * * * * * * * * * * * * * * * * *
void LCD_write_command(無符號字符命令);//寫命令功能
void LCD_write_dat(無符號字符dat);//寫數據功能
void LCD_set_xy(無符號char x,無符號char y);//設置顯示位置功能
void LCD_dsp_char( unsigned x,unsigned char y,unsigned char dat);//顯示字符函數
void LCD _ DSP _ string(unsigned char X,unsigned char Y,unsigned char * s);//顯示字符串函數
void LCD _ init(void);//初始化函數
void delay _ NMS(unsigned int n);//延遲功能
void delay();
void init _ 8255();
void write _ 8255 pa(uchar ch);
/* * * * * * * * * * * * * * 8255初始化* * * * * * * * * * * * * * * * * * * * * * * *
void init_8255()
{
COM = 0x80
}
/* * * * * * * * * * * *將數據寫入PA * * * * * * * * * * * * * * * * * * * * * * * * * * * *
void write_8255PA(uchar ch)
{
PA = ch
}
/* * * * * * * * * *初始化函數* * * * * * * * * * * *
void LCD_init(void)
{
清晰屏幕;//清除屏幕
LCD _ write _ command(0x 38);//設置8位數據傳輸模式
LCD _ write _ command(0x0d);//打開顯示(啟用lcd顯示)
LCD _ write _ command(0x 80);//設置lcd第壹個顯示地址
清晰屏幕;//清除屏幕
}
/* * * * * * * * * * * * * *寫指令功能* * * * * * * * * * * * * * * * * * * * * * * *
void LCD_write_command(無符號字符命令)
{
write_8255PA(命令);
delay _ NMS(100);
LCD 1602 _ RS = 0;
LCD 1602 _ RW = 0;
LCD 1602 _ EN = 0;
LCD 1602 _ EN = 1;
delay _ NMS(10);
}
/***************************************************/
/* * * * * * * * * * * *寫數據功能* * * * * * * * * * * * * * * * * * * *
void LCD_write_dat(無符號字符數據)
{
write _ 8255 pa(dat);
delay _ NMS(100);
LCD 1602 _ RS = 1;
LCD 1602 _ RW = 0;
LCD 1602 _ EN = 0;
delay _ NMS(1);
LCD 1602 _ EN = 1;
}
/****************************************************/
/* * * * * * * * * * * * * * * *設置顯示位置* * * * * * * * * * * * * * * *
void LCD_set_xy(無符號字符x,無符號字符y)
{
無符號字符地址;
if (y == 1)
地址= 0x 80+x;
其他
地址= 0xc 0+x;
LCD_write_command(地址);
}
/***************************************************/
/* * * * * * * * * * * * * *顯示字符* * * * * * * * * * * * * * * * * *
void LCD_dsp_char(無符號x,無符號char y,無符號char dat)
{
LCD_set_xy( x,y);
LCD _ write _ dat(dat);
}
/**********************************************/
/* * * * * * * * * * * *顯示字符串函數* * * * * * * * * *
void LCD_dsp_string(無符號字符X,無符號字符Y,無符號字符*s)
{
LCD_set_xy( X,Y);
while (*s)
{
LCD _ write _ dat(* s);
s++;
}
}
/***********************************************/
* * * * * * * * *延遲* * * * * * * * * * * * * * * *
void delay_nms(無符號整數n)
{
無符號int i=0,j = 0;
for(I = n;我& gt0;我-)
for(j = 0;j & lt10;j++);
}
/**************************************/
無效延遲()
{ int I;
for(I = 0;我& lt50;i++)
delay _ NMS(100);}
* * * * * * * * * *主要功能* * * * * * * * * * * *
無效總管(無效)
{
無符號char i,j,k,tmp
init _ 8255();
LCD _ init();
delay _ NMS(100);
tmp = 0x40//設置CGRAM地址的格式字。
k = 0;
for(j = 0;j & lt8;j++)
{
for(I = 0;我& lt8;i++)
{
LCD _ write _ command(tmp+I);//設置自定義字符的CGRAM地址。
delay _ NMS(2);
LCD _ write _ dat(table 1[k]);//將自定義字符表的數據寫入CGRAM。
k++;
delay _ NMS(2);
}
tmp = tmp+8;
}
LCD_dsp_string(1,1,“LCD測試”);//在第壹行第壹列顯示“LCD測試”。
LCD_dsp_string(1,2,“成功”);//在第二行第壹列顯示“成功”。
for(I = 0;我& lt4;i++)
{
LCD_dsp_char( 12+i,1,I);//在第壹行第12列顯示心形圖案的上半部分。
delay _ NMS(1);
}
for(I = 4;我& lt8;i++)
{
LCD_dsp_char(12+i-4,2,I);//在第二行第12列顯示心形圖案的下半部分。
delay _ NMS(1);
}
做
{
LCD _ write _ command(0x 08);
delay();
LCD _ write _ command(0x0c);
delay();
} while(1);
}