lcd开机流程图_LCD1602程序代码及显示流程图
描述
lcd1602顯示程序代碼
前些天弄了最小系統板后就想著學習1602的顯示程序,可惜壇子里的或網上的,都沒有簡單的1602顯示程序,無柰在網上下載了一段經過反復修改測試,終于有了下面一段代碼:
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
// - - 初始化接口
# define LCD_DB P0 // - - P0 = DB0~DB7
sbit LCD_RS=P2^0; // - - p2.0 = RS
sbit LCD_RW=P2^1; // - - p2.1 = RW
sbit LCD_E=P2^2; // - - p2.2 = E
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
// - - 定義函數
# define uchar unsigned char
# define uint unsigned int
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
// - - 定義子程序函數
void LCD_init(void); // - - 初始化LCD1602函數
void LCD_write_command(uchar command); // - - 向LCD1602寫指令函數
void LCD_write_data(uchar dat); // - - 向LCD1602寫數據函數
void LCD_set_xy(uchar x,uchar y); // - - 設置LCD1602顯示位置 X(0-16),y(1-2)
void LCD_disp_char(uchar x,uchar y,uchar dat); // - - 在LCD1602上顯示一個字符
void LCD_disp_string(uchar X,uchar Y,uchar *s); // - - 在LCD1602上顯示一個字符串
//void LCD_check_busy(void);//檢查忙函數。我沒用到此函數,因為通過率極低。
void LCD_delay_10us(uint n); // - - 10微秒的延時子程序
void LCD_delay_50us(uint n); // - - 50微秒的延時子程序
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
// - - 初始化LCD1602
void LCD_init(void)
{
LCD_delay_10us(20);
LCD_write_command(0x38); // - - 設置8位格式,2行,5x7
LCD_delay_10us(5);
LCD_write_command(0x0c); // - - 整體顯示,關光標,不閃爍
LCD_delay_10us(5);
LCD_write_command(0x06); // - - 設定輸入方式,增量不移位
LCD_delay_10us(5);
LCD_write_command(0x01); // - - 清除屏幕顯示
LCD_delay_50us(40);
}
//********************************
// - - 向LCD1602寫指令
void LCD_write_command(uchar dat)
{
LCD_delay_10us(5);
LCD_RS=0; // - - 指令
LCD_RW=0; // - - 寫入
LCD_DB=dat;
LCD_delay_10us(5);
LCD_E=1; // - - 允許
LCD_delay_10us(5);
LCD_E=0;
}
// - - 向LCD1602寫數據
void LCD_write_data(uchar dat)
{
LCD_delay_10us(5);
LCD_RS=1;// - - 數據
LCD_RW=0;// - - 寫入
LCD_DB=dat;
LCD_delay_10us(5);
LCD_E=1;// - - 允許
LCD_delay_10us(5);
LCD_E=0;
}
// - - 設置顯示位置
void LCD_set_xy(uchar x,uchar y)
{
uchar address;
if(y==1)
{
address=0x80+x; // - - 第一行位置
} else {
address=0xc0+x; // - - 第二行位置
}
LCD_delay_10us(5);
LCD_write_command(address);
}
// - - 顯示一個字符函數
void LCD_disp_char(uchar x,uchar y,uchar dat) // - - LCD_disp_char(0,1,0x38); // - - 顯示8
{
LCD_set_xy(x,y);
LCD_delay_10us(5);
LCD_write_data(dat);
}
// - - 顯示一個字符串函數
void LCD_disp_string(uchar x,uchar y,uchar *s)
{
LCD_set_xy(x,y);
LCD_delay_10us(5);
while(*s!=‘\0’)
{
LCD_write_data(*s);
s++;
}
}
//********************************
/*******檢查忙函數*************
void LCD_check_busy() //實踐證明,在我的LCD1602上,檢查忙指令通過率極低,以
{ //至于不能正常使用LCD。因此我沒有再用檢查忙函數。而使
do //用了延時的方法,延時還是非常好用的。我試了一下,用
{ LCD_E=0; //for循環作延時,普通指令只要1次循就可完成。清屏指令
LCD_RS=0; //要用200次循環便能完成。
LCD_RW=1;
LCD_DB=0xff;
LCD_E=1;
}while(LCD_DB^7==1);
}
******************************/
void LCD_delay_10us(uint n) // - - 10微秒的延時子程序
{
uint i,j;
for(i=n;i》0;i--)
for(j=2;j》0;j--);
}
void LCD_delay_50us(uint n) // - - 50微秒的延時子程序
{
uint i,j;
for(i=n;i》0;i--)
for(j=22;j》0;j--);
}
LCD1602顯示程序流程圖及句解
讓LCD1602顯示字符前要輸入字符所在的地址,這也是每顯示一個字符地址要加一的原因,在下面的一段代碼里你會明白怎么設置地址,怎么讓地址自動加一,怎么清屏,怎么顯示字符,希望你能看懂哦
sbit LCD_E=P2^0; //lcd1602控制置位
sbit LCD_RW=P2^1; //lcd1602控制置位
sbit LCD_RS=P2^2; //lcd1602控制置位
void LCD_command(unsigned char com)
{
LCD_E=0;
LCD_RW=0;
LCD_RS=0;
P1=com;
delay_us(100);
LCD_E=1;
delay_us(100);
LCD_E=0;
}
void LCD_date(unsigned char dat)
{
LCD_E=0;
LCD_RW=0;
LCD_RS=1;
P1=dat;
delay_us(100);
LCD_E=1;
delay_us(100);
LCD_E=0;
}
LCD_command(0x38); //設置LCD為16*2顯示,5*7點陣,8位數據接口
LCD_command(0x0c); //設置LCD顯示開,光標顯示關
LCD_command(0x06); //寫一個數據后地址加1
LCD_command(0x01); //顯示清屏
LCD_command(0x80); //數據指針設置為第一行第一位
LCD_date(‘pi’);
LCD_date(‘l’);
LCD_date(‘e’);
LCD_date(‘a’);
LCD_date(‘s’);
LCD_date(‘e’);
LCD_date(‘ ’);
LCD_date(‘c’);
LCD_date(‘h’);
LCD_date(‘e’);
LCD_date(‘c’);
LCD_date(‘k’);
LCD_date(‘ ’);
LCD_date(‘t’);
LCD_date(‘h’);
LCD_date(‘e’);
LCD_command(0x80+0x40); //LCD地址指針指向第二行第一個位置
LCD_date(‘c’);
LCD_date(‘o’);
LCD_date(‘n’);
LCD_date(‘n’);
LCD_date(‘e’);
LCD_date(‘c’);
LCD_date(‘t’);
LCD_date(‘i’);
LCD_date(‘o’);
LCD_date(‘n’);
LCD_date(‘!’);
LCD_date(‘!’);
打開APP精彩內容
點擊閱讀全文
總結
以上是生活随笔為你收集整理的lcd开机流程图_LCD1602程序代码及显示流程图的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 程序员效率:职业倦怠的理解
- 下一篇: 程序员的数学笔记3--迭代法