|
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個(gè)字符以內(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);
- }
- //模擬單片機(jī)八位輸出
- 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); /*顯示光標(biāo)移動(dòng)設(shè)置*/
- delay(5);
- LCD_Write_Com(0x0C); /*顯示開及光標(biāo)設(shè)置*/
- }
-
復(fù)制代碼
|
|