1、1602是干什么的? 显示用的要显示什么? 这时候你就得将定义一个数组,将想显示的东西放上去,那么到底是用双引号还是用{}呢?这里用uchar code dis1[]="I LOVE ZERO";如果这个不懂是时候该去补补C语言了也可以用uchar code dis1[]={I LOVE ZERO};
2、已经有数组了,那么如何送入LCD显示?在main()里写 for(i=0;i<11;i++) //有x个字符 i就<x ,不然会乱码 {//你要将这个数据显示到LCD1602的第几行呢?所以前面得加wcmd(0x80); wdat(dis1[i]); }上面有个将数据送入1602 也就是写数据到LCD1602,如果这里不会的话?那也就是LCD1602写数据时序没看懂,这时候就得去寻找资料,这时候你需要写个写数据的子程序了void wdat(uchar dat){ //对应这时序图写,如果看不懂时序图就需要去深入了解根据时序图写程序了 rs=1; rw=0; ep=0; P0=dat; //将LCD的D0-D7与P0相接 ms(1); ep=1; ep=0; ms(6); //不加延时, 字符显示过快 无法看见光标闪烁等。。。。}这里补出程序但是为什么要这样写呢?就算看了时序图也不懂如何转化为程序?说明你理解的不够透。在上面用了rs,rw,ep 那就需要写sbit rs = P2^6; //复位端sbit rw = P2^5; //写数据端 rw可以硬件置0sbit ep = P2^7; //使能端也用了局部变量i 和j uchar i,j;这里用了uchar就要定义#define uchar unsigned char
3、这样是否就可以用了么?你看写数据都弄好了! 不行,因为单片机不知道你将数据送到哪,也就是你得让单片机知道你用1602 也就是LCD初始化 wcmd(0x01); //清屏 16*2显示,5*7点阵,8位数据 wcmd(0x06); //光标右滚动 wcmd(0x0c); wcmd(0x38); //数据8位 双行显示 5*10点 wcmd(0x0f); //显示光标,字符闪烁 0x0e显示关标,字符不闪烁 ox08都不显示这里不会,你就得看指令表了这时候你需要写个写命令的子程序了void wcmd(uchar cmd){ rs=0; rw=0; ep=0; P0 = cmd; ep=1; ep=0; ms(10);}
4、现在一切都好了?不 你看 还漏了什么 ms();也就是延时函数 也就是需要延时函数的子程序