源码 5 -- LCD 1602 显示字符
刚学会基本的字符显示,仅仅是字符显示就大量应用了各种指令格式,姑且在这个阶段写个程序,总结一下:
程序功能:在 LCD 正中央显示字符:“Hello World”、“By Fate”
注:LCD 1602 的使用:http://gaebolg.blog.163.com/blog/static/198269068201231665524137/
附上源码:(初出茅庐,难免有写的不好的地方,仅作备份之用,欢迎指点,喷子退散……)
/*------------------------------------------------------------------------------------
LCD 1602 显示字符,在正中央显示“Hello World”、“By Fate”
-------------------------------------------------------------------------------------*/
#include
#include
sbitRS = P2^4;
sbitRW = P2^5;
sbitEN = P2^6;
#defineDataPort P0
voidInit_LCD(void);// 初始化 LCD 显示
voidLCD_Write_Com(unsigned charc);// 向 LCD 写指令
voidLCD_Write_Data(unsigned chard);// 向 LCD 写数据
bitLCD_Busy(void);// LCD 忙检测函数,忙 返回 1,闲 返回 0
voidLCD_Clear(void);// 清屏
/*-------------------------------------------------------------------------------------
LCD 参数设定:DL 0 = 数据总线为 4 位 1 = 数据总线为 8 位
N 0 = 显示 1 行 1 = 显示 2 行
F 0 = 5x7 点阵/每字符1 = 5x10 点阵/每字符
--------------------------------------------------------------------------------------*/
voidLCD_Set_Argument(unsigned charDL,unsigned charN,unsigned charF);
/*-----------------------------------------------------------------------------------------------------------------------------------
LCD 输入模式设定:ID 0 = 写入新数据后光标左移 1 = 写入新数据后光标右移
S0 = 写入新数据后显示屏不移动1 = 写入新数据后显示屏整体右移 1 个字
------------------------------------------------------------------------------------------------------------------------------------*/
voidLCD_Set_InputMode(unsigned charID,unsigned charS);
/*-----------------------------------------------------------------------
LCD 显示设定:D 0 = 显示功能关 1 = 显示功能开
C 0 = 无光标 1 = 有光标
B 0 = 光标不闪烁 1 = 光标闪烁
------------------------------------------------------------------------*/
voidLCD_Set_DisplayMode(unsigned charD,unsigned charC,unsigned charB);
/*-----------------------------------------------------------
在第 row 行,第 col 列的位置,显示字符 c
------------------------------------------------------------*/
voidLCD_Write_Char(unsigned charrow,unsigned charcol,unsigned charc);
/*-----------------------------------------------------------
从第 row 行,第 col 列开始,显示字符串 s
------------------------------------------------------------*/
voidLCD_Write_String(unsigned charrow,unsigned charcol,unsigned char*s);
voidDelay(unsigned intt);
voidDelay_ms(unsigned intt); // 延迟 t ms
voidmain (void)
{
Init_LCD();
LCD_Write_Char(1, 3, H);
LCD_Write_Char(1, 4, e);
LCD_Write_Char(1, 5, l);
LCD_Write_Char(1, 6, l);
LCD_Write_Char(1, 7, o);
LCD_Write_String(1, 9, "World!");
LCD_Write_String(2, 5, "By Fate!");
while(1);
}
voidInit_LCD(void)
{
LCD_Set_Argument(1, 1, 0);// 设定基础参数:数据总线 8 位、显示 2 行、5x7 点阵/字符
LCD_Set_DisplayMode(0, 0, 0);// 设定显示模式:关显示、关光标显示、关光标闪烁
LCD_Set_InputMode(1, 0);// 设定输入模式:每输入一个字符,光标右移、屏幕不动
LCD_Clear();// 清屏
LCD_Set_DisplayMode(1, 0, 0);// 开显示
}
voidLCD_Write_Com(unsigned charc)
{
while(LCD_Busy());
RS = 0;
RW = 0;
EN = 1;
DataPort = c;
_nop_();// 小延时,比 Delay() 小得多,目的:使总线上数据变稳定
EN = 0;// 写操作是 EN 下降沿驱动
}
voidLCD_Write_Data(unsigned chard)
{
while(LCD_Busy());
RS = 1;
RW = 0;
EN = 1;
DataPort = d;
_nop_();
EN = 0;
}
b
C51LCD1602显示字 相关文章:
- Windows CE 进程、线程和内存管理(11-09)
- RedHatLinux新手入门教程(5)(11-12)
- uClinux介绍(11-09)
- openwebmailV1.60安装教学(11-12)
- Linux嵌入式系统开发平台选型探讨(11-09)
- Windows CE 进程、线程和内存管理(二)(11-09)