| //==========================================================================
			
				// 项目:LCD1602 四线驱动程序
			
				// 设计要点:
			
				//     LCD1602 的运行速度慢,而单片机运行的速度快,因此容易因为速度不
			
				//     匹配造成调试失败。因此,调试之前应准确测试lcd_delay() 延时函数
			
				//     准确的延时量,如果不能满足注释中的要求,则应调整循次数。每步操
			
				//     作所需的延时量,按照数据手册指标指行,同时留下足够的时间余量。
			
				// 硬件连接:
			
				//     至少需要9条线,电源线2条,7条信号线。信号线详见程序中的接口定义。
			
				//     清注意对LCD1602比对的调节,否则无显示。
			
				// 设计:许剑伟,于莆田,2010.12
			
				//==========================================================================
			
				sbit lcd_RS = P0^1; //数据命令控制位,0命令1数据
			
				sbit lcd_RW = P0^2; //读写位,0写1读
			
				sbit lcd_EN = P0^3; //使能位,下降沿触发
			
				sbit lcd_D4 = P0^7; //数据端口D4
			
				sbit lcd_D5 = P0^6; //数据端口D5
			
				sbit lcd_D6 = P0^5; //数据端口D6
			
				sbit lcd_D7 = P0^4; //数据端口D7
			
				//==========================================================================
			
				void lcd_delay(int n){ //LCD专用延时函数
			
				  //32MHz钟频下,约循环3000次延迟1毫秒
			
				  int i,j;
			
				  if(n<0)    { for(i=0;i< 20;i++); return; } //10us
			
				  if(n== 0)  { for(i=0;i<100;i++); return; } //50us
			
				  for(;n;n--){ for(j=0;j<2000;j++);        } //n毫秒
			
				}
			
				//==========================================================================
			
				void lcd_B(char f, uchar c, char t){ //控制四线式接口LCD的7个脚
			
				  //f=0写命令字, f=1写RAM数据, f=2读地址(或读忙), f=3读RAM数据
			
				  lcd_EN = 0;
			
				  lcd_RS = f%2;
			
				  lcd_RW = f/2%2;
			
				  //移入高四位
			
				  lcd_D4 = c & 16;
			
				  lcd_D5 = c & 32;
			
				  lcd_D6 = c & 64;
			
				  lcd_D7 = c & 128;
			
				  lcd_EN = 1;  lcd_delay(-1);  lcd_EN = 0; //使能脉冲
			
				  if(f==4) { lcd_delay(t); return; }
			
				  //移入低四位
			
				  lcd_D4 = c & 1;
			
				  lcd_D5 = c & 2;
			
				  lcd_D6 = c & 4;
			
				  lcd_D7 = c & 8;
			
				  lcd_EN = 1;  lcd_delay(-1);  lcd_EN = 0; //使能脉冲
			
				  lcd_delay(t);  //不同的命令,响应时间不同,清零命令需要2ms
			
				}
			
				//==========================================================================
			
				void lcd_init(){ //LCD1602 初始化
			
				  //启动四线模式须势行9个步骤,初始化所须耗时较长,约65ms,时限不可减
			
				  lcd_delay(20); //启动lcd之前须延时大于15ms,直到VDD大于4.5V
			
				  lcd_B(4, 0x30, 9); //置8线模式,须延时大于4.1ms
			
				  lcd_B(4, 0x30, 5); //置8线模式,须延时大于100us
			
				  lcd_B(4, 0x30, 5); //置8线模式,手册中未指定延时
			
				  lcd_B(4, 0x20, 5); //进入四线模式
			
				  lcd_B(0, 0x28, 5); //四线模式双行显示
			
				  lcd_B(0, 0x0C, 5); //打开显示器
			
				  lcd_B(0, 0x80, 5); //RAM指针定位
			
				  lcd_B(0, 0x01, 5); //启动清屏命初始化LCD
			
				}
			
				//==========================================================================  (责任编辑:admin) |