1、学习三极管的使用( 三 )


tC:指的是使能引脚 E 从本次上升沿到下次上升沿的最短时间是 400ns , 而我们单片机因为速度较慢 , 一个机器周期就是 1us 多 , 而一条 C 语言指令肯定是一个或者几个机器周期的 , 所以这个条件完全满足 。
tPW:指的是使能引脚 E 高电平的持续时间最短是 150ns , 同样由于我们的单片机比较慢 , 这个条件也完全满足 。
tR, tF:指的是使能引脚 E 的上升沿时间和下降沿时间 , 不能超过 25ns , 别看这个数很小 , 其实这个时间限值是很宽裕的 , 我们实际用示波器测了一下开发板的这个引脚上升沿和下降沿时间大概是 10ns 到 15ns 之间 , 完全满足 。
tSP1:指的是 RS 和 R/W 引脚使能后至少保持 30ns , 使能引脚 E 才可以变成高电平 , 这个条件同样也完全满足 。
tHD1:指的是使能引脚 E 变成低电平后 , 至少保持 10ns 之后 , RS 和 R/W 才能进行变化 , 这个条件也完全满足 。
tD:指的是使能引脚 E 变成高电平后 , 最多 100ns 后 , 1602 就把数据送出来了 , 那么我们就可以正常去读取状态或者数据了 。
tHD2:指的是读操作过程中 , 使能引脚 E 变成低电平后 , 至少保持 20ns , DB 数据总线才可以进行变化 , 这个条件也完全满足 。
tSP2:指的是 DB 数据总线准备好后 , 至少保持 40ns , 使能引脚 E 才可以从低到高进行使能变化 , 这个条件也完全满足 。
tHD2:指的是写操作过程中 , 要引脚 E 变成低电平后 , 至少保持 10ns , DB 数据总线才可以变化 , 这个条件也完全满足 。
驱动代码:
/* 向液晶写入一字节命令 , cmd-待写入命令值 */
void ( char cmd)
();
= 0;
= 0;
= cmd;
= 1;
= 0;
/* 向液晶写入一字节数据 , dat-待写入数据值 */
void ( char dat)
();
= 1;
= 0;
= dat;
= 1;
= 0;
8、单片机IIC通信学习
I2C 总线是由时钟总线 SCL 和数据总线 SDA 两条线构成 , 连接到总线上的所有器件的 SCL 都连到一起 , 所有 SDA 都连到一起 。I2C 总线是开漏引脚并联的结构 , 因此要添加上拉电阻 。对于开漏电路外部加上拉电阻 , 就组成了线“与”的关系 。总线上线“与”的关系就是说 , 所有接入的器件保持高电平 , 这条线才是高电平 , 而任何一个器件输出一个低电平 , 那这条线就会保持低电平 , 因此可以做到任何一个器件都可以拉低电平 , 也就是任何一个器件都可以作为主机 , 
IIC位时序:先发送起始信号:在保证SCL和SDA都是高电平的情况下 , SDA产生一个下降沿 。IIC通信和UART通信相反 , 是先发送高位 。SDA数据线在SCL处于低电平时由发送方操作 , 在SCL处于高电平时 , 接收方会来读取SDA 。停止信号:在保证SCL和SDA都是低电平后 , 先给SCL一个上升沿 , 再给SDA一个上升沿 。
IIC字节时序:要完成完整IIC通讯 , 主机先在总线上发送起始信号 , 然后要先发送一个从机地址 , 从机地址只有7位 , 发完7位之后需要紧接着发一位读写位 , 0表示要发数据 , 1表示要读数据 。在从机接收完8位后 , 主机再将SCL拉低 , 并把SDA拉高 , (可理解为发送第9位0) , 再接着将SCL拉高 , 然后检测SDA的状态 , 如果SDA还为高 , 那么从机没有响应 , 若SDA为低 , 则从机发来了响应 。