两天没有写了,原因有二:1.嵌入式课程开始了;2。被i²c总线难住了;
对于i²c总线来说,不适合先学,因为看不懂时序图,所以先学LCD1602;
—————————————————————————————————————————————
LCD1602点亮显示
1602 液晶一共 16 个引脚
1602引脚tu
LCD时序图:
LCD时序图
时序要求时间
对LCD1602 点亮操作步骤
1.初始化:
包括初始化设定使能信号位低电平,对于R/W的选择,对于 RS的初始化
2.写命令:给定起始地址,设置显示坐标
3.写数据:RS=H;
LCD几个指令:
1.开启显示,固定0x38;
点亮LCD程序:
主函数
#include <reg51.h>
#include <lcd.h>
//1.initialize 2.write commond 3.write data
char Dis []="this is lcd1602";
int main()
{
int i;
LCD_inti(); //initialize
for(i=0;i<16;i++)
{
LCD_writedata(Dis[i]);//write data
}
while(1);
return 0;
}
LCD1602函数:
#include<reg51.h>
#include "lcd.h"
void dalay1ms(int c)//delay function;0ms error
{
int a,b;
for (; c>0; c--)
{
for (b=199;b>0;b--)
{
for(a=1;a>0;a--);
}
}
}
void LCD_writecom(char com) //write commod
{
LCD1602_E=0;//使能E,开始时拉低
LCD1602_RS=0;//先择命令模式
LCD1602_RW=0;//选择写模式
Write_nu=com;//写的内容为调用时的实参
dalay1ms(1);//tsp2:数据建立时间
LCD1602_E=1;//拉高使能,进入vilia data;
dalay1ms(5);//tpw,脉冲宽度,保持高电平
LCD1602_E=0;//发送完,拉低
}
void LCD_writedata(char dat)
{
LCD1602_E=0;
LCD1602_RS=1;
LCD1602_RW=0;
Write_nu=dat;//传入调用时的实参dat
dalay1ms(1);
LCD1602_E=1;
dalay1ms(5);
LCD1602_E=0;
}
void LCD_inti()
{
LCD_writecom(0x38);//固定模式0x38会打开显示屏
LCD_writecom(0X0C);//打开显示,设置光标闪烁等其他显示
LCD_writecom(0x06);//每次写一个数据,指针加1;
LCD_writecom(0x01);//清屏幕,准备写入
LCD_writecom(0x85);//设置起始地址
}
lcd 的头文件
#include<reg51.h>
#define Write_nu P0
sbit LCD1602_E = P2^7;
sbit LCD1602_RW = P2^5;
sbit LCD1602_RS = P2^6;
void dalay1ms(int c);
void LCD_inti();
void LCD_writecom(char com);
void LCD_writedata(char dat);
—————————————————————————————————————————————
实现LCD 滚动效果:
网友评论