LCD1602
- 14.1LCD1602的基礎知識
- 1.LCD1602介紹
- 2.引腳及應用電路
- 3.內部結構框圖
- 4.時序結構
- 5.LCD1602指令集
- 6.字符值
- 7.LCD1602操作流程
- 14.2LCD1602功能函數代碼
- 1.顯示一個字符
- (1)工程目錄
- (2)main.c函數
- (3)LCD1602.c函數
- 2.顯示一組字符串
- (1)代碼
- 2.顯示數字
- (1)無符號代碼
- (2)有符號代碼
- 2.顯示進制
- (1)十六進制
- (1)二進制
14.1LCD1602的基礎知識
1.LCD1602介紹
LCD1602(Liquid Crystal Display)液晶顯示屏是一種字符型液晶顯示模塊,可以顯示ASCII碼的標準字符和其它的一些內置特殊字符,還可以有8個自定義字符
顯示容量:16×2個字符,每個字符為5*7點陣
2.引腳及應用電路
3.內部結構框圖
4.時序結構
5.LCD1602指令集
6.字符值
7.LCD1602操作流程
14.2LCD1602功能函數代碼
1.顯示一個字符
(1)工程目錄
(2)main.c函數
#include <REGX52.H>
#include "LCD1602.h"
void main()
{LCD_Init();LCD_ShowChar(2,3,'A');while(1){}
}
(3)LCD1602.c函數
#include <REGX52.H>sbit LCD_RS=P2^6;
sbit LCD_RW=P2^5;
sbit LCD_E=P2^7;
#define LCD_DataPort P0void LCD_Delay() //@11.0592MHz 1ms
{unsigned char data i, j;i = 2;j = 199;do{while (--j);} while (--i);
}void LCD_WriteCommand(unsigned char Command)
{LCD_RS=0;LCD_RW=0;LCD_DataPort=Command;LCD_E=1;LCD_Delay();LCD_E=0;LCD_Delay();
}void LCD_WriteData(unsigned char Data)
{LCD_RS=1;LCD_RW=0;LCD_DataPort=Data;LCD_E=1;LCD_Delay();LCD_E=0;LCD_Delay();
}
void LCD_Init(void)
{LCD_WriteCommand(0x38);LCD_WriteCommand(0x0C);LCD_WriteCommand(0x06);LCD_WriteCommand(0x01);
}void LCD_ShowChar(unsigned char Line,unsigned char Column,unsigned char Char)
{if(Line==1){LCD_WriteCommand(0x80|(Column-1));}else{LCD_WriteCommand(0x80|(Column-1)+0x40);}LCD_WriteData(Char);
}
補充知識點:字符和字符串
字符:根據一定規則建立的數字到字符的映射(ASCII碼表)
例如:0x21=‘!’.0x41=‘A’.0x00=\0’
定義方法:char x=‘A’:(等效干char x=0x41:)
字符數組:存儲字符變量的一個數組
定義方法:char y[]=f’A’,‘B’,‘C’;(等效于char y[]={0x41,0×42,0×43;)
字符串:在字符數組后加一個字符串結束標志,本質上是字符數組定義方法:char z[]="ABC”;(等效于char z[]=f’A’,‘B’,’C’,\O;)
2.顯示一組字符串
(1)代碼
void LCD_ShowString(unsigned char Line,unsigned char Column,unsigned char String[])
{unsigned char i;LCD_SetCursor(Line,Column);for(i=0;String[i]!='\0';i++){LCD_WriteData(String[i]);}
}
2.顯示數字
(1)無符號代碼
void LCD_ShowNum(unsigned char Line,unsigned char Column,unsigned int Number,unsigned char Length)
{unsigned char i;LCD_SetCursor(Line,Column);for(i=Length;i>0;i--){LCD_WriteData('0'+Number/LCD_Pow(10,i-1)%10);}
}
(2)有符號代碼
void LCD_ShowSignedNum(unsigned char Line,unsigned char Column,int Number,unsigned char Length)
{unsigned char i;unsigned int Number1;LCD_SetCursor(Line,Column);if(Number>=0){LCD_WriteData('+');Number1=Number;}else{LCD_WriteData('-');Number1=-Number;}for(i=Length;i>0;i--){LCD_WriteData('0'+Number1/LCD_Pow(10,i-1)%10);}
}
2.顯示進制
(1)十六進制
void LCD_ShowHexNum(unsigned char Line,unsigned char Column,unsigned int Number,unsigned char Length)
{unsigned char i;unsigned char SingleNumber;LCD_SetCursor(Line,Column);for(i=Length;i>0;i--){SingleNumber=Number/LCD_Pow(16,i-1)%16;if(SingleNumber<10){LCD_WriteData('0'+SingleNumber);}else{LCD_WriteData('A'+SingleNumber-10);}}
}
(1)二進制
void LCD_ShowBinNum(unsigned char Line,unsigned char Column,unsigned int Number,unsigned char Length)
{unsigned char i;LCD_SetCursor(Line,Column);for(i=Length;i>0;i--){LCD_WriteData('0'+Number/LCD_Pow(2,i-1)%2);}
}