1、学习单片机学习单片机 /实例实例 1:用单片机控制第一个灯亮用单片机控制第一个灯亮 #include /包含 51 单片机寄存器定义的头文件 void main(void) P1=0xfe; /P1=1111 1110B,即 P1.0 输出低电平 /实例实例 2:用单片机控制一个灯闪烁:认识单片机的工作频率:用单片机控制一个灯闪烁:认识单片机的工作频率 #include /包含单片机寄存器的头文件 / 函数功能:延时一段时间 / void de
2、lay(void) /两个 void 意思分别为无需返回值,没有参数传递 unsigned int i; /定义无符号整数,最大取值范围 65535 for(i=0;i0)/将逻辑运算结果送 P0 口 while(1) ; /设置无限循环,防止程序“跑飞” /实例实例 14:用:用 P0 口显示条件运算结果口显示条件运算结果 #include /包含单片机寄存器的头文件 void main(void) P0=(84)?8:4;/将条件运算结果送 P0 口,P0=8=0000 1000B while(1)
3、; /设置无限循环,防止程序“跑飞” /实例实例 15:用:用 P0 口显示按位口显示按位“异或异或“运算结果运算结果 #include /包含单片机寄存器的头文件 void main(void) P0=0xa20x3c;/将条件运算结果送 P0 口,P0=8=0000 1000B while(1) ; /设置无限循环,防止程序“跑飞” /实例实例 16:用:用 P0 显示左移运算结果显示左移运算结果 #include /包含单片机寄存器的头文件 void main(void) P0=0x3b1; /每次循
4、环 P1 的各二进位右移 1 位,高位补 0 delay(); /调用延时函数 /实例实例 19:用:用 if 语句控制语句控制 P0 口口 8 位位 LED 的流水方向的流水方向 #include /包含单片机寄存器的头文件 sbit S1=P14; /将 S1 位定义为 P1.4 sbit S2=P15; /将 S2 位定义为 P1.5 / 函数功能:主函数 / void main(void) while(1) if(S1=0)
5、 /如果按键 S1 按下 P0=0x0f; /P0 口高四位 LED 点亮 if(S2=0) /如果按键 S2 按下 P0=0xf0; /P0 口低四位 LED 点亮 /实例实例 20:用:用 swtich 语句的控制语句的控制 P0 口口 8 位位 LED 的点亮状态的点亮状态 #include /包含单片机寄存器的头文件 sbit S1=P14; /将 S1 位定义为 P1.4 / 函数功能:延时一段时间 / void
6、 delay(void) unsigned int n; for(n=0;n80 /如果字符串 100 大于 80 P3=0xf0; /P3 口低四位 LED 点亮 #else P3=0x0f; /否则,P3 口高四位 LED 点亮 #endif /结束本次编译 / 中断、定时器中断、定时器 &nbs
7、p;中断、定时器中断、定时器 中断、定时器中断、定时器 中断、定时器中断、定时器 / /实例实例 42:用定时器:用定时器 T0 查询方式查询方式 P2 口口 8 位控制位控制 LED 闪烁闪烁 #include
8、/ 包含 51 单片机寄存器定义的头文件 / 函数功能:主函数 / void main(void) / EA=1; /开总中断 / ET0=1; /定时器 T0 中断允许 TMOD=0x01; &n
9、bsp;/使用定时器 T0 的模式 1 TH0=(65536-46083)/256; /定时器 T0 的高 8 位赋初值 TL0=(65536-46083)%256; /定时器 T0 的高 8 位赋初值 TR0=1; /启动定时器 T0 TF0=0; P2=0xff; while(1)/无限循环等待查询 while(TF0=0) ; TF0=0; P2=P2; TH0=(65536-46083)/256; /定时器 T0 的高 8 位赋初值 TL0=(65536-46083)%256; /定时器 T0 的高 8 位赋初值 /实例实例 43:
10、用定时器:用定时器 T1 查询方式控制单片机发出查询方式控制单片机发出 1KHz 音频音频 #include / 包含 51 单片机寄存器定义的头文件 sbit sound=P37; /将 sound 位定义为 P3.7 引脚 / 函数功能:主函数 / void main(void) / EA=1;  
11、; /开总中断 / ET0=1; /定时器 T0 中断允许 TMOD=0x10; /使用定时器 T1 的模式 1 TH1=(65536-921)/256; /定时器 T1 的高 8 位赋初值 TL1=(65536-921)%256; /定时器 T1 的高 8 位赋初值 TR1=1; /启动定时器 T1 TF1=0; while(1)/无限循环等待查询 while(TF1=0) ; TF1=0;
12、 sound=sound; /将 P3.7 引脚输出电平取反 TH1=(65536-921)/256; /定时器 T0 的高 8 位赋初值 TL1=(65536-921)%256; /定时器 T0 的高 8 位赋初值 /实例实例 44:将计数器:将计数器 T0 计数的结果送计数的结果送 P1 口口 8 位位 LED 显示显示 #include / 包含 51 单片机寄存器定义的头文件 sbit S=P34; /将 S 位定义为 P3.4 引脚 /
13、 函数功能:主函数 / void main(void) / EA=1; /开总中断 / ET0=1; /定时器 T0 中断允许 TMOD=0x02; /使用定时器 T0 的模式 2 TH0=256-156; /定时器 T0 的高 8 位赋初值 TL0=256-156; /定时器 T0 的高 8 位
14、赋初值 TR0=1; /启动定时器 T0 while(1)/无限循环等待查询 while(TF0=0) /如果未计满就等待 if(S=0) /按键 S 按下接地,电平为 0 P1=TL0; /计数器 TL0 加 1 后送 P1 口显示 TF0=0; /计数器溢出后,将 TF0 清 0 /实例实例 45:用定时器:用定时器 T0 的中断控制的中断控制 1 位位 LED 闪烁闪烁 #include / 包含 51 单片机寄存器定义的头文件 sbit D1=P20; /将 D1 位定义为 P2.0 引脚 /
15、 函数功能:主函数 / void main(void) EA=1; /开总中断 ET0=1; /定时器 T0 中断允许 TMOD=0x01; /使用定时器 T0 的模式 2 TH0=(65536-46083)/2
16、56; /定时器 T0 的高 8 位赋初值 TL0=(65536-46083)%256; /定时器 T0 的高 8 位赋初值 TR0=1; /启动定时器 T0 while(1)/无限循环等待中断 ; / 函数功能:定时器 T0 的中断服务程序 / void Time0(void) interrupt 1 using 0
17、/“interrupt”声明函数为中断服务函数 /其后的 1 为定时器 T0 的中断编号;0 表示使用第 0 组工作 寄存器 D1=D1; /按位取反操作,将 P2.0 引脚输出电平取反 TH0=(65536-46083)/256; /定时器 T0 的高 8 位重新赋初值 TL0=(65536-46083)%256; /定时器 T0 的高 8 位重新赋初值 /实例实例 46:用定时器:用定时器 T0 的中断实现长时间定时的中断实现长时间定时 #include / 包含 51 单片机寄存器定义的头文件 sbit D1=P20; /将 D1 位定义为 P2.0 引脚 unsigned
18、 char Countor; /设置全局变量,储存定时器 T0 中断次数 / 函数功能:主函数 / void main(void) EA=1; /开总中断 ET0=1; /定时器 T0 中断允许 TMOD=0x01; &nbs
19、p; /使用定时器 T0 的模式 2 TH0=(65536-46083)/256; /定时器 T0 的高 8 位赋初值 TL0=(65536-46083)%256; /定时器 T0 的高 8 位赋初值 TR0=1; /启动定时器 T0 Countor=0; /从 0 开始累计中断次数 while(1)/无限循环等待中断 ; / &nb
20、sp; 函数功能:定时器 T0 的中断服务程序 / void Time0(void) interrupt 1 using 0 /“interrupt”声明函数为中断服务函数 /其后的 1 为定时器 T0 的中断编号;0 表示使用第 0 组工作 寄存器 Countor+; /中断次数自加 1 if(Countor=20) /若累计满 20 次,即计时满 1s D1=D1; /按位取反操作,将 P2.0 引脚输出电平取反 Countor=0; /将 Countor 清 0,重新从 0 开始计
21、数 TH0=(65536-46083)/256; /定时器 T0 的高 8 位重新赋初值 TL0=(65536-46083)%256; /定时器 T0 的高 8 位重新赋初值 /实例实例 47:用定时器:用定时器 T1 中断控制两个中断控制两个 LED 以不同周期闪烁以不同周期闪烁 #include / 包含 51 单片机寄存器定义的头文件 sbit D1=P20; /将 D1 位定义为 P2.0 引脚 sbit D2=P21; /将 D2 位定义为 P2.1 引脚 unsigned char Countor1; /设置全局变量,储存定时器 T1 中断次数 unsigned char Coun
22、tor2; /设置全局变量,储存定时器 T1 中断次数 / 函数功能:主函数 / void main(void) EA=1; /开总中断 ET1=1; /定时器 T1 中断允许 TMOD=0x10;
23、 /使用定时器 T1 的模式 1 TH1=(65536-46083)/256; /定时器 T1 的高 8 位赋初值 TL1=(65536-46083)%256; /定时器 T1 的高 8 位赋初值 TR1=1; /启动定时器 T1 Countor1=0; /从 0 开始累计中断次数 Countor2=0; /从 0 开始累计中断次数 while(1)/无限循环等待中断 ; / &
24、nbsp; 函数功能:定时器 T1 的中断服务程序 / void Time1(void) interrupt 3 using 0 /“interrupt”声明函数为中断服务函数 /其后的 3 为定时器 T1 的中断编号;0 表示使用第 0 组工作 寄存器 Countor1+; /Countor1 自加 1 Countor2+; /Countor2 自加 1 if(Countor1=2) /若累计满 2 次,
25、即计时满 100ms D1=D1; /按位取反操作,将 P2.0 引脚输出电平取反 Countor1=0; /将 Countor1 清 0,重新从 0 开始计数 if(Countor2=8) /若累计满 8 次,即计时满 400ms D2=D2; /按位取反操作,将 P2.1 引脚输出电平取反 Countor2=0; /将 Countor1 清 0,重新从 0 开始计数 TH1=(65536-46083)/256; /定时器 T1 的高 8 位重新赋初值 TL1=(65536-46083)%256; /定时器 T1 的高 8 位重新赋初值 /实例实例 4
26、8:用计数器:用计数器 T1 的中断控制蜂鸣器发出的中断控制蜂鸣器发出 1KHz 音频音频 #include / 包含 51 单片机寄存器定义的头文件 sbit sound=P37; /将 sound 位定义为 P3.7 引脚 / 函数功能:主函数 / void main(void) EA=1; /开总中断 ET1=1;
27、 /定时器 T1 中断允许 TMOD=0x10; /TMOD=0001 000B,使用定时器 T1 的模式 1 TH1=(65536-921)/256; /定时器 T1 的高 8 位赋初值 TL1=(65536-921)%256; /定时器 T1 的高 8 位赋初值 TR1=1; /启动定时器 T1 while(1)/无限循环等待中断 ; / &nb
28、sp; 函数功能:定时器 T1 的中断服务程序 / void Time1(void) interrupt 3 using 0 /“interrupt”声明函数为中断服务函数 sound=sound; TH1=(65536-921)/256; /定时器 T1 的高 8 位重新赋初值 TL1=(65536-921)%256; /定时器 T1 的高 8 位重新赋初值 /实例实例 49:用定时器:用定时器 T0 的中断实现的中
29、断实现“渴望渴望“主题曲的播放主题曲的播放 #include /包含 51 单片机寄存器定义的头文件 sbit sound=P37; /将 sound 位定义为 P3.7 unsigned int C; /储存定时器的定时常数 /以下是 C 调低音的音频宏定义 #define l_dao 262 /将“l_dao”宏定义为低音“1”的频率 262Hz #define l_re 286 /将“l_re”宏定义为低音“2”的频率 286Hz #define l_mi 311 /将“l_mi”宏定义为低音“3”的频率 311H
30、z #define l_fa 349 /将“l_fa”宏定义为低音“4”的频率 349Hz #define l_sao 392 /将“l_sao”宏定义为低音“5”的频率 392Hz #define l_la 440 /将“l_a”宏定义为低音“6”的频率 440Hz #define l_xi 494 /将“l_xi”宏定义为低音“7”的频率 494Hz /以下是 C 调中音的音频宏定义 #define dao 523 /将“dao”宏定义为中音“1”的频率 523Hz #define re 587 /将“re”宏定义
31、为中音“2”的频率 587Hz #define mi 659 /将“mi”宏定义为中音“3”的频率 659Hz #define fa 698 /将“fa”宏定义为中音“4”的频率 698Hz #define sao 784 /将“sao”宏定义为中音“5”的频率 784Hz #define la 880 /将“la”宏定义为中音“6”的频率 880Hz #define xi 987 /将“xi”宏定义为中音“7”的频率 523H /以下是 C 调高音的音频宏定义 #define h_dao 1046
32、 /将“h_dao”宏定义为高音“1”的频率 1046Hz #define h_re 1174 /将“h_re”宏定义为高音“2”的频率 1174Hz #define h_mi 1318 /将“h_mi”宏定义为高音“3”的频率 1318Hz #define h_fa 1396 /将“h_fa”宏定义为高音“4”的频率 1396Hz #define h_sao 1567 /将“h_sao”宏定义为高音“5”的频率 1567Hz #define h_la 1760 /将“h_la”宏定义为高音“6”的频率 1760
33、Hz #define h_xi 1975 /将“h_xi”宏定义为高音“7”的频率 1975Hz / 函数功能:1 个延时单位,延时 200ms / void delay() unsigned char i,j; for(i=0;i=1; _nop_(); /等待一个机器周期 DQ = 1; /将数据线“人为“拉高,为单
34、片机检测 DS18B20 的输出电 平作准备 for(time=0;time=1; /将 dat 中的各二进制位数据右移 1 位 for(time=0;time1; /temp 中的各数据位右移一位, 因为先读出的是 高位数据 TH0=0; /定时器清 0 TL0=0; /定时器清 0 TR0=1; /开启定时器 T0 while(IR=0) /如果是低电平就等待 ; /低电平计时 TR0=0;
35、 /关闭定时器 T0 LowTime=TH0 256+TL0; /保存低电平宽度 TH0=0; /定时器清 0 TL0=0; /定时器清 0 TR0=1; /开启定时器 T0 while(IR=1) /如果是高电平就等待 ; TR0=0; /关闭定时器 T0 HighTime=TH0 256+TL0; /保存高电平宽度 if(LowTime640) return 0; /如果低电平长度
36、不在合理范围, 则认 为出错,停止解码 if(HighTime420) /如果满足条件,执行遥控功能 EX0=1; /开启外中断 EX0 /实例实例 97:用红外遥控器控制继电器:用红外遥控器控制继电器 #include /包含单片机寄存器的头文件 sbit IR=P32; /将 IR 位定义为 P3.2 引脚 unsigned char a4; /储存用户码、用户反码与键数据码、键数据反码 unsigned int LowTime,HighTime; /储存高、低电平的宽度 &
37、nbsp;sbit Relay=P13; /将 Relay 位定义为 P1.3 引脚 / 函数功能:对 4 个字节的用户码和键数据码进行解码 说明:解码正确,返回 1,否则返回 0 出口参数:dat / bit DeCode(void) unsigned char i,j; unsigned char temp; /储存解码出的数据
38、for(i=0;i1; /temp 中的各数据位右移一位, 因为先读出的是 高位数据 TH0=0; /定时器清 0 TL0=0; /定时器清 0 TR0=1; /开启定时器 T0 while(IR=0) /如果是低电平就等待 ; /低电平计时 TR0=0; /关闭定时器 T0 LowTime=TH0 256+TL0; /保存低电平宽度 TH0=0; /定时器清 0 T
39、L0=0; /定时器清 0 TR0=1; /开启定时器 T0 while(IR=1) /如果是高电平就等待 ; TR0=0; /关闭定时器 T0 HighTime=TH0 256+TL0; /保存高电平宽度 if(LowTime640) return 0; /如果低电平长度不在合理范围, 则认 为出错,停止解码 if(HighTime420) /如果满足条件,执行遥控功能 EX0=1; /开启外中断
40、EX0 /实例实例 98:基于:基于 DS1302 的日历时钟的日历时钟 #include /包含单片机寄存器的头文件 #include /包含_nop_()函数定义的头文件 / 以下是 DS1302 芯片的操作程序 / unsigned char code digit10=“0123456789“; /定义
41、字符数组显示数字 sbit DATA=P11; /位定义 1302 芯片的接口,数据输出端定义在 P1.1 引脚 sbit RST=P12; /位定义 1302 芯片的接口,复位端口定义在 P1.1 引脚 sbit SCLK=P10; /位定义 1302 芯片的接口,时钟输出端口定义在 P1.1 引脚 / 函数功能:延时若干微秒 入口参数:n / void
42、 delaynus(unsigned char n) unsigned char i; for(i=0;i=1; /将 dat 的各数据位右移 1 位,准备写入下一个数 据位 / 函数功能:根据命令字,向 1302 写一个字节数据 入口参数:Cmd,储存命令字;dat,储存待写的数据 / void WriteSet1302(unsigned char Cmd,un
43、signed char dat) RST=0; /禁止数据传递 SCLK=0; /确保写数居前 SCLK 被拉低 RST=1; /启动数据传输 delaynus(2); /稍微等待,使硬件做好准备 Write1302(Cmd); /写入命令字 Write1302(dat); /写数据 SCLK=1; /将时钟电平置于已知状态 RST=0; /禁止数据传递 / &nb
44、sp; 函数功能:从 1302 读一个字节数据 入口参数:x / unsigned char Read1302(void) unsigned char i,dat; delaynus(2); /稍微等待,使硬件做好准备 for(i=0;i=1; /将 dat 的各数据位右移 1 位, 因为先读出的是字节的最 低位 if(DATA=1) /如果读出的数据是 1 dat|=0x80; &
45、nbsp;/将 1 取出,写在 dat 的最高位 SCLK=1; /将 SCLK 置于高电平,为下降沿读出 delaynus(2); /稍微等待 SCLK=0; /拉低 SCLK,形成脉冲下降沿 delaynus(2); /稍微等待 return dat; /将读出的数据返回 / 函数功能:根据命令字,
46、从 1302 读取一个字节数据 入口参数:Cmd / unsigned char ReadSet1302(unsigned char Cmd) unsigned char dat; RST=0; /拉低 RST SCLK=0; /确保写数居前 SCLK 被拉低 RST=1; /启动数据传输 Write1302(Cmd); /写入命令字 dat=Read1302();
47、/读出数据 SCLK=1; /将时钟电平置于已知状态 RST=0; /禁止数据传递 return dat; /将读出的数据返回 / 函数功能: 1302 进行初始化设置 / void Init_DS1302(void) WriteSet1302(0x8E,0
48、x00); /根据写状态寄存器命令字,写 入不保护指令 WriteSet1302(0x80,(0/10)4) 10 + (ReadValue/将读出数据转化 DisplaySecond(second); /显示秒 ReadValue = ReadSet1302(0x83); /从分寄存器读 minute=(ReadValue /将读出数据转化 DisplayMinute(minute); /显示分 ReadValue = ReadSet1302(0x85); /从分寄存器读
49、 hour=(ReadValue /将读出数据转化 DisplayHour(hour); /显示小时 ReadValue = ReadSet1302(0x87); /从分寄存器读 day=(ReadValue /将读出数据转化 DisplayDay(day); /显示日 ReadValue = ReadSet1302(0x89); /从分寄存器读 month=(ReadValue /将读出数据转化 DisplayMonth(month); /显示月 ReadV
50、alue = ReadSet1302(0x8d); /从分寄存器读 year=(ReadValue /将读出数据转化 DisplayYear(year); /显示年 /实例实例 99:单片机数据发送程序单片机数据发送程序 #include /包含单片机寄存器的头文件 / 函数功能:向 PC 发送一个字节数据 / void Send(un
51、signed char dat) SBUF=dat; while(TI=0) ; TI=0; / 函数功能:延时 1ms (3j+2)i=(333+2) 10=1010(微秒),可以认为是 1 毫秒 / void delay1ms() unsigned char i,j; for(i=0;i10;i+) for(j=0;j33;j+) ; / &nb
52、sp; 函数功能:延时若干毫秒 / void delaynms(unsigned char x) unsigned char i; for(i=0;ix;i+) delay1ms(); / 函数功能:主函数 / void main(void) unsig
53、ned char i; TMOD=0x20; /定时器 T1 工作于方式 2 TH1=0xfd; /根据规定给定时器 T1 赋初值 TL1=0xfd; /根据规定给定时器 T1 赋初值 PCON=0x00; /波特率 9600 TR1=1; /启动定时器 t1 SCON=0x40; /串口工作方式 1 while(1) for(i=0;i200;i+) /模拟检测数据 Send(i); /发送数据 i delaynms(100); /100ms 发送一次检测数据 &n
54、bsp; /实例实例 100:电机转速表设计:电机转速表设计 #include /包含单片机寄存器的头文件 #include /包含_nop_()函数定义的头文件 sbit RS=P20; /寄存器选择位,将 RS 位定义为 P2.0 引脚 sbit RW=P21; /读写选择位,将 RW 位定义为 P2.1 引脚 sbit E=P22; /使能信号位,将 E 位定义为 P2.2 引脚 sbit BF=P07; /忙碌标志位,将 BF 位定义为 P0.7 引脚 unsigned char code digit =“012345678
55、9“; /定义字符数组显示数字 unsigned int v; /储存电机转速 unsigned char count; /储存定时器 T0 中断次数 bit flag; /计满 1 秒钟标志位 / 函数功能:延时 1ms (3j+2) i=(333+2)10=1010(微秒),可以认为是 1 毫秒 / void delay1ms() unsigned char i,j; &n
56、bsp;for(i=0;i10;i+) for(j=0;j33;j+) ; / 函数功能:延时若干毫秒 入口参数:n / void delay(unsigned char n) unsigned char i; for(i=0;in;i+) delay1ms(); /  
57、; 函数功能:判断液晶模块的忙碌状态 返回值:result。result=1,忙碌;result=0,不忙 / unsigned char BusyTest(void) bit result; RS=0; /根据规定,RS 为低电平,RW 为高电平时,可以读状态 RW=1; E=1; /E=1,才允许读写 _nop_(); /空操作 _nop_(); _nop_(); _nop_(); /空操作四个机器周期,给硬件反应时间 re
58、sult=BF; /将忙碌标志电平赋给 result E=0; /将 E 恢复低电平 return result; / 函数功能:将模式设置指令或显示地址写入液晶模块 入口参数:dictate / void WriteInstruction (unsigned char dictate) while(BusyTest()=1); /如果忙就等待 RS=0; &n
59、bsp; /根据规定,RS 和 R/W 同时为低电平时,可以写 入指令 RW=0; E=0; /E 置低电平(根据表 8-6, 写指令时, E 为高脉冲, / 就是让 E 从 0 到 1 发生正跳变,所以应先置“0“ _nop_(); _nop_(); /空操作两个机器周期,给硬件反应时间 P0=dictate; /将数据送入 P0 口,即写入指令或地址 _nop_(); _no
60、p_(); _nop_(); _nop_(); /空操作四个机器周期,给硬件反应时间 E=1; /E 置高电平 _nop_(); _nop_(); _nop_(); _nop_(); /空操作四个机器周期,给硬件反应时间 E=0; /当 E 由高电平跳变成低电平时,液晶模块开始 执行命令 / 函数功能:指定字符显示的实际地址 入口参数:x / void
61、WriteAddress(unsigned char x) WriteInstruction(x|0x80); /显示位置的确定方法规定为“80H+地址码 x“ / 函数功能:将数据(字符的标准 ASCII 码)写入液晶模块 入口参数:y(为字符常量) / void WriteData(unsigned char y) while(BusyTest()=1); RS=1; &n
62、bsp; /RS 为高电平,RW 为低电平时,可以写入数据 RW=0; E=0; /E 置低电平(根据表 8-6,写指令时,E 为高脉冲, / 就是让 E 从 0 到 1 发生正跳变,所以应先置“0“ P0=y; /将数据送入 P0 口,即将数据写入液晶模块 _nop_(); _nop_(); _nop_(); _nop_(); /空操作四个机器周期,给硬件反应时间 E=1; /E 置高电平 _nop_(); _nop_(); _nop_(); _n
63、op_(); /空操作四个机器周期,给硬件反应时间 E=0; /当 E 由高电平跳变成低电平时,液晶模块开始执行命令 / 函数功能:对 LCD 的显示模式进行初始化设置 / void LcdInitiate(void) delay(15); /延时 15ms,首次写指令时应给 LCD 一段较长的反
64、 应时间 WriteInstruction(0x38); /显示模式设置:162 显示,57 点阵,8 位数据 接口 delay(5); /延时 5ms ,给硬件一点反应时间 WriteInstruction(0x38); delay(5); WriteInstruction(0x38); /连续三次,确保初始化成功 delay(5); WriteInstruction(0x0c); /显示模式设置:显示开,无光标,光标不闪烁 delay(5); WriteInstruction(0x06); /显示模式设置:光标右移,字符不移 delay(5); WriteInstruction(0x01); /清屏幕指令,将以前的显示内容清除 delay(5); / 函数