void WriteDat(unsigned char I2C_Data)//дÊý¾Ý { I2C_WriteByte(0x40, I2C_Data); }
时间: 2023-07-16 20:11:37 浏览: 71
这是一个函数,函数名为WriteDat,参数为一个无符号字符型变量I2C_Data。函数的作用是向I2C设备写入数据。
在函数体内,调用了另一个函数I2C_WriteByte,传入了两个参数0x40和I2C_Data。其中0x40是I2C设备的地址,I2C_Data是要写入的数据。
具体的实现需要看I2C_WriteByte函数的实现细节。
相关问题
请解释下列代码的含义:void writecom(unsigned char com)//写命令 { RS=0; RW=0; E=0; P0=com; delay(2); E=1; E=0; } void writedat(unsigned char dat)//写数据 { RS=1; RW=0; E=0; P0=dat; delay(2); E=1; E=0; }
这段代码是嵌入式系统开发中操作LCD1602液晶显示屏的函数代码。其中,writecom()函数用于向液晶屏写入命令,writedat()函数用于向液晶屏写入数据。
具体含义如下:
- RS:寄存器选择。当RS=0时,液晶屏将接收到的数据看作命令;当RS=1时,液晶屏将接收到的数据看作数据。
- RW:读写选择。当RW=0时,液晶屏将接收到的数据进行写操作;当RW=1时,液晶屏将接收到的数据进行读操作。
- E:使能信号。当E=1时,液晶屏将开始读取数据或者写入数据。
- P0:数据口。将要写入的数据或者命令存入P0口中。
- delay(2):延时函数,延时2毫秒,确保液晶屏已经完成读取或者写入操作。
- E=0:清除使能信号,表示读取或者写入操作已完成。
总的来说,这段代码的作用就是向LCD1602液晶屏写入命令或数据。根据RS、RW、E、P0等参数的不同组合,液晶屏将会执行不同的操作。
解释每行代码#include "REG51.h" sbit RS = P3^0; sbit RW = P3^1; sbit E = P3^2; unsigned char str1[]=("2021213662"); unsigned char str2[]=("13733129016"); unsigned int i=0,j=0; void delay(unsigned int n) //延时函数 { unsigned int i=0,j=0; for(i=0;i<n;i++) { for(j=0;j<120;j++); } } void writedat(unsigned char dat) //写数据函数 { RS=1; RW=0; E=0; P2=dat; delay(5); E=1; E=0; } void writecom(unsigned char com) { RS=0; RW=0; E=0; P2=com; delay(5); E=1; E=0; } void initlcd() { writecom(0x38); writecom(0x0c); writecom(0x06); writecom(0x01); } void display() { unsigned int i=0,j=0; writecom(0x80); for(i=0;i<10;i++) { writecom(0x1c); writedat(str1[i]); delay(50); } writecom(0x80+0x40); for(j=0;j<11;j++) { writecom(0x1c); writedat(str2[j]); delay(50); } } void main() { initlcd(); while(1) { display(); } }
好的,我来为您解释每行代码的含义和作用:
1. `#include "REG51.h"`:包含了51单片机的头文件,用于调用单片机的寄存器和端口等相关信息。
2. `sbit RS = P3^0;`:定义了RS端口为P3的第0位,用于判断是否是写入数据。
3. `sbit RW = P3^1;`:定义了RW端口为P3的第1位,用于判断是读取还是写入数据。
4. `sbit E = P3^2;`:定义了E端口为P3的第2位,用于控制液晶屏的使能。
5. `unsigned char str1[]=("2021213662");`:定义了一个字符串数组str1,存储了一个学号信息。
6. `unsigned char str2[]=("13733129016");`:定义了一个字符串数组str2,存储了一个手机号信息。
7. `unsigned int i=0,j=0;`:定义了两个变量i和j,分别用于循环遍历两个字符串数组。
8. `void delay(unsigned int n)`:定义了一个延时函数,传入一个参数n,用于控制延时的时间。
9. `for(i=0;i<n;i++) { for(j=0;j<120;j++); }`:延时函数中的延时循环,每执行一次,延时大约为1毫秒。
10. `void writedat(unsigned char dat)`:定义了一个写数据函数,传入一个参数dat,用于将数据写入液晶屏中。
11. `RS=1; RW=0; E=0; P2=dat; delay(5); E=1; E=0;`:写数据函数中的具体执行代码,首先将RS置为1,表示要写入数据;将RW置为0,表示要写入数据;将E置为0,表示不进行使能;将P2端口置为要写入的数据;延时5毫秒,然后E置为1再置为0,表示进行一次使能。
12. `void writecom(unsigned char com)`:定义了一个写命令函数,传入一个参数com,用于向液晶屏发送命令。
13. `RS=0; RW=0; E=0; P2=com; delay(5); E=1; E=0;`:写命令函数中的具体执行代码,首先将RS置为0,表示要写入命令;将RW置为0,表示要写入命令;将E置为0,表示不进行使能;将P2端口置为要写入的命令;延时5毫秒,然后E置为1再置为0,表示进行一次使能。
14. `void initlcd()`:定义了一个初始化液晶屏的函数,用于设置液晶屏的初始状态。
15. `writecom(0x38); writecom(0x0c); writecom(0x06); writecom(0x01);`:初始化函数中的具体执行代码,分别表示设置液晶屏为8位数据总线,显示关闭光标,光标右移,清屏。
16. `void display()`:定义了一个显示函数,用于将两个字符串数组在液晶屏上显示出来。
17. `writecom(0x80);`:将光标移动到液晶屏的第一行第一列的位置。
18. `for(i=0;i<10;i++) { writecom(0x1c); writedat(str1[i]); delay(50); }`:循环遍历第一个字符串数组,将每个字符写入液晶屏中。
19. `writecom(0x80+0x40);`:将光标移动到液晶屏的第二行第一列的位置。
20. `for(j=0;j<11;j++) { writecom(0x1c); writedat(str2[j]); delay(50); }`:循环遍历第二个字符串数组,将每个字符写入液晶屏中。
21. `void main() { initlcd(); while(1) { display(); } }`:主函数中的具体执行代码,先进行液晶屏的初始化,然后进入死循环,不断执行显示函数,实现不断刷新液晶屏的效果。
阅读全文