51单片机系列之LCD1602
2017-01-06 来源:eefocus
名称:LCD1602液晶屏显示(并口)
平台:Keil 4, Ly-51S学习板
引脚定义如下:1-VSS 2-VDD 3-V0 4-RS 5-R/W 6-E 7-14 DB0-DB7 15-BLA 16-BLK
与51连接:RS-P2.4 RW-P2.5 EN-P2.6 DB-P0
-----------------------------------------------------*/
#include
#define DB P0
sbit RS =P2^4;
sbit RW =P2^5;
sbit EN =P2^6;
/*判忙函数*/
bit LCD_check_busy() {
DB = 0xFF;
RS = 0;
RW = 1;
EN = 0;
EN = 1;
return (bit)(DB & 0x80);
}
/*写入命令函数*/
void LCD_write_com(unsigned char com) {
while(LCD_check_busy());//忙则等待
RS = 0;
RW = 0;
EN = 1;
DB = com;
EN = 0;
}
/*写入数据函数*/
void LCD_write_data(unsigned char dat) {
while(LCD_check_busy());//忙则等待
RS = 1;
RW = 0;
EN = 1;
DB = dat;
EN = 0;
}
/*在y(0-1)行,x列(0-15)写入字符串函数*/
void LCD_write_string(unsigned char x, unsigned char y, unsigned char *s) {
if(0==y) LCD_write_com(0x80 + x);
else LCD_write_com(0xC0 + x);
while(*s) {
LCD_write_data(*s);
s ++;
}
}
/*写入字符函数*/
void LCD_write_char(unsigned char x, unsigned char y, unsigned char dat) {
if(0==y) LCD_write_com(0x80 + x);
else LCD_write_com(0xC0 + x);
LCD_write_data(dat);
}
/*清屏函数*/
void LCD_clear() {
LCD_write_com(0x01);
}
/*初始化函数*/
void LCD_init() {
LCD_write_com(0x38);/*显示模式设置*/
LCD_write_com(0x08);/*显示关闭*/
LCD_write_com(0x01);/*显示清屏*/
LCD_write_com(0x06);/*显示光标移动设置*/
LCD_write_com(0x0C);/*显示开及光标设置*/
}
/*主函数*/
void main() {
while(1) {
LCD_init();
LCD_write_char(0,0,'*');
LCD_write_string(1,0,'I'm Chinese.**');
LCD_write_string(0,1,'Happy,hellofuxin');
LCD_write_char(15,0,'!');
while(1);
}
}
上一篇:51单片机系列之串口
下一篇:51单片机系列之驱动蜂鸣器发声