解释每行代码#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(); } }
时间: 2024-04-28 21:22:17 浏览: 99
好的,我来为您解释每行代码的含义和作用:
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(); } }`:主函数中的具体执行代码,先进行液晶屏的初始化,然后进入死循环,不断执行显示函数,实现不断刷新液晶屏的效果。
阅读全文