#include REGX52.H//引脚定义sbit LCD_RSP2^6;sbit LCD_RWP2^5;sbit LCD_EP2^7;#define LCD_DataPort P0/*** brief LCD1602延时函数12MHz调用可延时1ms* param 无* retval 无*/void LCD_Delay() //12.000MHz 1ms{unsigned char i, j;i 2;j 239;do{while (--j);} while (--i);}/*** brief LCD1602写命令* param Command 要写入的命令* retval 无*/void LCD_WriteCommand(unsigned char Command){LCD_RS0;LCD_RW0;LCD_DataPortCommand;LCD_E1;LCD_Delay();LCD_E0;LCD_Delay();}/*** brief LCD1602写数据* param Data 要写入的数据* retval 无*/void LCD_WriteData(unsigned char Data){LCD_RS1;LCD_RW0;LCD_DataPortData;LCD_E1;LCD_Delay();LCD_E0;LCD_Delay();}/*** brief LCD1602初始化函数* param 无* retval 无*/void LCD_Init(void){LCD_WriteCommand(0x38);LCD_WriteCommand(0x0C);LCD_WriteCommand(0x06);LCD_WriteCommand(0x01);}/*** brief LCD1602设置光标位置* param Line 行位置范围1~2* param Column 列位置范围1~16* retval 无*/void LCD_SetCursor(unsigned char Line,unsigned char Column){if(Line1){LCD_WriteCommand(0x80|(Column-1));}else{LCD_WriteCommand(0x80|(Column-1)0x40);}}/*** brief 在LCD1602指定位置上显示一个字符* param Line 行位置范围1~2* param Column 列位置范围1~16* param Char 要显示的字符* retval 无*/void LCD_ShowChar(unsigned char Line,unsigned char Column,unsigned char Char){LCD_SetCursor(Line,Column);LCD_WriteData(Char);}/*** brief 在LCD1602指定位置开始显示所给字符串* param Line 起始行位置范围1~2* param Column 起始列位置范围1~16* param String 要显示的字符串* retval 无*/void LCD_ShowString(unsigned char Line,unsigned char Column,unsigned char *String){unsigned char i;LCD_SetCursor(Line,Column);for(i0;String[i]!\0;i){LCD_WriteData(String[i]);}}/*** brief 返回值X的Y次方*/int LCD_Pow(int X,int Y){unsigned char i;int Result1;for(i0;iY;i){Result*X;}return Result;}/*** brief 在LCD1602指定位置开始显示所给数字* param Line 起始行位置范围1~2* param Column 起始列位置范围1~16* param Number 要显示的数字范围0~65535* param Length 要显示数字的长度范围1~5* retval 无*/void LCD_ShowNum(unsigned char Line,unsigned char Column,unsigned int Number,unsigned char Length){unsigned char i;LCD_SetCursor(Line,Column);for(iLength;i0;i--){LCD_WriteData(0Number/LCD_Pow(10,i-1)%10);}}/*** brief 在LCD1602指定位置开始以有符号十进制显示所给数字* param Line 起始行位置范围1~2* param Column 起始列位置范围1~16* param Number 要显示的数字范围-32768~32767* param Length 要显示数字的长度范围1~5* retval 无*/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(Number0){LCD_WriteData();Number1Number;}else{LCD_WriteData(-);Number1-Number;}for(iLength;i0;i--){LCD_WriteData(0Number1/LCD_Pow(10,i-1)%10);}}/*** brief 在LCD1602指定位置开始以十六进制显示所给数字* param Line 起始行位置范围1~2* param Column 起始列位置范围1~16* param Number 要显示的数字范围0~0xFFFF* param Length 要显示数字的长度范围1~4* retval 无*/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(iLength;i0;i--){SingleNumberNumber/LCD_Pow(16,i-1)%16;if(SingleNumber10){LCD_WriteData(0SingleNumber);}else{LCD_WriteData(ASingleNumber-10);}}}/*** brief 在LCD1602指定位置开始以二进制显示所给数字* param Line 起始行位置范围1~2* param Column 起始列位置范围1~16* param Number 要显示的数字范围0~1111 1111 1111 1111* param Length 要显示数字的长度范围1~16* retval 无*/void LCD_ShowBinNum(unsigned char Line,unsigned char Column,unsigned int Number,unsigned char Length){unsigned char i;LCD_SetCursor(Line,Column);for(iLength;i0;i--){LCD_WriteData(0Number/LCD_Pow(2,i-1)%2);}}