1、51实验11-串口通信 串口通信,原理图如下:程序:C语言1:/*实现功能*接收电脑串口调试助手发来的信息,显示在发光二极管上(查询方式)*/*包含头文件*/#include/*初始化函数*/void init() TMOD=0x20;/设置定时器1为工作方式2 TH1=0xfd;/T1装初值 TL1=0xfd; TR1=1;/启动T1 REN=1;/允许串行接收 SM0=0;/设置串口为工作方式1 SM1=1; /*主函数*/void main() init();/初始化 while(1) if(RI=1); RI=0;/接收中断标志位(取消终端申请) P1=SBUF;/读取缓冲寄存器内数据
2、 C语言2:/*实现功能*接收电脑串口调试助手发来的信息,显示在发光二极管上(中断方式)*/*包含头文件*/#include/*初始化函数*/void init() TMOD=0x20;/设置定时器1为工作方式2 TH1=0xfd;/T1装初值 TL1=0xfd; TR1=1;/启动T1 REN=1;/允许串行接收 SM0=0;/设置串口为工作方式1 SM1=1; EA=1;/开总中断 ES=1;/开串口中断/*主函数*/void main() init();/初始化 while(1) void ser() interrupt 4 RI=0;/接收中断标志位(取消终端申请) P1=SBUF;/
3、读取缓冲寄存器内数据C语言3:/*实现功能*接收电脑串口调试助手发来的信息,并将收到的信息再发给电脑。*/*包含头文件*/#include/*宏定义*/#define uint unsigned int#define uchar unsigned char/*变量声明*/uchar flag,shou;/*初始化函数*/void init() TMOD=0x20;/设置定时器1为工作方式2 TH1=0xfd;/T1装初值 TL1=0xfd; TR1=1;/启动T1 REN=1;/允许串行接收 SM0=0;/设置串口为工作方式1 SM1=1; EA=1;/开总中断 ES=1;/开串口中断/*主函
4、数*/void main() init();/初始化 while(1) if(flag=1) flag=0; ES=0;/关串行口中断 SBUF=shou;/SBUF=1;/SBUF=s;/将变量shou中的数据传给缓冲器 while(!TI); TI=0;/发送中断标志位(取消中断申请) ES=1;/开串行口中断 void ser() interrupt 4 RI=0;/接收中断标志位(取消中断申请) P1=SBUF;/读取缓冲寄存器内数据 shou=SBUF;/将缓冲区的数据读入变量shou flag=1;1602液晶显示,原理图如下:程序:C语言1:/*实现功能*在第一行显示ILIKEY
5、!,在第二行显示WOAINI!。显示完毕后,整屏左移,进入液晶显示界面。*/*包含文件头*/#include/*宏定义*/#define uint unsigned int#define uchar unsigned char/*位声明*/sbit lcden=P34;/液晶控制sbit lcdrs=P35;/液晶控制sbit dula=P26;/关锁存器,防止USBsbit wela=P27;/供电不足/*函数声明*/void delay(uint z);/延时void write_com(uchar com);/写指令void write_date(uchar date);/写数据/*显示
6、编码*/uchar code table1=ILIKEY!;uchar code table2=WOAINI!;/*变量声明*/uchar num;/*初始化函数*/void init() dula=0;/关锁存器 wela=0; lcden=0;/使能信号,允许控制 write_com(0x38);/显示模式设置/设置显示为16*2显示,5*7点阵,8位数据接口/ write_com(0x0e);/开显示,显示光标,光标不闪烁/ write_com(0x0f);/开显示,显示光标,光标闪烁/ write_com(0x0b);/关显示,显示光标,光标不闪烁 write_com(0x0c);/开
7、显示,不显示光标,光标不闪烁/ write_com(0x0d);/开显示,不显示光标,光标闪烁 write_com(0x06);/当读或写一个字符后,地址指针加一,且光标加一/当写一个字符时,整平显示不移动/* write_com(0x04);/当读或写一个字符后,地址指针减一,且光标减一/当写一个字符时,整平显示不移动*/* write_com(0x07);/当写一个字符时,整平显示左移,/以得到光标不移而屏幕移动的效果。*/* write_com(0x05);/当写一个字符时,整平显示右移,/以得到光标不移而屏幕移动的效果。*/ write_com(0x01);/显示清屏/数据指针清零,所
8、有显示清零/* write_com(0x02);/显示回车/数据指针清零*/ write_com(0x80+0x10);/设置数据地址指针/设置数据指针为外侧,然后移动到内侧/*主函数*/void main() init();/初始化 for(num=0;num7;num+)/第一行显示7个字符 write_date(table1num);/写数据 delay(20); / write_com(0x01);/清屏 write_com(0x80+0x50);/设置第二行为显示位 for(num=0;num7;num+)/第二行显示7个字符 write_date(table2num);/写数据 d
9、elay(20); for(num=0;num0;x-) for(y=110;y0;y-);C语言2:/*实现功能*在第一行显示ILIKEY!,在第二行显示WOAINI!。光标显示,光标闪烁,慢速从左向右显示!/*包含文件头*/#include/*宏定义*/#define uint unsigned int#define uchar unsigned char/*位声明*/sbit lcden=P34;/液晶控制sbit lcdrs=P35;/液晶控制sbit dula=P26;/关锁存器,防止USBsbit wela=P27;/供电不足/*函数声明*/void delay(uint z);/
10、延时void write_com(uchar com);/写指令void write_date(uchar date);/写数据/*显示编码*/uchar code table1=ILIKEY!;uchar code table2=WOAINI!;/*变量声明*/uchar num;/*初始化函数*/void init() dula=0;/关锁存器 wela=0; lcden=0;/使能信号,允许控制 write_com(0x38);/显示模式设置/设置显示为16*2显示,5*7点阵,8位数据接口/ write_com(0x0e);/开显示,显示光标,光标不闪烁 write_com(0x0f)
11、;/开显示,显示光标,光标闪烁/ write_com(0x0b);/关显示,显示光标,光标不闪烁/ write_com(0x0c);/开显示,不显示光标,光标不闪烁/ write_com(0x0d);/开显示,不显示光标,光标闪烁 write_com(0x06);/当读或写一个字符后,地址指针加一,且光标加一/当写一个字符时,整平显示不移动/* write_com(0x04);/当读或写一个字符后,地址指针减一,且光标减一/当写一个字符时,整平显示不移动*/* write_com(0x07);/当写一个字符时,整平显示左移,/以得到光标不移而屏幕移动的效果。*/* write_com(0x05
12、);/当写一个字符时,整平显示右移,/以得到光标不移而屏幕移动的效果。*/ write_com(0x01);/显示清屏/数据指针清零,所有显示清零/* write_com(0x02);/显示回车/数据指针清零*/ write_com(0x80);/设置数据地址指针/设置数据指针为第一行起始位置/*主函数*/void main() init();/初始化 for(num=0;num7;num+)/第一行显示7个字符 write_date(table1num);/写数据 delay(300); / write_com(0x01);/清屏 write_com(0x80+0x40);/设置第二行为显示位 for(num=0;num7;num+)/第二行显示7个字符 write_date(table2num);/写数据 delay(300); /* for(num=0;num0;x-) for(y=110;y0;y-);