標題:
Arduino驅(qū)動LCD1602液晶程序
[打印本頁]
作者:
滾去學(xué)習(xí)
時間:
2021-10-24 20:52
標題:
Arduino驅(qū)動LCD1602液晶程序
LCD1602的V0是背光可接Arduino的GND
#define RS_CLR digitalWrite(13,LOW);
#define RS_SET digitalWrite(13,HIGH);
#define RW_CLR digitalWrite(12,LOW);
#define RW_SET digitalWrite(12,HIGH);
#define EN_CLR digitalWrite(11,LOW);
#define EN_SET digitalWrite(11,HIGH);
unsigned char arr[]="Hello Word!"; //16個字符以內(nèi)
void setup() {
pinMode(2,OUTPUT);//D7
pinMode(3,OUTPUT);//D6
pinMode(4,OUTPUT);//D5
pinMode(5,OUTPUT);//D4
pinMode(6,OUTPUT);//D3
pinMode(7,OUTPUT);//D2
pinMode(8,OUTPUT);//D1
pinMode(9,OUTPUT);//D0
// pinMode(10,OUTPUT);
pinMode(11,OUTPUT);//EN
pinMode(12,OUTPUT);//RW
pinMode(13,OUTPUT);//RS
}
void loop() {
LCD_Init();
LCD_Clear();//清屏
LCD_Write_Char(7,0,'o');
LCD_Write_Char(8,0,'k');
LCD_Write_String(1,1,arr);
delay(1000);
delay(1000);
delay(1000);
delay(1000);
delay(1000);
}
//模擬單片機八位輸出
void DataPort(unsigned char data)
{
if(data&0x80)digitalWrite(2,1);
else digitalWrite(2,0);
if(data&0x40)digitalWrite(3,1);
else digitalWrite(3,0);
if(data&0x20)digitalWrite(4,1);
else digitalWrite(4,0);
if(data&0x10)digitalWrite(5,1);
else digitalWrite(5,0);
if(data&0x08)digitalWrite(6,1);
else digitalWrite(6,0);
if(data&0x04)digitalWrite(7,1);
else digitalWrite(7,0);
if(data&0x02)digitalWrite(8,1);
else digitalWrite(8,0);
if(data&0x01)digitalWrite(9,1);
else digitalWrite(9,0);
}
/*------------------------------------------------
判忙函數(shù)
------------------------------------------------*/
char LCD_Check_Busy(void)
{
unsigned char x;
DataPort(0xFF);
RS_CLR;
RW_SET;
EN_CLR;
delay(1);
EN_SET;
pinMode(13,INPUT);
x=digitalRead(13);
pinMode(13,OUTPUT);
if(x) return 0;
else return 1;
}
/*------------------------------------------------
寫入命令函數(shù)
------------------------------------------------*/
void LCD_Write_Com(unsigned char com)
{
while(LCD_Check_Busy()); //忙則等待
delay(5);
RS_CLR;
RW_CLR;
EN_SET;
DataPort(com);
delay(1);
EN_CLR;
}
/*------------------------------------------------
寫入數(shù)據(jù)函數(shù)
------------------------------------------------*/
void LCD_Write_Data(unsigned char Data)
{
//while(LCD_Check_Busy()); //忙則等待
delay(5);
RS_SET;
RW_CLR;
EN_SET;
DataPort( Data);
delay(1);
EN_CLR;
}
/*------------------------------------------------
清屏函數(shù)
------------------------------------------------*/
void LCD_Clear(void)
{
LCD_Write_Com(0x01);
delay(5);
}
/*------------------------------------------------
寫入字符串函數(shù)
------------------------------------------------*/
void LCD_Write_String(unsigned char x,unsigned char y,unsigned char *s)
{
if (y == 0)
{
LCD_Write_Com(0x80 + x); //表示第一行
}
else
{
LCD_Write_Com(0xC0 + x); //表示第二行
}
while (*s)
{
LCD_Write_Data( *s);
s ++;
}
}
/*------------------------------------------------
寫入字符函數(shù)
------------------------------------------------*/
void LCD_Write_Char(unsigned char x,unsigned char y,unsigned char Data)
{
if (y == 0)
{
LCD_Write_Com(0x80 + x);
}
else
{
LCD_Write_Com(0xC0 + x);
}
LCD_Write_Data( Data);
}
/*------------------------------------------------
初始化函數(shù)
------------------------------------------------*/
void LCD_Init(void)
{
LCD_Write_Com(0x38); /*顯示模式設(shè)置*/
delay(5);
LCD_Write_Com(0x38);
delay(5);
LCD_Write_Com(0x38);
delay(5);
LCD_Write_Com(0x38);
LCD_Write_Com(0x08); /*顯示關(guān)閉*/
LCD_Write_Com(0x01); /*顯示清屏*/
LCD_Write_Com(0x06); /*顯示光標移動設(shè)置*/
delay(5);
LCD_Write_Com(0x0C); /*顯示開及光標設(shè)置*/
}
復(fù)制代碼
歡迎光臨 (http://www.torrancerestoration.com/bbs/)
Powered by Discuz! X3.1