?? lcd1602.c
字號:
/*******************************************************************************
功能:液晶LM016L顯示,2X16顯示。
說明:顯示兩行字符串,words1[],words2[]。第一行地址0~15,第二行地址64~79
制作:電子科大huang_api@sina.com
*******************************************************************************/
#include <reg52.h>
#include <intrins.h>
#define uchar unsigned char
#define uint unsigned int
///////控制引腳RS為P32. RW為P33. E為P34//////////
sbit RS = P3^2;
sbit RW = P3^3;
sbit E = P3^4;
uchar code words1[] = {"welcome!"};
uchar code words2[] = {"0123456789"};//0123456789abcdefghijklmnopqrstuvwxyz!@#$%^&*()
/****************************延時函數(shù)***************************
名稱:delay()
輸入:uchar m
輸出:無
***************************************************************/
void delay(uchar ms)
{ // 延時子程序
uchar i;
while(ms--)
{
i=250;
while(i--)
{
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
}
}
}
/******************************LCD狀態(tài)檢測函數(shù)**************************************
名稱:lcd_state()
功能:lcd狀態(tài)忙碌判斷
參數(shù):P2口為數(shù)據(jù)口
輸入:無
輸出:返回狀態(tài)標志state位
************************************************************************************/
bit lcd_state(void)
{ // 測試LCD忙碌狀態(tài)
bit state;
RS = 0;//command
RW = 1;//read
E = 1;
_nop_();
_nop_();
_nop_();
_nop_();
state = (bit)(P2 & 0x80);
E = 0;
return state;
}
/******************************LCD指令寫入函數(shù)**************************************
名稱:lcd_w_cmd()
功能:寫指令到LCD數(shù)據(jù)口P2
參數(shù):P2口為數(shù)據(jù)口
輸入:待寫指令
輸出:無
************************************************************************************/
void lcd_w_cmd(uchar cmd)
{ // 寫入指令數(shù)據(jù)到LCD
while(lcd_state());
RS = 0;//command
RW = 0;//write
E = 0;
_nop_();
_nop_();
P2 = cmd;
_nop_();
_nop_();
_nop_();
_nop_();
E = 1;
_nop_();
_nop_();
_nop_();
_nop_();
E = 0;
}
/******************************LCD狀態(tài)檢測函數(shù)**************************************
名稱:lcd_adder()
功能:lcd顯示地址設(shè)置
參數(shù):P2口為數(shù)據(jù)口
輸入:一字節(jié)待設(shè)置的顯示地址長度0~15
輸出:無
************************************************************************************/
void lcd_adder(uchar adder)
{ //設(shè)定顯示位置
lcd_w_cmd(adder | 0x80);
}
/******************************LCD數(shù)據(jù)寫入函數(shù)**************************************
名稱:lcd_w_date()
功能:寫數(shù)據(jù)到LCD數(shù)據(jù)口P2
參數(shù):P2口為數(shù)據(jù)口
輸入:一字節(jié)待寫顯示數(shù)據(jù)
輸出:無
************************************************************************************/
void lcd_w_date(uchar dat)
{ //寫入字符顯示數(shù)據(jù)到LCD
while(lcd_state());
RS = 1;//date
RW = 0;//write
E = 0;
P2 = dat;
_nop_();
_nop_();
_nop_();
_nop_();
E = 1;
_nop_();
_nop_();
_nop_();
_nop_();
E = 0;
}
/******************************LCD初始化函數(shù)**************************************
名稱:lcd_init()
功能:初始化LCD模塊
參數(shù):初始化指令
輸入:無
輸出:無
************************************************************************************/
void lcd_init(void)
{ //LCD初始化設(shè)定
lcd_w_cmd(0x38); //
delay(1);
lcd_w_cmd(0x0c); //
delay(1);
lcd_w_cmd(0x06); //
delay(1);
lcd_w_cmd(0x01); //清除LCD的顯示內(nèi)容
delay(1);
}
/******************************LCD顯示函數(shù)**************************************
名稱:lcd_display()
功能:顯示words1[],words2[]字符串!
參數(shù):P2口為數(shù)據(jù)口,*word1,*word2為待顯示字符串指針,adder1,adder2為兩行顯示起始地址
輸入:待顯示的數(shù)據(jù)的指針,顯示地址
輸出:無
*******************************************************************************/
lcd_display(uchar *word1,uchar *word2,uchar adder1,uchar adder2)
{
uchar i = 0;
lcd_adder(adder1); //0~15 // 設(shè)置顯示位置為第一行的第5個字符
while(word1[i] != '\0')
{ // 顯示字符
lcd_w_date(word1[i]);
i++;
}
lcd_adder(adder2);//64~79 // 設(shè)置顯示位置為第二行第二個字符
i = 0;
while(word2[i] != '\0')
{
lcd_w_date(word2[i]); // 顯示字符
i++;
}
}
///////////////////////////MAIN函數(shù)//////////////////////////////////
main()
{
lcd_init(); // 初始化LCD
delay(10);
lcd_display(&words1,&words2,16,48); //LCD顯示
while(1) ; //waiting
}
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -