#include #include typedef unsigned char U8; /* defined for unsigned 8-bits integer variable 无符号8位整型变量 */ typedef signed char S8; /* defined for signed 8-bits integer variable 有符号8位整型变量 */ typedef unsigned int U16; /* defined for unsigned 16-bits integer variable 无符号16位整型变量 */ typedef signed int S16; /* defined for signed 16-bits integer variable 有符号16位整型变量 */ typedef unsigned long U32; /* defined for unsigned 32-bits integer variable 无符号32位整型变量 */ typedef signed long S32; /* defined for signed 32-bits integer variable 有符号32位整型变量 */ typedef float F32; /* single precision floating point variable (32bits) 单精度浮点数(32位长度) */ typedef double F64; /* double precision floating point variable (64bits) 双精度浮点数(64位长度) */ ***it LCD_RS = P0^7; ***it LCD_RW = P0^6; ***it LCD_EN = P0^5; ***it LED = P1^0; #define Data P2 #define Data_0_time 4 //独立按键接口 可自行修改 /***************** 函数名称:delay(); 函数功能:粗略延时 ******************/ void delay1(U16 i) { U16 j,k; for(j=i;j>0;j--) for(k=125;k>0;k--); } void DelayUs2x(U8 t) { while(--t); } void DelayMs(U8 t) { while(t--) { //大致延时1mS DelayUs2x(245); DelayUs2x(245); } } void Delay(U16 j) { U8 i; for(;j>0;j--) { for(i=0;i<27;i++); } } void Delay_10us(void) { U8 i; i--; i--; i--; i--; i--; i--; } /***************** 函数名称:bit lcd_busy() 函数功能:检查LCD忙状态 输入值 :无 返回值 : ******************/ bit lcd_busy() { bit result; LCD_RS = 0; LCD_EN = 1; delay1(1); result = (bit)(Data&0x80); LCD_EN = 0; return(result); } /***************** 函数名称:void LCD1602_WriteCmd(unsigned char cmd) 函数功能:写指令数据到LCD 输入值 :指令 返回值 :无 ******************/ void LCD1602_WriteCmd(unsigned char cmd) { LCD_RS = 0; LCD_EN = 0; delay1(1); Data = cmd; delay1(5); LCD_EN = 1; delay1(5); LCD_EN = 0; delay1(10); } /***************** 函数名称:void LCD1602_WriteData(unsigned char dat) 函数功能:写显示数据到LCD 输入值 :数据 返回值 :无 ******************/ void LCD1602_WriteData(U8 dat) { LCD_RS = 1; LCD_EN = 0; Data = dat; delay1(1); LCD_EN = 1; delay1(1); LCD_EN = 0; delay1(10); } /***************** 函数名称:void lcd_init(void) 函数功能:LCD1602初始化函数 输入值 :无 返回值 :无 ******************/ void lcd_init(void) { LCD_RW = 0; delay1(15); LCD1602_WriteCmd(0x01); //清除LCD的显示内容 LCD1602_WriteCmd(0x38); //16*2显示,5*7点阵,8位数据 delay1(5); LCD1602_WriteCmd(0x38); delay1(5); LCD1602_WriteCmd(0x38); delay1(5); LCD1602_WriteCmd(0x0c); //开显示,不显示光标 delay1(5); LCD1602_WriteCmd(0x01); //清除LCD的显示内容 delay1(5); } /***************** 函数名称:void LCD1602_WriteChar(unsigned char x,unsigned char y,unsigned char Dat) 函数功能:写单个字符到指定坐标 输入值 :x:行 (可取0~1) y:列 (可取0~15) Dat:为要显示的数据 返回值 :无 ******************/ void LCD1602_WriteChar(U8 x,U8 y,U8 Dat) { if(x==0) { LCD1602_WriteCmd(0x80+y); LCD1602_WriteData(Dat); delay1(5); } if(x != 0) { LCD1602_WriteCmd(0x80+0x40+y); LCD1602_WriteData(Dat); delay1(5); } } /***************** 函数名称:void LCD1602_WriteChar(unsigned char x,unsigned char y,unsigned char Dat) 函数功能:写字符串到指定坐标 (x,y)为首个字符的显示位置 输入值 :x:行 (可取0~1) y:列 (可取0~15) Dat:为要显示的数据 返回值 :无 ******************/ void LCD1602_WriteString(U8 x,U8 y,U8 *String) { U8 i; for(i=0;String!='\0';i++) { LCD1602_WriteChar(x,y++,String); } } void init(void) { TMOD = 0x20; //定时器T1使用工作方式2 TH1 = 253; // 设置初值 TL1 = 253; TR1 = 1; // 开始计时 SCON = 0x50; //工作方式1,波特率9600bps,允许接收 ES = 1; EA = 1; // 打开所以中断 } void main(void) { int a; lcd_init(); init(); while (1) { LCD1602_WriteString(0,0,"GangBanHou:"); LCD1602_WriteString(1,3,"mm"); LCD1602_WriteChar(1,0,'f'); a++; DelayMs(500); LCD1602_WriteChar(1,1,a+'0'); } } |
更多回帖