完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
一、 学习要点(串行多总线类外设):
1、 正确分析时序图; 2、 多总线(多条数据线区别于DHT11这类单总线控制线不算)操作的传感器,要区单总线的传感器DHT11等,单总线时位操作的而“多总线”是字节操作的,不用8次for循环处理数据; 3、 判忙函数中,检测P0^7引脚时要提前赋值P0=0XFF,因为51单片机检测高电平时,首先要给检测的引脚赋值高电平; 4、 操作时序既要遵循也要适时的加入小延时等待机器响应。 二、手册分析 二、手册分析 1、结构块图 2、引脚功能图 3、写操作时序: 4、读操作时序 5、指令寄存器(IR)和数据寄存器(DR):(图2-5) 模块内部具有两个 8 位寄存器:指令寄存器(IR)和数据寄存器(DR)。用户可以通过 RS 和 R/W 输入信号的组合选择指定的寄存器,进行相应的操作。下表中列出了组合选择方式:(手册有误,已更正) 6、 忙标志位 BF:忙标志 BF=1 时,表明模块正在进行内部操作,此时不接受任何外部指令和数据。当 RS=0、R/W=1 以及 E 为高电平时,BF 输出到 DB7。每次操作之前最好先进行状态字检测,只有在确认 BF=0 之后,MPU 才能访问模块 7、显示数据寄存器:DDRAM 地址与 LCD 显示屏上的显示位置的对应关系如:执行显示移位操作时,对应的 DDRAM 地址也发生移位,每行 16 个字符的显示,共有 2 行。移位前的地址对应关系。 8、指令说明: 3、设置输入模式: 三:编程 1、程序效果: 2、程序.c文件 #include “LCD1602.h” #include “string.h” void InspectBusyFlag( ) ; void Delayxms(unsigned int t) //@11.0592MHz { unsigned char i, j; unsigned int x; for(x=0;x { nop(); i = 4; j = 146; do { while (–j); } while (–i); } } void Wr_OneByte2Lcd1602(char DatorCmd,char val) { InspectBusyFlag( ); Delayxms(1); RS = DatorCmd; //0、指令寄存器 1、数据寄存器 RW = 0; //0读操作、1写操作 EN = 1; P0 = val; nop();nop();nop(); EN = 0; Delayxms(1); } void Rd_OneByte2Lcd1602(char DatorCmd,char val) { EN = 0; RS = DatorCmd; //0、指令寄存器 1、数据寄存器 RW = 0; //0读操作、1写操作 EN = 1; nop(); P0 = val; } void InspectBusyFlag( ) //检查忙标志位,BF=1表示正在忙碌中 { P0 = 0xff; RS = 0; RW = 1; EN = 1; Delayxms(1); while (0x80&P0); EN = 0; } void LCD1602_Init(void) { Wr_OneByte2Lcd1602(CMD,0x38); Delayxms(5); Wr_OneByte2Lcd1602(CMD,0x38); Wr_OneByte2Lcd1602(CMD,0x01); Wr_OneByte2Lcd1602(CMD,0x06); Delayxms(5); Wr_OneByte2Lcd1602(CMD,0x0C); } void Display_CharOnLcd(unsigned char x,unsigned char y,char val) { if( 0==y ) { Wr_OneByte2Lcd1602(CMD,0x80 + x); } else { Wr_OneByte2Lcd1602(CMD,0xC0 + x); } Wr_OneByte2Lcd1602(DAT,val); } void Display_StrOnLcd1602(unsigned char x,unsigned char y,char p) { char num,i; num = strlen§; for(i=0;i Delayxms(2); Display_CharOnLcd(x+i,y,(p+i)) ; } } |
|
|
|
只有小组成员才能发言,加入小组>>
3278 浏览 9 评论
2955 浏览 16 评论
3455 浏览 1 评论
8987 浏览 16 评论
4050 浏览 18 评论
1102浏览 3评论
570浏览 2评论
const uint16_t Tab[10]={0}; const uint16_t *p; p = Tab;//报错是怎么回事?
568浏览 2评论
用NUC131单片机UART3作为打印口,但printf没有输出东西是什么原因?
2301浏览 2评论
NUC980DK61YC启动随机性出现Err-DDR是为什么?
1857浏览 2评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-21 23:37 , Processed in 0.622785 second(s), Total 76, Slave 56 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号