为什么不直接出个新版讲解单片机视频呢,主页推荐的郭天祥的视频第一模糊,第二视频播放速度和声音速度延迟8S左右,虽然我可以通过下载视频通过软件吧延迟拟补回来但是真的太麻烦了,而且郭视频也需要新一代更新更新呀 |
学习内容越来越难了,努力中 |
液晶屏“读数据”操作,应该是R/W = H吧? |
最近在学指针,非常棒的文章。因为读的比较仔细,所以看到流水灯例程时发现个小错误,应该是P1=~buf |
指针的使用最为灵活也最麻烦,这降解真心好,理解好的画用的非常好 |
绝世好贴! |
耐心学习!谢谢楼主 |
仔细看了这篇教程 我也在开发板上试了 是存在问题的 就是 字符的 重复显示 我改了一下 现在 编译通过且成功 特地分享 /*问题 1602重复显示*/ #include<reg52.h> #define LCD1602_DB P0 //1602 IO口 sbit LCD1602_RD=P1^2; // 数据命令选择端 H DATA L CMD sbit LCD1602_RW=P1^3; // 读写端 H READ L WRITE sbit LCD1602_E=P1^4; // 使能 void readbusy(); //判忙 1忙 0空 void write_data(unsigned char dat); void write_cmd(unsigned char cmd); void LCD1602_INIT(); unsigned char code word1[]={"cjb study 1602"}; void LCDShowstr(unsigned char addr_start,unsigned char *p); //x y表示坐标 p表示指针变量 即数组word的首地址 void main() { LCD1602_INIT(); LCDShowstr(0x80,word1); while(1){} } void LCD1602_INIT() //1602INIT { write_cmd(0x38); //显示模式设置 1602 固定命令 write_cmd(0x0c); //开显示器 关闭光标 0000 1DCB D=1开显示 C=1显示光标 B=1 光标闪烁 write_cmd(0x06); //文字不动 地址自动加1 0000 01NS N=1 写入一个字符后 地址自动加1 S=0 写入一个字符 整屏不移动 write_cmd(0x01); //清屏 } /*1602每次的写入都要确保其处于不忙的状态 状态字的最高位D7代表其是否忙碌1 禁止写入 0 应许写入*/ void readbusy() { unsigned char sta; LCD1602_DB=0XFF; //P0置位,判断D7是不是1602拉低的 LCD1602_RD=0; LCD1602_RW=1; //读D7状态 RD RW 不能写错 do{ LCD1602_E=1; //使能 sta=LCD1602_DB; }while(sta&0x80); //等到sta 首位为0 时 退出循环 此时1602处于空闲状态 LCD1602_E=0; //读完了关闭使能 液晶输出数据对总线的干扰 } void write_data(unsigned char dat) //写数据 { readbusy(); LCD1602_RD=1; //参考时序图 LCD1602_RW=0; LCD1602_DB=dat; LCD1602_E=1; LCD1602_E=0; } void write_cmd(unsigned char cmd) //写命令 { readbusy(); LCD1602_RD=0; //参考时序图 LCD1602_RW=0; LCD1602_DB=cmd; LCD1602_E=1; LCD1602_E=0; } void LCDShowstr(unsigned char addr_start,unsigned char *p) { write_cmd(addr_start); while(*p!='\0') { write_data(*p++); } } 至于问题出在哪里 我认为 是坐标哪里有问题 希望大神求解 |
真的写得很好,很适合初学者。 |
讲的很详细透彻 |
挺好挺好,学会了不少东西 |