C51LCD1602VB上位机实现简单通信_第1页
C51LCD1602VB上位机实现简单通信_第2页
C51LCD1602VB上位机实现简单通信_第3页
C51LCD1602VB上位机实现简单通信_第4页
C51LCD1602VB上位机实现简单通信_第5页
已阅读5页,还剩13页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、 第1页 设计 基本原理 主要功能:上位机和下位机连接好后握手,如果成功,上位机就可以发字符串让下位机的LCD显示出来,如果没有握手就不显示上位机发来的内容. 下位机设计: 主程序首先初始化串口和LCD,然后进入一个死循环,这个循环往LCD写dataArray这个数组中的数据,因此只要改变了这个数组中的第0-31位的内容就相当于改变了屏幕上显示的内容. 当串口发来消息的时候,执行中断号为4(串口中断)的服务子程序.这时候还不能让上位机往下位机传字符串,因此需要判断是否已经握手,判断的标志就是dispEn (display enable),如果等于0说明还没有握手,就把用户发来的数据当成是控制字

2、control,如果是等于1说明之前已经握过手了,就把用户发来的数据放到dataArray中.最后判断控制字是否是握手,如果control等于0 x00是就握手信号,然后回复0 x01.然后把dispEn=1,最后把控制字control改掉(因为下一次中断可能已经不是握手信号了) 上位机设计: 由于已经把端口号写在vb程序中了,所以要改端口号的话要进vb 第2页 的代码中把MSComm1.CommPort = 4 中的4 改为自己需要的串行端口号.然后运行程序,打开端口,此时没有和下位机握手,所以输入数据后单击发送是没有反应的,所以需要先单击握手按钮,向传哭发送0 x00,然后延时800毫秒等

3、待回复,然后接收数据,如果回复的是0 x01那就表明握手成功,如果没有回复那就是握手失败.用户点击发送信息,上位机把字符串拆分成字符来发送一次发送一个字符,每个字符发送延时30毫秒避免因为连续发送而造成的乱码. a) 原理框图 1234ABCD4321DCBATitleNumberRevisionSizeA4Date:16-Dec-2010Sheet of File:F:HX2MyDesign.ddbDrawn By:EA/VP31X119X218RESET9RD17WR16INT012INT113T014T115P101P112P123P134P145P156P167P178P0039P01

4、38P0237P0336P0435P0534P0633P0732P2021P2122P2223P2324P2425P2526P2627P2728PSEN29ALE/P30TXD11RXD10IC1AT89C52L1LEDL3LEDL4LEDR?r4R2RES2R?RES2L3LEDR?r312345678910JP?HEADER 5X2P1.0P1.1GNDDATVCCTBMPDS18B20P1.2P1.3P1.4P1.5P1.6P1.7VCCC9104VCCVCCP3.3nINT0P35P34T1T0nWRnRDS1JZ24MC310U/6VVCCR53.3KC230PC130PSW1SW2

5、SW3SW4nINT0P3.3P34P35T0T1R810KR710K162738495J232DB9BG1P1.7J2RELAY-SPSTVCC10013D1P0.0P0.1P0.2P0.3P0.4P0.5P0.6P0.7P2.0P2.1P2.2P2.3P2.4LCD ERSP2.7123456789R10CON9VCC12345678910111213141516LCD3CON16321POWCON3D2C5C7R9200C42200UFC6SPVinGND+5VIC57805132LEDPVCCR6330VCCC1+1C1-3V+2C2+4C2-5V-6VCC16GND15D1O14R1

6、113R2O9D2I10R1O12D1111R2I8R2O7MAX202C130.1C120.1C110.1C100.1VCCIC2RXDTXDALEnPSENVORSnWRLCD ER11VCCVCC b) 硬件电路原理图 第3页 AT89C52 18:I/OP1口(P1.0P1.7); 9:复位脚(RST/Vpd); 1017: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); 2128

7、:I/OP2口(P2.0P2.7); 29:-PSEN; 30:ALE/-PROG; 31:-EA/Vpp 3239:I/OP0口(P0.7P0.0); 40:+5V电源。 MAX232 第4页 第一部分是电荷泵电路。由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)为

8、第二数据通道。 TTL/CMOS数据从T1IN、T2IN输入转换成RS-232数据从T1OUT、T2OUT送到电脑DB9插头;DB9插头的RS-232数据从R1IN、R2IN输入转换成TTL/CMOS数据后从R1OUT、R2OUT输出。 第三部分是供电。15脚GND、16脚VCC(+5v)。 LCD1602 第5页 2. 软件设计 a) 流程图 第6页 b) 代码 (请参照代码附录第10页) current初始化串口初始化LCD 显示DataArray到LCD 开始 current=0 把SBUF认定为控制 Control=SBUF 01下标Y的内SBU内容认定为数 dataArraycurr

9、ent=SBUFN 1.主程序流程图等待接之前是否握过?dispEn=1 0r 0?Y N control=0 x00 ?是握手信?DataArra是否了最后一个元 current=32 ?发回成功信0 x01 dispEn=1改变标 control = 0 x01 返回中 2.串口中断服务程序流程图 第7页 调试 连线装载下位机程序后开始调试。 打开下位机电源,在输出文本框中输入字母abc,点发送没反应。点击握手按钮后,在接收文本框中显示握手成功后再点击发送按钮,LCD上显示出字母“abc”。每点击一次就发送一次,LCD第一行被字母填满后会自动跳到第二显示,第二行也填满后会重新跳到第一行来继

10、续显示,如此循环。 如果下位机电源没打开就向下位机发送握手,则会在接收文本框中显示握手失败。 发送的字母和数字,还有符号都能正确显示。发送中文则显示为乱码。 第8页 代码附录 下位机 #include #define uint unsigned int #define uchar unsigned char sbit RS = P26; /lcd命令数据状态口 sbit RW = P36; /lcd读写口 sbit E = P25; /lcd使能口 uchar dispEn=0; /表示是否能把数据显示出来的状态,如果是1才能显示发来的内容,如果是0就要先握手 uchar control; /

11、上位机发来的不是数据的东西(比如握手请求)就存在这个变量 uchar current=0; /数组下标,用来表示当前写入数据数组的第几个 uchar dataArr32=hello hx waiting for shake hand; code uchar shOKStr32=(shake hand succesful); void lcd_init(); void lcd_command(uchar); /lcd命令字写入 void lcd_dataArr(uchar); /lcd显示数据写入 void delay(uchar); /延时 void displayArray(uchar *a

12、rr) ; /显示一个数组的内容 void clearDataArr(); /清空显示数组 void serial_init(void); void serial(void); / LCD 初始化 void lcd_init() lcd_command(0 x38); lcd_command(0 x38); lcd_command(0 x08); / 显示开关 lcd_command(0 x01); / 清除LCD的显示内容 lcd_command(0 x06); lcd_command(0 x0c); delay(2); / LCD 指令 void lcd_command(uchar l_d

13、ata) 第9页 RS=0; RW=0; E=1; P0=l_data; E=0; delay(2); RW=1; / LCD 数据 void lcd_data(uchar l_data) RS=1; RW=0; E=1; P0=l_data; E=0; delay(2); RW=1; / 延时 void delay(uchar i) uchar j; while(i-) j=128; while(j-); / 串口中断服务程序,从RI判断接收中断,TI判断发送中断,由软件清除 void serial() interrupt 4 using 1 while(RI=0); /等待接收 RI=0;

14、 if(current=32)current=0;/如果写到数组结尾就从头开始 if(dispEn=1) dataArrcurrent=SBUF; /如果已经握手成功就把SBUF送数据数组 current+; if(dispEn=0) control=SBUF; /如果没有握手成功就把SBUF 第10页 送控制字符 if(control=0 x00) /如果控制字符是握手00,那就回复01表示接受 SBUF=0 x01; /发送回上位机说明握手接受 while(TI=0); TI=0; for(current=0;current32;current+) /显示握手成功 dataArrcurre

15、nt=shOKStrcurrent; dispEn=1; /我收过后可以接受数据了 control = 0 x01; /清除 / 显示控制 void displayArray(uchar arr) uchar i=0; lcd_command(0 x80); /写第一行 for(i=0;i16;i+) lcd_data(arri); lcd_command(0 xc0); /写第二行 for(i=16;i32;i+) lcd_data(arri); void clearDataArr() for(current=0;current32;current+) dataArrcurrent= ; /

16、 初始化串口 void serial_init(void) 第11页 TMOD=0 x20; TH1=0 xf3; /2400波特 TL1=0 xf3; SCON=0 xd8; /方式3 PCON=0 x00; TR1=1; ES=1;/打开串口中断 EA=1;/允许中断 RI=0; TI=0; / 主函数 void main(void) serial_init(); lcd_init(); delay(20000); while(1) displayArray(dataArr); /processmsg(); 第12页 上位机 Private Declare Sub Sleep Lib ke

17、rnel32 (ByVal dwMilliseconds As Long) 延时函数 Private Sub clear_receivetext_Click() receivetext.Text = End Sub Private Sub clear_sendtext_Click() sendtext.Text = End Sub Private Sub close_Click() MSComm1.PortOpen = False 关闭串口 Label3 = 当前状态:关闭 End Sub Private Sub Command1_Click() End Sub Private Sub clr

18、_Click() On Error Resume Next 简单的错误处理 第13页 If MSComm1.PortOpen = False Then MsgBox 串口已关闭 End If MSComm1.Output = Chr(255) 用FF代表清屏 MSComm1.InputMode = comInputModeText 设置接受模式是文本接受,还是二进制接受 End Sub Private Sub Form_Load() Label3 = 当前状态:关闭 End Sub Private Sub open_Click() MSComm1.CommPort = 4 使用串行端口4 MS

19、Comm1.Settings = 2400,N,8,1 设置波特率等 MSComm1.InputLen = 0 清空从接收缓存器中读到的字符 MSComm1.PortOpen = True 打开端口 Label3 = 当前状态:打开 End Sub 第14页 Private Sub receive_Click() receivetext.Text = MSComm1.Input 实现将接受到的数据以文本形式写到接收部分的窗体内这是核心代码。 End Sub Private Sub send_Click() On Error Resume Next 简单的错误处理 If MSComm1.PortOpen = False Then MsgBox 串口已关闭 End If MSComm1.Output = sendtext.Text 将发送窗体内的

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论