>_<:引脚的连接方式
>_<:下面是对其各个引脚进行说明:
reg52.h 一般自带直接引用就含有这个文件啦
intrins.h 一般自带
1 /*----------------------------------------------- 2 名称:LCD1602 3 论坛:www.doflye.net 4 编写:shifang 5 内容:通过标准程序静态显示字符 6 引脚定义如下:1-VSS 2-VDD 3-V0 4-RS 5-R/W 6-E 7-14 DB0-DB7 15-BLA 16-BLK 7 ------------------------------------------------*/ 8 #include<reg52.h> //包含头文件,一般情况不需要改动,头文件包含特殊功能寄存器的定义 9 #include<intrins.h> 10 11 sbit RS = P2^4; //定义端口 12 sbit RW = P2^5; 13 sbit EN = P2^6; 14 15 #define RS_CLR RS=0 16 #define RS_SET RS=1 17 18 #define RW_CLR RW=0 19 #define RW_SET RW=1 20 21 #define EN_CLR EN=0 22 #define EN_SET EN=1 23 24 #define DataPort P0 25 /*------------------------------------------------ 26 uS延时函数,含有输入参数 unsigned char t,无返回值 27 unsigned char 是定义无符号字符变量,其值的范围是 28 0~255 这里使用晶振12M,精确延时请使用汇编,大致延时 29 长度如下 T=tx2+5 uS 30 ------------------------------------------------*/ 31 void DelayUs2x(unsigned char t) 32 { 33 while(--t); 34 } 35 /*------------------------------------------------ 36 mS延时函数,含有输入参数 unsigned char t,无返回值 37 unsigned char 是定义无符号字符变量,其值的范围是 38 0~255 这里使用晶振12M,精确延时请使用汇编 39 ------------------------------------------------*/ 40 void DelayMs(unsigned char t) 41 { 42 while(t--) 43 { 44 //大致延时1mS 45 DelayUs2x(245); 46 DelayUs2x(245); 47 } 48 } 49 /*------------------------------------------------ 50 判忙函数 51 ------------------------------------------------*/ 52 bit LCD_Check_Busy(void) 53 { 54 DataPort= 0xFF; 55 RS_CLR; 56 RW_SET; 57 EN_CLR; 58 _nop_(); 59 EN_SET; 60 return (bit)(DataPort & 0x80); 61 } 62 /*------------------------------------------------ 63 写入命令函数 64 ------------------------------------------------*/ 65 void LCD_Write_Com(unsigned char com) 66 { 67 // while(LCD_Check_Busy()); //忙则等待 68 DelayMs(5); 69 RS_CLR; 70 RW_CLR; 71 EN_SET; 72 DataPort= com; 73 _nop_(); 74 EN_CLR; 75 } 76 /*------------------------------------------------ 77 写入数据函数 78 ------------------------------------------------*/ 79 void LCD_Write_Data(unsigned char Data) 80 { 81 //while(LCD_Check_Busy()); //忙则等待 82 DelayMs(5); 83 RS_SET; 84 RW_CLR; 85 EN_SET; 86 DataPort= Data; 87 _nop_(); 88 EN_CLR; 89 } 90 91 /*------------------------------------------------ 92 清屏函数 93 ------------------------------------------------*/ 94 void LCD_Clear(void) 95 { 96 LCD_Write_Com(0x01); 97 DelayMs(5); 98 } 99 /*------------------------------------------------ 100 写入字符串函数 101 ------------------------------------------------*/ 102 void LCD_Write_String(unsigned char x,unsigned char y,unsigned char *s) 103 { 104 if (y == 0) 105 { 106 LCD_Write_Com(0x80 + x); //表示第一行 107 } 108 else 109 { 110 LCD_Write_Com(0xC0 + x); //表示第二行 111 } 112 while (*s) 113 { 114 LCD_Write_Data( *s); 115 s ++; 116 } 117 } 118 /*------------------------------------------------ 119 写入字符函数 120 ------------------------------------------------*/ 121 void LCD_Write_Char(unsigned char x,unsigned char y,unsigned char Data) 122 { 123 if (y == 0) 124 { 125 LCD_Write_Com(0x80 + x); 126 } 127 else 128 { 129 LCD_Write_Com(0xC0 + x); 130 } 131 LCD_Write_Data( Data); 132 } 133 /*------------------------------------------------ 134 初始化函数 135 ------------------------------------------------*/ 136 void LCD_Init(void) 137 { 138 LCD_Write_Com(0x38); /*显示模式设置*/ 139 DelayMs(5); 140 LCD_Write_Com(0x38); 141 DelayMs(5); 142 LCD_Write_Com(0x38); 143 DelayMs(5); 144 LCD_Write_Com(0x38); 145 LCD_Write_Com(0x08); /*显示关闭*/ 146 LCD_Write_Com(0x01); /*显示清屏*/ 147 LCD_Write_Com(0x06); /*显示光标移动设置*/ 148 DelayMs(5); 149 LCD_Write_Com(0x0C); /*显示开及光标设置*/ 150 } 151 152 /*------------------------------------------------ 153 主函数[上面已经把显示功能封装好了,今后再写其他显示就直接调用] 154 ------------------------------------------------*/ 155 void main(void) 156 { 157 LCD_Init(); 158 LCD_Clear();//清屏 159 while (1) 160 { 161 LCD_Write_Char(7,0,'o'); 162 LCD_Write_Char(8,0,'k'); 163 LCD_Write_String(1,1,"www.doflye.net"); 164 while(1); 165 } 166 }