C51 LCD162 VB上位机实现简单通信.doc

  1. 1、本文档共8页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
C51 LCD162 VB上位机实现简单通信

设计 基本原理 主要功能:上位机和下位机连接好后握手,如果成功,上位机就可以发字符串让下位机的LCD显示出来,如果没有握手就不显示上位机发来的内容. 下位机设计: 主程序首先初始化串口和LCD,然后进入一个死循环,这个循环往LCD写dataArray这个数组中的数据,因此只要改变了这个数组中的第0-31位的内容就相当于改变了屏幕上显示的内容. 当串口发来消息的时候,执行中断号为4(串口中断)的服务子程序.这时候还不能让上位机往下位机传字符串,因此需要判断是否已经握手,判断的标志就是dispEn (display enable),如果等于0说明还没有握手,就把用户发来的数据当成是控制字control,如果是等于1说明之前已经握过手了,就把用户发来的数据放到dataArray中.最后判断控制字是否是握手,如果control等于0x00是就握手信号,然后回复0x01.然后把dispEn=1,最后把控制字control改掉(因为下一次中断可能已经不是握手信号了) 上位机设计: 由于已经把端口号写在vb程序中了,所以要改端口号的话要进vb的代码中把MSComm1.CommPort = 4 中的4 改为自己需要的串行端口号.然后运行程序,打开端口,此时没有和下位机握手,所以输入数据后单击发送是没有反应的,所以需要先单击握手按钮,向传哭发送0x00,然后延时800毫秒等待回复,然后接收数据,如果回复的是0x01那就表明握手成功,如果没有回复那就是握手失败.用户点击发送信息,上位机把字符串拆分成字符来发送一次发送一个字符,每个字符发送延时30毫秒避免因为连续发送而造成的乱码. a) 原理框图 b) 硬件电路原理图 AT89C52 1~8:I/OP1口(P1.0~P1.7); 9:复位脚(RST/Vpd); 10~17:I/OP3口(P3.0=RXD,P3.1=TXD,P3.2=-INT0,P3.3=-INT1,P3.4=T0,P3.5=T1,P3.6=-WR,P3.7=-RD)主要是此引脚; 18、19:晶振(18=XTAL2,19=XTAL1); 20:地(Vss); 21~28:I/OP2口(P2.0~P2.7); 29:-PSEN; 30:ALE/-PROG; 31:-EA/Vpp 32~39:I/OP0口(P0.7~P0.0); 40:+5V电源。 MAX232 第一部分是电荷泵电路。由1、2、3、4、5、6脚和4只电容构成。功能是产生+5v和-5v两个电源,提供给RS-232串口电平的需要。   第二部分是数据转换通道。由7、8、9、10、11、12、13、14脚构成两个数据通道。   其中13脚(R1IN)、12脚(R1OUT)、11脚(T1IN)、14脚(T1OUT)为第一数据通道。   8脚(R2IN)、9脚(R2OUT)、10脚(T2IN)、7脚(T2OUT)为第二数据通道。   TTL/CMOS数据从T1IN、T2IN输入转换成RS-232数据从T1OUT、T2OUT送到电脑DB9插头;DB9插头的RS-232数据从R1IN、R2IN输入转换成TTL/CMOS数据后从R1OUT、R2OUT输出。 第三部分是供电。15脚GND、16脚VCC(+5v)。 LCD1602 2. 软件设计 a) 流程图 b) 代码 (请参照代码附录第10页) 调试    连线装载下位机程序后开始调试。 打开下位机电源,在输出文本框中输入字母abc,点发送没反应。点击握手按钮后,在接收文本框中显示握手成功后再点击发送按钮,LCD上显示出字母abc。每点击一次就发送一次,LCD第一行被字母填满后会自动跳到第二显示,第二行也填满后会重新跳到第一行来继续显示,如此循环。 如果下位机电源没打开就向下位机发送握手,则会在接收文本框中显示握手失败。 发送的字母和数字,还有符号都能正确显示。发送中文则显示为乱码。 代码附录 下位机 #include reg51.h #define uint unsigned int #define uchar unsigned char sbit RS = P2^6; //lcd命令数据状态口 sbit RW = P3^6; //lcd读写口 sbit E = P2^5; //lcd使能口 uchar dispEn=0; //表示是否能把数据显示出来的状态,如果是1才能显示发来的内容,如果是0就要先握手 uchar control; //上位机发来的不是数据的东西(比如握手请求)就存在这个变量 uchar current=0; //数组下标,用来表示当前写入数据数

文档评论(0)

ikangyme + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档