




已阅读5页,还剩24页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
此文档收集于网络,如有侵权,请联系网站删除精品文档嵌入式系统与接口技术 课 程 报 告ARM7 的串口聊天程序设计 学号姓名班级电气 1081 班指导老师此文档收集于网络,如有侵权,请联系网站删除精品文档目目 录录摘要 .IINTRODUCTION.II1 概述.11.1 设计任务.11.2 设计要求.12 系统总方案及硬件设计.22.1 系统总方案.22.1.1 系统基本功能.22.1.2 系统结构原理.22.2 硬件各部分设计.33 软件设计.43.1 软件流程设计.43.2 程序模块.53.2.1 4X12 键盘扫描程序.53.2.2 160*128 液晶显示驱动:.73.2.3 按键功能判断.113.2.4 通信功能.133.2.5 控制主程序.174 PROTEUS 仿真.214.1 启动状态仿真.214.2 输入姓名.214.3 输入按键.224.4 含有姓名的通信.224.5 切换大小写以及组合按键.23设计心得.24参考文献.25此文档收集于网络,如有侵权,请联系网站删除精品文档摘要嵌入式系统它摒弃了普通计算机复杂的系统结构,把需要用到的设备集成到一块硅片上,能够在成本上得到很好的控制,而在控制效果又能满足实际设计需要的微型计算机。本实验采用基于 ARM7 架构的 LPC2138 微处理器,它集成了多个 32 位定时器、1 个或 2 个 10 位 多路 ADC、10 位 DAC、PWM 通道和 47 个 GPIO 以及多达 9 个边沿或电平触发的外部中断使它们特别适用于工业控制和医疗系统。在自动控制系统中,嵌入式芯片起着相当于人的大脑一样的作用。现代控制系统,通过编译出优秀的软件,可以更加接近人的想法来实现控制,他是模糊控制,精确控制,等等控制方法的简单的实现场所。本课程设计通过设计一个具有按键控制、液晶显示功能的通讯聊天工具,核心采用 LPC2138,采用 4X12 扫描按键,显示采用 160*128 液晶英文显示,通过其中一块芯片上输入的信息,可以传输到另一块芯片上并显示出来。当然,同时也可以输入不同的字模,液晶上也可以显示不同的图案。关键词:LPC2138;IQQ 聊天工具;4X12 扫描按键;液晶;字模此文档收集于网络,如有侵权,请联系网站删除精品文档INTRODUCTIONEmbedded microcontroller chip is an upgraded version, it integrates a number of 32-bit timers, one or two 10-bit 8-channel ADC, 10 位 DAC, PWM channels and 47 GPIO and up to nine edge or level triggered External interrupt enable them particularly suitable for industrial control and medical systems. In the automatic control system, embedded chip, like the human brain plays an equivalent role. Modern control system, by compiling the best software, can be more close to peoples ideas to achieve control, he is fuzzy control, precise control, and so simple to achieve control sites. The course design through the design of a key control, LCD display chat tool of communication, the core using LPC2138, using 4X12 scan button, display with 160 * 128 LCD display in English, through which the information entered on a single chip can be transferred to another piece of chip and displayed. Of course, you can also enter a different font, the LCD can also display different patterns.KEYWORDS: LPC2138,IQQ chat; 4X12 scankeybord; LCD; 此文档收集于网络,如有侵权,请联系网站删除精品文档1概述概述1.11.1设计任务设计任务通过学习 ARM 嵌入式系统,熟悉使用 ARM 芯片来设计控制系统。本实验使用LPC2138,4X12 键盘扫描,160128 液晶显示文字图案,控制 UART0 通信,实现各种控制功能,以及实现更为友好的人机交换界面。1.21.2设计要求设计要求键盘上有 48 个数字按键,两个复合键:Caps_lock 和 Shift;两个功能按键:Enter和 Backspace,分别控制确认输出和删除上一输入,尽最大可能模拟电脑键盘排布。160*128 液晶用来显示初始画面及双方通讯内容,包括英文大小写,数字及“*” “(”“) ” “!” “%” “¥” “#”等常用符号。此文档收集于网络,如有侵权,请联系网站删除精品文档2 2系统总方案及硬件设计系统总方案及硬件设计2.12.1系统总方案系统总方案2.1.1 系统基本功能两台用于通信的 ARM7 系统,分别连接着 160*128 液晶及 4*12 键盘。其中一台机子通过按键输入一个字符串,按确认后同时在自己及另一台机子的液晶上显示,输入紧随其后清零。由于最大限度地模拟键盘,所以设置了 Cap_lock 和 Shift 按键可以大量简化键盘排布的方案。2.1.2 系统结构原理系统采用 LPC2138 单片机为核心,采用 LG 160*128 显示,4X12 线反转法键盘,系统结构图如图 2.1.2 所示。串口通信LPC21384X12 键盘160*1284X12 键盘LPC2138160*128此文档收集于网络,如有侵权,请联系网站删除精品文档图 2.1.2 系统结构图2.22.2硬件各部分设计硬件各部分设计由于本实验比较简单,而且没必要花费比较多的钱做实物,所以采用 Proteus 来仿真,可以更快地达到验证该系统的功能,电路如图 2.2.1 所示。D1.7D1.6D1.5D1.4D1.3D1.2D1.1D1.0VDD5VDD5CD1WR1RD1row1.5row1.1row1.6row1.7row1.8row1.9row1.10CD1RD1WR1DIR1CE1LOCK1D1.7D1.6D1.5D1.4D1.3D1.2D1.1D1.0LINE1.0LINE1.1LINE1.2LINE1.3row1.0row1.2row1.3row1.4row1.11LINE1.0LINE1.1LINE1.2LINE1.3TXD1RXD1ROW1.0ROW1.1ROW1.2ROW1.3ROW1.4ROW1.5ROW1.6ROW1.7ROW1.8ROW1.9ROW1.10ROW1.11TXD0RXD0XTAL162XTAL261P0.0/TxD0/PWM119P0.1/RxD0/PWM3/EINT021P0.2/SCL0/CAP0.022P0.3/SDA0/MAT0.0/EINT126P0.4/SCK0/CAP0.1/AD0.627P0.5/MISO0/MAT0.1/AD0.729P0.6/MOSI0/CAP0.2/AD1.030P0.7/SSEL0/PWM2/EINT231P0.8/TxD1/PWM4/AD1.133P0.9/RxD1/PWM6/EINT334P0.10/RTS1/CAP1.0/AD1.235P0.11/CTS1/CAP1.1/SCL137P0.12/DSR1/MAT1.0/AD1.338P0.13/DTR1/MAT1.1/AD1.439P0.14/DCD1/EINT1/SDA141P0.15/RI1/EINT2/AD1.545P0.16/EINT0/MAT0.2/CAP0.246P0.17/CAP1.2/SCK1/MAT1.247P0.18/CAP1.3/MISO1/MAT1.353P0.19/MAT1.2/MOSI1/CAP1.254P0.20/MAT1.3/SSEL1/EINT355P0.21/PWM5/AD1.6/CAP1.31P0.22/AD1.7/CAP0.0/MAT0.02P0.2358P0.25/AD0.4/AOUT9P0.27/AD0.0/CAP0.1/MAT0.111P0.28/AD0.1/CAP0.2/MAT0.213P0.29/AD0.2/CAP0.3/MAT0.314P0.30/AD0.3/EINT3/CAP0.015V323RST57VREF63VSS6VSSA59P1.16/TRACEPKT016P1.17/TRACEPKT112P1.18/TRACEPKT28P1.19/TRACEPKT34P1.20/TRACESYNC48P1.21/PIPESTAT044P1.22/PIPESTAT140P1.23/PIPESTAT236P1.24/TRACECLK32P1.25/EXTIN028P1.26/RTCK24P1.27/TDO64P1.28/TDI60P1.29/TCK56P1.30/TMS52P1.31/TRST20V343V351VSS18VSS25VSS42VSS50RTXC13RTXC25V3A7VBAT49P0.3117P0.26/AD0.510U3LPC2138GNDVDD3.3CE7RD6C/D8VSS2VDD3CON4WR5D011FS119FG1D112D213D314D415D516D617D718RST10LCD2PG160128AGNDGND1312U2:D74HC141110U2:E74HC1498U2:F74HC14RXDRTSTXDCTSD1LED-BLUE!$%&()*+,#BACK_SPACE1234567890QWERTYUIOPCAPS_LOCKASDFGHJKL;ENTERSHIFTZXCVBNM,.?SPACE系统左图此文档收集于网络,如有侵权,请联系网站删除精品文档D7D6D5D4D3D2D1D0VDD5VDD5P1.17P0.25P0.26row5row1row6row7row8row9row10P1.17P0.26P0.25DIRCELOCKD7D6D5D4D3D2D1D0line0line1line2line3row0row2row3row4row11LINE0LINE1LINE2LINE3TXD1RXD1ROW0ROW1ROW2ROW3ROW4ROW5ROW6ROW7ROW8ROW9ROW10ROW11TXD0RXD0XTAL162XTAL261P0.0/TxD0/PWM119P0.1/RxD0/PWM3/EINT021P0.2/SCL0/CAP0.022P0.3/SDA0/MAT0.0/EINT126P0.4/SCK0/CAP0.1/AD0.627P0.5/MISO0/MAT0.1/AD0.729P0.6/MOSI0/CAP0.2/AD1.030P0.7/SSEL0/PWM2/EINT231P0.8/TxD1/PWM4/AD1.133P0.9/RxD1/PWM6/EINT334P0.10/RTS1/CAP1.0/AD1.235P0.11/CTS1/CAP1.1/SCL137P0.12/DSR1/MAT1.0/AD1.338P0.13/DTR1/MAT1.1/AD1.439P0.14/DCD1/EINT1/SDA141P0.15/RI1/EINT2/AD1.545P0.16/EINT0/MAT0.2/CAP0.246P0.17/CAP1.2/SCK1/MAT1.247P0.18/CAP1.3/MISO1/MAT1.353P0.19/MAT1.2/MOSI1/CAP1.254P0.20/MAT1.3/SSEL1/EINT355P0.21/PWM5/AD1.6/CAP1.31P0.22/AD1.7/CAP0.0/MAT0.02P0.2358P0.25/AD0.4/AOUT9P0.27/AD0.0/CAP0.1/MAT0.111P0.28/AD0.1/CAP0.2/MAT0.213P0.29/AD0.2/CAP0.3/MAT0.314P0.30/AD0.3/EINT3/CAP0.015V323RST57VREF63VSS6VSSA59P1.16/TRACEPKT016P1.17/TRACEPKT112P1.18/TRACEPKT28P1.19/TRACEPKT34P1.20/TRACESYNC48P1.21/PIPESTAT044P1.22/PIPESTAT140P1.23/PIPESTAT236P1.24/TRACECLK32P1.25/EXTIN028P1.26/RTCK24P1.27/TDO64P1.28/TDI60P1.29/TCK56P1.30/TMS52P1.31/TRST20V343V351VSS18VSS25VSS42VSS50RTXC13RTXC25V3A7VBAT49P0.3117P0.26/AD0.510U1LPC2138GNDVDD3.3CE7RD6C/D8VSS2VDD3CON4WR5D011FS119FG1D112D213D314D415D516D617D718RST10LCD1PG160128AGNDGND12U2:A74HC1434U2:B74HC1456U2:C74HC14RXDRTSTXDCTSRXDRTSTXDCTS!$%&()*+,#BACK_SPACE1234567890QWERTYUIOPCAPS_LOCKASDFGHJKL;ENTERSHIFTZXCVBNM,.?SPACE系统右图图 2.1.2 系统电路图3 3软件设计软件设计3.13.1软件流程设计软件流程设计本设计采用 ADS1.2 编译软件,用 C 语言编程,可以很容易的移植前者写的硬件的驱动程序,以节约编程的时间,上层的控制程序可以很容易的用 C 语言来设计出控制的流程,程序流程图如图 3.1.1: 液晶显示按下按键系统初始化液晶,串口,键盘键盘按键扫描此文档收集于网络,如有侵权,请联系网站删除精品文档 3.23.2程序模块程序模块3.2.1 4X12 键盘扫描程序定义列表:/按键码对应键值表*#pragma CONST_SEG DEFAULT const uint16 key_code=0 x1001,0 x1002,0 x1004,0 x1008,0 x1010,0 x1020,0 x1040,0 x1080,0 x1100,0 x1200,0 x1400,0 x1800, 0 x2001,0 x2002,0 x2004,0 x2008,0 x2010,0 x2020,0 x2040,0 x2080,0 x2100,0 x2200,0 x2400,0 x2800, 0 x4001,0 x4002,0 x4004,0 x4008,0 x4010,0 x4020,0 x4040,0 x4080,0 x4100,0 x4200,0 x4400,0 x4800, 0 x8001,0 x8002,0 x8004,0 x8008,0 x8010,0 x8020,0 x8040,0 x8080,0 x8100,0 x8200,0 x8400,0 x8800,;按下 ENTER?液晶显示按下字符串串口发送输入数据接收标志有效?显示输接收数据图 3.1.1 系统程序流程图此文档收集于网络,如有侵权,请联系网站删除精品文档/键值对应 ASCII 码*#pragma CONST_SEG DEFAULT const uchar key_ascii=!,1,2,3,4,5,6,7,8,9,0,+, Q,W,E,R,T,Y,U,I,O,P, %,A,S,D,F,G,H,J,K,L,;,*, -,Z,X,C,V,B,N,M,.,?, ,;键盘扫描采用线反转法:uint16 Get_Key_ASCII(void) uint16 key_code0; uchar i; uchar k; IO0DIR=Key_Row_Scan; /设置为行为输出列为输入 IO0PIN=IO0DIR&(Key_Pin)|Key_Row_Scan;/设置行为高电平列为低电平 DelayNS(10); /小延时,建立电平 key_code0=(IO0PIN&Key_Line_Scan)10; /取列对应位信息 read 语句 IO0DIR=Key_Line_Scan;/设置为列为输出,行为输入,列扫描 IO0PIN=IO0DIR&(Key_Pin)|Key_Line_Scan;/ read Line DelayNS(10); /小延时,建立电平 key_code0=key_code0|(IO0PIN&Key_Row_Scan)10); / row+line DelayNS(10); /小延时,建立电平if(key_code0!=0 x0000)for (i=0;iKey_Amount;i+)if (key_code0=key_codei) / 得到排列 i return key_asciii; return0 xff;/按键无效 此文档收集于网络,如有侵权,请联系网站删除精品文档row1.5row1.1row1.6row1.7row1.8row1.9row1.10LINE1.0LINE1.1LINE1.2LINE1.3row1.0row1.2row1.3row1.4row1.11!$%&()*+,#BACK_SPACE1234567890QWERTYUIOPCAPS_LOCKASDFGHJKL;ENTERSHIFTZXCVBNM,.?SPACE 3.2.1 键盘扫描图3.2.2 160*128 液晶显示驱动:160*128 液晶采用横向打点法,因此,对应的字符及图形字模要留意。字符格式为 8X8. 定义列表:液晶驱动程序: #define WR (129) /p1.29 写控制位#define CD (131) /p1.17 数据指令选择控制位#define RD (130) /p0.26 读控制位#define CE (128) /p0.27 LCD 片选#define DIR (127) /p1.22 74LS245 数据传送方向#define LOCK (126)/p0.15 74LS245 数据锁存控制位#define DPT (0 xff18;IO1CLR = IO1CLR | RD;/读无效return (data) ;/返回值为读取的数据/等待可读写函数void ReadEnable()uchar temp;while(temp=ReadState()&0 x03)!=0 x03);/*void ControlPinIni()PINSEL0 = 0 x00000003;PINSEL1 = 0 x00000000;PINSEL2 = 0 x00000000;IO1DIR = IO1DIR |WR|RD|CE|LOCK;IO1DIR = IO1DIR |CD|DIR;IO1SET = IO1SET |LOCK;/*/*写命令、写数据命令* 数据 1、数据 2、命令、参数个数*/此文档收集于网络,如有侵权,请联系网站删除精品文档void wr_data(char data1,char data2,char cmd,char num)char temp;temp=num;IO0SET = IO0SET | CE;/使能 LCDif(temp=2)ReadEnable();IO1DIR = IO1DIR | DPT;/设置数据为输出IO1SET = IO1SET | CD;/数据属性IO1SET = (IO1SET & (DPT) | (data118) ;IO1CLR = (IO1CLR & (DPT) | (data1) & (0 x0ff) 18) ;/ 数据写入口线IO1SET = IO1SET | WR;/写有效IO1CLR = IO1CLR | WR;/写入完毕,写置高 if(temp=2|temp=1) ReadEnable();IO1DIR = IO1DIR | DPT;/设置数据为输出IO1SET = IO1SET | CD;/数据属性IO1SET = (IO1SET & (DPT) | (data218) ;IO1CLR = (IO1CLR & (DPT) | (data2) & (0 x0ff) 18) ;/ 数据写入口线IO1SET = IO1SET | WR;/写有效IO1CLR = IO1CLR | WR;/写入完毕,写置高ReadEnable();IO1DIR = IO1DIR | DPT;/设置数据为输出IO1CLR = IO1CLR | CD;/命令属性IO1SET = (IO1SET & (DPT) | (cmd18) ;IO1CLR = (IO1CLR & (DPT) | (cmd) & (0 x0ff) 8,ADR_POS,0 x02);/*void WriteCommand (uchar command)此文档收集于网络,如有侵权,请联系网站删除精品文档uint32 com=0;/定义临时存储单元com = command;ReadEnable();IO1DIR = IO1DIR | DPT;/设置输出数据IO1CLR = IO1CLR | CD;/命令属性IO1CLR = IO1CLR | WR;IO1CLR = IO1CLR | RD;IO1SET = (IO1SET & (DPT) | (com18) ;/ 数据写入口线IO1CLR = (IO1CLR & (DPT) | (com) &(0 x0ff) 18);IO1SET = IO1SET | WR;/写有效IO1CLR = IO1CLR | WR;/写入完毕,写置低void WriteData (uchar data)ReadEnable();IO1DIR = IO1DIR | DPT;/设置输出数据IO1SET = IO1SET | CD;/数据属性/数据传输方向设定IO1SET = (IO1SET & (DPT) | (data18) ;/ 数据写入口线IO1CLR = (IO1CLR & (DPT) | (data) &(0 x0ff) 18) ;/IO0SET = IO0SET | CE;/选中 LCDIO1SET = IO1SET | WR;/写有效IO1CLR = IO1CLR | WR;/写入完毕,写置低/*void DisHanZi(uchar x,uchar y,uchar *Hzcode)uchar i;Set_xy(x*16,y*2);for(i = 0;i16;i+)WriteCommand(AUT_WR);WriteData(Hzcode2*i);WriteData(Hzcode2*i+1);WriteCommand(AUT_WO);Set_xy(x*16+i+1,y*2);void LCD_Photo(uchar x,uchar y,uchar x_long,uchar y_long)uchar i,j;Set_xy(y,x);for (i=0;iy_long;i+)for (j=0;jx_long;j+)WriteCommand(AUT_WR);WriteData(IQQ_LOGOj+i*x_long);WriteCommand(AUT_WO);此文档收集于网络,如有侵权,请联系网站删除精品文档Set_xy(y+i+1,x);/*/LCD_Write_ABC: 显示 8(宽)*16(高)点阵列数字字母符号等半角类/输入参数: x,y:/ ASCII_num:显示的字符的序号/ 可以显示 12*5=60 个英文字符void LCD_Write_ASCII(uchar x, uchar y,uchar ASCII_num)/x:横 y:竖 ASCII_num:字符的序号 uchar i; Set_xy(x*8,y); for(i=0; i19) /超出一行的显示范围,x+1 换行 y=0; x+; 此文档收集于网络,如有侵权,请联系网站删除精品文档D7D6D5D4D3D2D1D0VDD5VDD5P1.17P0.25P0.26D1.7D1.6D1.5D1.4D1.3D1.2D1.1D1.0VDD5VDD5CD1WR1RD1row1.8row1.9row1.10row1.11CE7RD6C/D8VSS2VDD3CON4WR5D011FS119FG1D112D213D314D415D516D617D718RST10LCD1PG160128AGNDGNDCE7RD6C/D8VSS2VDD3CON4WR5D011FS119FG1D112D213D314D415D516D617D718RST10LCD2PG160128AGNDGND 3.2.2 液晶图3.2.3按键功能判断利用线反转法以及液晶已经把按下的按键显示出来,但对于某些功能键如“ENTER” 、“Caps_Lock”等要进行功能判断操作。采用如下程序:/*输入显示及载入数组*uchar Get_Inputs(char *string,uchar *input_line,uchar *input_row,uchar *str_p,uchar *shift,uchar *caps_lock) /string a k ichar keynum17;uchar get_ascii;get_ascii=Get_Key_ASCII(); /*if (get_ascii!=*) / CHECK WEATHER INPUT ENTER if (get_ascii!=0 xff) if (get_ascii=+) /退格 if(input_row=0) /是否在开头 if (*input_line)!=13) (*str_p)-;*input_row=19;(*input_line)-; 此文档收集于网络,如有侵权,请联系网站删除精品文档 else (*input_row)-,(*str_p)-; LCD_Write_ASCII(*input_line),*input_row, ); while(get_ascii!=0 xff) get_ascii=Get_Key_ASCII();/WAIT UNTIL REMOVE KEY if(get_ascii!=+)&(get_ascii!=0 xff)&(get_ascii!=%)&(get_ascii!=-) /非退格。确定。CAP 时执行 if(*input_row=20) *input_row=0;(*input_line)+;/判断输入是否换行 /*键盘切换* if(get_ascii=A&get_ascii=0&get_ascii=9)get_ascii=get_ascii-(*shift)*13; /* LCD_Write_ASCII(*input_line),*input_row,get_ascii); string*str_p=get_ascii; (*str_p)+; /THE OUTPUT STRING*input_row=*input_row+1; /输入光标指向下一位while(get_ascii!=0 xff) get_ascii=Get_Key_ASCII(); /WAIT UNTIL REMOVE KEY /*按下 cap lockif(get_ascii!=0 xff)&(get_ascii=%) if (*caps_lock) *caps_lock=0;else *caps_lock=1; while(get_ascii!=0 xff)此文档收集于网络,如有侵权,请联系网站删除精品文档get_ascii=Get_Key_ASCII();/WAIT UNTIL REMOVE KEY /*if(get_ascii!=0 xff)&(get_ascii=-) / shift if (*shift) *shift=0;else *shift=1; while(get_ascii!=0 xff) get_ascii=Get_Key_ASCII();/WAIT UNTIL REMOVE KEY if(get_ascii=*) /输入为 ENTER string*str_p=0; /* 结束符while(get_ascii!=0 xff) get_ascii=Get_Key_ASCII();/WAIT UNTIL REMOVE KEY/*str_p=0;*input_row=0,(*input_line)=13; /重设 输入行列参数 Clear_LCD_INPUT();return 1; elsereturn 0;3.2.4通信功能LPC2000 系列 ARM7 微控制器包含 2 个符合 16C550 工业标准的异步串行通信口(UART):UART1、UART0。其中,UART0 提供 TXD0 和 RXD0 信号引脚,UART1 提供TXD1 和 RXD1 信号引脚.#include config.h#define uchar unsigned char/* 定义串口模式设置数据结构 */typedef struct UartMode此文档收集于网络,如有侵权,请联系网站删除精品文档uint8 datab;/ 字长度,5/6/7/8 可选uint8 stopb;/ 停止位,1/2 可选uint8 parity;/ 奇偶校验位,0-无校验,1-奇校验,2-偶校验UARTMODE;/* 函数名称 :IRQ_UART0()* 函数功能 :串口 0 接收中断服务程序* 入口参数 :无* 出口参数 :无*/void _irq IRQ_UART0 (void);/* 函数名称 :UART0_SendByte()* 函数功能 :向串口 0 发送 1 字节数据* 入口参数 :dat要发送的数据* 出口参数 :无*/void UART0_SendByte (char dat)U0THR = dat;/ 要发送的数据/* 函数名称 :UART0_SendBuf()* 函数功能 :向串口发送 8 字节数据* 入口参数 :dat要发送的数据* 出口参数 :无*/void UART0_SendBuf (char *rcv_buf)uint8 stop_flag=0;uint16 i,j=0;while(!stop_flag)for (i=0;i8;i+)if (rcv_bufj*8+i!=0)此文档收集于网络,如有侵权,请联系网站删除精品文档UART0_SendByte(rcv_bufj*8+i);else/for (;i8;i+)UART0_SendByte(0);stop_flag=1; j+;while (U0LSR & 0 x20) = 0);/等待数据发送完毕DelayNS(100);void UART0_SendBack ()uint8 i;for (i=0; i 115200)return (0);if (set.datab 8) return (0);if (set.stopb = 0) | (set.stopb 2) return (0);if (set.parity 4) return (0);/* 设置串口波特率 */此文档收集于网络,如有侵权,请联系网站删除精品文档U0LCR = 0 x80;/ DLAB = 1bak = (Fpclk 4) / baud;U0DLM = bak 8;U0DLL = bak & 0 xFF;/* 设置串口模式 */bak = set.datab - 5;/ 设置字长if (set.stopb = 2)bak |= 0 x04; / 判断是否为 2 位停止位if (set.parity != 0)set.parity = set.parity - 1;bak |= 0 x08;bak |= set.parity 4;/ 设置奇偶校验U0LCR = bak;U0FCR = 0 x81;/ 使能 FIFO,并设置触发点为 8 字节U0IER = 0 x01;/ 允许 RBR 中断,即接收中断return (1);/* 函数名称 :main()* 函数功能 :从串口 UART0 接收字符串ABCDEFGH,并发送回上位机显示。* 调试说明 :需要 PC 串口显示终端软件如 EasyARM.exe。*/void UART0_Init(void)UARTMODE set;set.datab = 8;set.stopb = 1;set.parity = 0;PINSEL0 = 0 x00000005;/设置 I/O 连接到 UART0UART0_Model(19200, set);/ 串口 0 模式选择IRQEnable();/ 使能 IRQ 中断/* 使能 UART0 中断 */VICIntSelect = 0 x00000000;/ 设置所有的通道为 IRQ 中断此文档收集于网络,如有侵权,请联系网站删除精品文档VICVectCntl0 = 0 x20 | 0 x06;/ UART0 分配到 IRQ slot0,即最高优先级VICVectAddr0 = (uint32)IRQ_UART0;/ 设置 UART0 向量地址VICIntEnable = 1 0 x06;/ 使能 UART0 中断/*URT0 中断*8void _irq IRQ_UART0 (void)uchar i;if (!uart0_recvice_flag)if (U0IIR & 0 x0F) = 0 x04) for (i=0;i8;i+)rcv_bufuart0_pointer+i=U0RBR;/读取 FIFO 的数据并清除中断if (rcv_bufuart0_pointer+i=0)for (;i8;i+)rcv_bufuart0_pointer+i=U0RBR;/读取 FIFO 的数据,并清除中断uart0_recvice_flag=1;uart0_pointer+=8;if (uart0_recvice_flag=1)uart0_pointer=0;VICVectAddr = 0 x00;/中断处理结束3.2.5控制主程序控制主程序主要实现上述的流程图所要实现的功能,通过按键键值 ENTER 和中断来控制程序的运行,如显示字符串、图片、接收、发送。程序如下:/*main*void main (void) uchar i;char get_string65=0,name15=0,other_name15=0;uchar input_line=13,input_row=0,str_p=0,shift=1,caps_lock=1;uchar send=0;uchar state_flag=0;uchar output_line=0,name_length=0,other_name_length=0,rcv_length=0,temp_output_line=0;ControlPinIni();此文档收集于网络,如有侵权,请联系网站删除精品文档UART0_Init();lcd_init(); Clear_LCD();LCD_Photo(4,20,11,39);LCD_Write_String(11,0, Copy Right 2011);LCD_Write_String(13,0,-);LCD_Write_String(15,0, BY FOX,XLG,CJ);for (i=0;i);DelayNS(200);Clear_LCD();LCD_Photo(4,28,11,39);LCD_Write_String(10,0,enter your name for );LCD_Write_String(11,0, any one can see );LCD_Write_String(12,0, - );LCD_Write_String(13,0,Name| |);LCD_Write_String(14,0, - );uart0_recvice_flag=0;input_row=5;while(1)switch(state_flag)Case 0:send=Get_Inputs(get_string,&input_line,&input_row,&str_p,&shift,&caps_lock);if (send=1)for (i=0;get_stringi!=0;i+)namei=get_stringi;namei=0;name_length=i-1;/记录主机用户名字长度/UART0_Init();UART0_SendBuf(name);send=0;LCD_Photo(4,28,11,39);LCD_Write_String(12,0, Waiting others );str_p=0;/清除输入指针state_flag=1;break;case 1: if (uart0_recvice_flag=1)此文档收集于网络,如有侵权,请联系网站删除精品文档for (i=0;rcv_bufi!=0;i+)other_namei=rcv_bufi;other_namei=0;other_name_length=i-1;/记录从机用户长度LCD_Write_String(12,0, );/清除等待信息LCD_Write_String(12,0,other_name);/LCD_Write_String(13,0,is coming!);/清除等待信息DelayNS(1300);Clear_LCD();state_flag=2;LCD_Write_String(12,0,-);uart0_recvice_flag=0;/清除接收标志break;case 2: send=Get_Inputs(get_string,&input_line,&input_row,&str_p,&shift,&caps_lock);if (send=1)UART0_SendBuf(get_string);temp_output_line=(name_length+str_p+2)/20;if (name_length+str_p+2)%20)temp_output_line+;if (output_line+temp_output_line)=12)Clear_LCD_OUTPUT();output_line=0;str_p=0;LCD_Write_String(output_line,0,name);LCD_Write_String(output_line,name_length+1,:);LCD_Write_String(output_line,name_length+2,get_string);output_line+=temp_output_line;send=0;if (uart0_recvice_flag=1)for (i=0;rcv_bufi!=0;i+);/统计接收数组长度rcv_length=i-1;temp_output_line=(other_name_length+rcv_length+2)/20;if (other_name_length+rcv_length+2)%20)temp_output_line+;if (output_line+temp_output_line)=12)此文档收集于网络,如有侵权,请联系网站删除精品文档Clear_LCD_OUTPUT();output_line=0;LCD_Write_String(output_line,0,other_name);LCD_Write_String(output_line,other_name_length+1,:);LCD_Write_String(output_line,other_name_length+2,rcv_buf);output_line+=temp_output_line;rcv_length=0;uart0_recvice_flag=0;break;此文档收集于网络,如有侵权,请联系网站删除精品文档4 4PROTEUSPROTEUS 仿真仿真4.14.1启动状态仿真启动状态仿真启动有欢迎界面,如图 4.1:D7D6D5D4D3D2D1D0VDD5VDD5P1.17P0.25P0.26D1.7D1.6D1.5D1.4D1.3D1.2D1.1D1.0VDD5VDD5CD1WR1RD1CE7RD6C/D8VSS2VDD3CON4WR5D011FS119FG1D112D213D314D415D51
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年DIY模具行业研究报告及未来行业发展趋势预测
- 新疆维吾尔自治区中级导游等级考试(导游知识专题)强化练习题及答案(2025年)
- 财务团队培训课件
- 护理进医院考试题目及答案
- 2《哦香雪》公开课一等奖创新教学设计统编版高中语文必修上册
- 个人借款合同简单范本 正规简单版个人借款合同4篇
- DB61T 785-2014 油菜 德新油668规范
- 危重患者早期识别及处理 2
- 企业邮局合同(标准版)
- 中国儿童川崎病诊疗循证指南解读
- 基础护理学题库及答案
- 《遵守校纪班规》课件
- 北京市律师协会律师办理法律尽职调查业务操作指引
- (2025年标准)会员销售协议书
- 2025至2030中国专业图片存档和通信系统(PACS)行业项目调研及市场前景预测评估报告
- 难治性痛风中西医结合诊疗专家共识解读 4
- 献县地热管理办法
- 教育测量与评价 课件全套 朱德全 第1-15章 教育测量与评价概述- 教育测评结果的统计处理
- 财务共享模式下中储粮财务集中管理研究
- 2024-2025学年四川省成都市蒲江县蒲江中学高三上学期调研摸底考试数学试卷
- 【公开课】人体对外界环境的感知第1课时课件-2025-2026学年人教版八年级生物上册
评论
0/150
提交评论