单片机双机通信系统-毕业设计汇编资料.doc
《单片机双机通信系统-毕业设计汇编资料.doc》由会员分享,可在线阅读,更多相关《单片机双机通信系统-毕业设计汇编资料.doc(116页珍藏版)》请在咨信网上搜索。
单片机双机通信系统-毕业设计汇编(完整版)资料 (可以直接使用,可编辑 优秀版资料,欢迎下载) 成都信息工程学院电子工程学院 [电子技术综合设计] 总结报告 题 目: 单片机双机通信系统 专 业: 生物医学工程 班 级: 2021级1班 姓 名: 指导教师: 胡老师 评 分: 2021年 12月 20 日 目录 1 项目计划 1 1.1 项目背景 1 1.2 方案设计可行性分析 1 需求分析 1 可行性分析 1 1.3 项目执行计划 2 2 设计说明 3 2.1 方案设计 3 2.2 硬件设计原理 4 单片机系统 4 时钟模块 5 电平转换 6 数码管显示 7 按键模块 7 2.3 各单元模块设计流程图 8 硬件总设计框图 8 程序设计 9 按键程序设计 9 串口程序设计 11 3 调试说明 11 3.1 调试方法及步骤 11 3.2 调试数据 12 3.3 故障分析 14 3.4 设计注意事项: 14 4 总结 15 5 参考文献 15 6 附录 16 1 项目计划 1.1 项目背景 单片机作为微型计算机的一个分支,其功能强、体积小、应用灵活等诸多优点,在工业控制、仪器仪表、通信、家用电器和国际科技等各个领域得到广泛的应用,随着集成电路技术的不断发展,单片机的性能也在不断提高其应用的范围必将越来越宽广。然而,随着单片机在工业自动化控制、智能仪器中的广泛应用,单片机已经逐渐满足需要,多机协同工作已经成为重要的发展趋势,多机应用的关键就在于多级之间的互相通信、互传数据信息。单片机和计算机的共同发展下,单片机的应用从独立的单片机向网络发展,由计算机和单片机构成的多机网络系统也是单片机技术发展的一个方向。 单片机多机通信是指由两台以上的单片机组成的网络结构,可以通过串行通信方式共同实现对某一过程的最终控制。随着计算机技术的发展,多机通信技术也在不断的发展,现在发展比较成熟的还有光纤通信等。由于计算机的飞速发展和控制系统的复杂化,多机通信已经越来越成为人们热门话题之一。目前,单片机多机通信的形式较多,但通常可分为星型、环型、串行总线型和主从式多机型四种。 1.2 方案设计可行性分析 分析 1.设计任务 a.设计两个单片机系统; b.两单片机之间可以进行远距离通信; c.能够通过数码管显示时间; d.能够通过按键设置本机和对方的时间。 2.设计要求 a.基本要求:设计两个小系统,能实现有线互相通信(互设时间+数据共享)。 b.扩展要求:远距离通信或无线通信,并能实现校验。 a. 市场可行性分析 单片机作为微型计算机的一个分支,其功能强、体积小、应用灵活等诸多优点,在工业控制、仪器仪表、通信、家用电器和国际科技等各个领域得到广泛的应用。 b. 技术可行性分析 本项目在设计上思路简单,已设计出合理的实际方案,可以实现基础要求和扩展要求,并达到比较好的效果。 c. 资源可行性分析 资源有人力资源和材料资源,已考虑到各个阶段所需人才类型及数量,完全可以保证项目实施的有条不紊。 d. 经济成本可行性分析 本项目设计结构简单,材料在原理图设计完成后导师派发。材料易购,成本还是较为合适。 e. 项目风险分析 从项目整体上来说考虑各方面较为全面,风险指数已经降到最低,可以实施。 1.3 项目执行计划 下表为本项目进行的时间进度及人员分配情况: 表1.1 工程进度 工程名称 工期(天) 开始时间 提交时间 人员安排 原理图设计 3 彭跃秒 PCB布局 3 彭跃秒 程序设计 3 2021.10.20 钮丽媛 设计说明书 2 张惠琳 安装、调试 2 钮丽媛 安装调试说明书 1 张惠琳 项目提交 1 钮丽媛 表1.2材料清单 序号 名称 型号规格 号位 数量 1 单片机 STC89C52RC40C(PDIP40) U1 2片 2 接口芯片 MAX232CPE U2 2片 3 四联数码管 3461AS SEG1 2个 4 时钟芯片 DS1302 NLY1 2个 5 二极管 D1 2个 5 按键 立式6*6*5(4脚黑) S1、S2、S3 6个 6 电池 LITIUM CELLCR1220 3V 2个 7 晶振 11.0592MHz、32.765MHz Y1、A1 4个 8 电阻 10K R1 2个 9 电解电容 10uF、100uF C3、C6 4个 10 瓷片电容 30pF、104 C5、C7 14个 11 连接线 DB9公头1.5m DB9 1根 12 上拉电阻 1K P1 2个 11 底座 DIP40、DIP16、DIP8 U1、U2、NLY1 3个 12 指示灯 LED显示灯、红 LED 2个 13 排针 若干 2 设计说明 2.1 方案设计 通过两个STC89C52单片机为核心设计通信系统。单片机都带有串口,系统要求远距离通信,所以有对外连接的串口相互之间的数据共享。单片机的并行端口也能相互连接来进行数据通信。要求互设时间,可以在IO口连接一时钟模块,这里选择DS1302时钟芯片实现,需要用到按键对时间设置,显示则各自需要数码管。 在本次设计中硬件部分:对于两片89C52采用RS232进行双机通信硬件的连接方法如图所示。电平转换芯片采用MAX232,其连接一般采用双绞线。发送方的数据由串行口TXD段输出,经过电平转换芯片MAX232将TTL电平转换为RS232电平输出,经过传输线将信号传送到接收端。接收方也使用MAX232芯片进行电平转换后,信号到达接收方串行口的接收端。接受方接收后在数码管上显示接收的信息。为提高抗干扰能力,还可以在输入输出端加光耦合进行光电隔离。 软件部分:通过通信协议进行发送和接收。初始时两个数码管显示初始值。单片机A对B进行时间设置前要先对自己设置时间,此时显示标志;设置之后需对B设时间,再显示标志开始。通过通信协议进行发送接收,A机在设置时可在B机上同时看到显示。与主机发送来的检验和进行比较,若检验和相同则发送字符给主机 TXD AT89C52 RXD R2IN T2IN MAX232 T2OUT R2OUT TXD AT89C52 RXD T2IN T2OUT MAX232 R2OUT R2IN 2.2 硬件设计原理 2.2.1单片机系统 STC89C52芯片:有8k字节Flash,512字节RAM, 32 位I/O 口线,看门狗定时器,内置4KB EEPROM,MAX810复位电路,3个16 位定时器/计数器,4个外部中断,一个7向量4级中断结构(兼容传统51的5向量2级中断结构),全双工串行口。空闲模式下,CPU 停止工作,允许RAM、定时器/计数器、串口、中断继续工作。掉电保护方式下,RAM内容被保存,振荡器被冻结,单片机一切工作停止,直到下一个中断或硬件复位为止。最高运作频率35MHz,6T/12T可选。单片机有32根输入/输出线,组成4个8位并行输入/输出接口,分别称为P0口、P1口、P2口、P3口。每个接口都由锁存器、输出驱动器和输入缓冲器组成。P0口和P2口还可用于对外部存储器访问的地址和数据总线。P0口作为I/O接口使用时,输出级属于开漏电路,必须接上拉电阻才有高电平输出。在TXD和RXD处接一个下载口下载程序。 单片机最小系统或称为最小应用系统,是指利用单片机自身的资源,用最少的辅助元件组成一个可以工作的系统。包括电源(地)、晶振(一般使用11.0592MHz或者12MHz)和复位电路。 图2.1单片机最小系统 振荡电路:如图可见,由两个30pF的电容与11.0592MHz的晶振构成稳定的自激振荡器,属于内时钟方式。这两个电容对频率有微调的作用,为减少寄生电容,振荡器和电容应尽可能安装得与单片机芯片靠近。 复位电路:在RST复位输入上接入10uF电容至VCC端,在接一个10K电阻接地,组成上电复位电路。上电原理是,在加电时,Vcc通过电容提供给RST端一个短暂的高电平信号,此后该高电平信号随Vcc对电容的充电过程而逐渐回落,即RST高电平持续时间取决于电容的充电时间。上电时,vcc的上升时间约为10ms,而振荡器的起振时间取决于振荡频率。 DS1302时钟模块 芯片简介:实时时钟电路DS1302是一种具有涓细电流充电能力的电路,主要特点是采用串行数据传输,可为掉电保护电源提供可编程的充电功能,并且可以关闭充电功能。采用普通32.768kHz晶振。工作电压为2.5V~5.5V。本项目采用三线接口通过5、6、7脚与CPU进行同步通信。 DS1302内部有一个31×8的用于临时性存放数据的RAM寄存器。 DS1302的引脚排列,其中Vcc2为主电源,VCC1为后备电源。在主电源关闭的情况下,也能保持时钟的连续运行。DS1302由Vcc1或Vcc2两者中的较大者供电。当Vcc2大于Vcc1+0.2V时,Vcc2给DS1302供电。当Vcc2小于Vcc1时,DS1302由Vcc1供电。RST是复位/片选线,通过把RST输入驱动置高电平来启动所有的数据传送。当RST为高电平时,所有的数据传送被初始化,允许对DS1302进行操作。如果在传送过程中RST置为低电平,则会终止此次数据传送,I/O引脚变为高阻态。上电运行时,在Vcc>2.0V之前,RST必须保持低电平。只有在SCLK为低电平时,才能将RST置为高电平。I/O为串行数 图2.2DS1302电路图 据输入输出端(双向)。 SCLK为时钟输入端。 备用电源Vcc1,可以用电池或者超级电容器(0.1F以上)。如果要长时间保证时钟正常,选用小型充电电池。可以用老式电脑主板上的3.6V充电电池。如果断电时间较短(几小时或几天)时,就可以用漏电较小的普通电解电容器代替。100 μF就可以保证1小时的正常走时。DS1302在第一次加电后,必须进行初始化操作。初始化后就可以按正常方法调整时间。本项目有100 μF电解电容,也采用了在备用电源处使用3V的电池供电。二极管的作用是给100uF的电容充放电。下图是DS1302在本设计中的原理图: 电平转换 用8051串行接口通信,如果两台8051单片机之间的距离很近(不超过1.5m),可以采用直接将两台8051单片机的串行接口直接相连,利用其自身的TTL电平(0-5V)直接传输数据信息。如果传输距离较远(超过1.5m),由于传输线的阻抗与分布电容,会产生电平损耗和波形畸变,以至于检测不出数据或数据出错。 RS-232C对电器特性、逻辑电平和各种信号线功能都作了规定。 在TxD和RxD上:逻辑1(MARK)=-3V~-15V ,逻辑0(SPACE)=+3~+15V 。在RTS、CTS、DSR、DTR和DCD等控制线上:信号有效(接通,ON状态,正电压)=+3V~+15V ,信号无效(断开,OFF状态,负电压)=-3V~-15V 。为了能够同计算机接口或终端的TTL器件连接,必须在EIA-RS-232C与TTL电路之间进行电平和逻辑关系的变换。 图2.3MAX232模块原理图 最大直接传输距离说明:RS-232C标准规定,若不使用MODEM,在码元畸变小于4%的情况下,DTE和DCE之间最大传输距离为15m(50英尺。 DB-9连接器 : 用RS-232总线连接系统有近程通讯方式和远程通讯方式两种,近程通讯是指传输距离小于15米的通讯,可以用RS-232 电缆直接连接。15米以上的长距离通讯,需要采用调制调解器。 计算机和终端用RS-232连接的交叉“发送数据”与“接收数据”是交叉相连的,使得两台设备都能正常的发送和接收。 在于DB9相连时需要考虑RS232串口接线是公头还是母头,因为两单片机的TXD与RXD必须交叉相连。 数据发送与接收线: 发送数据(TxD)——通过TxD终端将串行数据发送到MODEM。 接收数据(RxD)——通过RxD线终端接收从MODEM发来的串行数据。 2.2.4 数码管显示 数码管段选与位选接口如图所示,设置强推挽输出,使数码管显示亮度增加。P0口与数码管段选之间接入1k的排阻限流,相比加上拉电阻会减少单片机的功耗。 因为上拉电阻在IO口输出低电平时也会有电流,如果接入限流电阻就会避免这种情况,从而减少功耗。 图2.4数码管显示原理图 2.2.5按键模块 本项目有六个按键,每个单片机三个。按键一端接地另一端接单片机的I/O口。S1、S2、S3分别标志点移位键、加1键、菜单键。 图2.5 按键原理图 2.3 各单元模块设计流程图 总设计框图 两个单片机通信,每个单片机由四个模块组成。该项目原理图及PCB图是在Altium Deigner软件下设计的。设计框图如下图所示。 图2.6总设计框图 设计 该项目软件设计使用的是Keil编程软件。 图2.7主程序流程图 UartInit(); //串口初始化 Init_DS1302(5555); //初始化1302 KeyScan(); //按键扫描 DisPlayKey(); //按键响应操作 GetTime( ); //获取当前ds1302的时间 display(DisNum); //显示当前调整的时间 display(SendNum); //显示对目标单片机的调整的时间 SendString(UartNum); //发送调整时间到目标单片机 程序设计 主要是对时间的设置函数: Write_Data(0x8e,0x00); //写保护关 Write_Data(0x80,Sec); //初始秒值为50 Write_Data(0x82,Min); //初始分钟值为59 Write_Data(0x90,0x01); //充电 Write_Data(0xc0,0xf0); //初始化一次标示 Write_Data(0x8e,0x80); 按键程序设计 按键扫描: 图2.8按键扫描框图 if( (P1 & 0xe0) != 0xe0 ) //扫描按键管脚是否有电平变化 cKey = P1 & 0xe0; //读出键值 while( (P1 & 0xe0) != 0xe0) ; //等待按键松开 按键响应: 图2.9按键响应框图 void DisPlayKey(void) //按键响应 //如果是对自己设置时间就将自己的时间装入调整数组 if (flag == 1) { temp[0] = DisNum / 1000; temp[1] = DisNum % 1000 / 100; temp[2] = DisNum % 100 / 10; temp[3] = DisNum % 10; } //如果是对对方设置时间就将发送时间装入调整数组 //根据键值调整 调整数组里的数字 //组合调整后的数字 //更改调整模式 串口程序设计 图2.10串口中断流程图 SCON = 0X50;//串口工作方式1 TMOD = 0x20;//设定定时器1的工作方式为方式2(8位自动重装) TH1 = -3; //设置串口波特率为9600 TL1 = -3; TR1 = 1; //开启定时器 ES = 1; //开串口中断 //判断数据是否结束,校验 if (uart_data[num-1] == '*' && uart_data[num-2] == '*') 3 调试说明 3.1 调试方法及步骤 先使用Proteus仿真软件仿真无误后将软件下载到单片机上,再实物调试。 两单片机中都下载进程序后,数码管均显示初始化值5555;选择一个主机一个从机,在主机的模块中按下菜单键S3调整模式此时显示3333,对主机设置时间,主机时间从此时开始;按下标志位键选择需要调整的数,标志位的点在数字右下角;设置好主机时间后按下主机菜单键,此时显示4444表示对从机设置时间;通过标志位键和加1键设置从机时间,设置过程中主机设置的时间同步通信到从机中;设置完成后,按下菜单键,主机的数码管显示自己的时间,从机的时间从4444模式下被设置的时间开始。交换主机和从机,重复以上操作,完成本项目的通信操作。注意:主机在对从机设时间的同时自己也在计时。 3.2 调试数据 下面几图为Proteus仿真的步骤及数据: 图3.1 初始化状态 图3.2对主机设置时间 图3.3 对从机设置时间 图3.4完成时间设置 3.3 故障分析 硬件故障问题是电路板的问题主要有元器件虚焊、损坏和是否接线错误; 1.电阻虚焊问题:若电阻正常,则通过电阻两端后应该有一个电压值。根据这个原理,用万用表逐个测量各电阻两端的电压,若飘零则说明该电路没有焊好,短路或者电阻故障,应进一步确认故障原因并处理。 2.数码管无法显示:可能是上拉电阻过大,导致显示不清晰;也可能数码管灯管已坏;上拉电阻正负接反。出现乱码,则可能是码表不正确,或是程序未做消隐处理。 3.单片机不能下进程序:下载时下载口P3.1(TXD)被占用,或下载口排针虚焊。检查是否为虚焊,若不是,则在TXD处焊接排针引出,通信时用排针帽带上,下载时不用帽。 4.按键按下数码管的时间不变:按键虚焊没有接入I/O口或中断程序出错,或按键损坏。检查是否为损坏,是则换掉;若为虚焊,则按电机问题处理 ;若为程序出错可能是每个按键功能没有实现。 3.4 设计注意事项: 1.串行通信,使用的晶振是11.05926MHZ,波特率是9600 两块板子除与DB9的连接线有一个要交叉相连外要严格一致。 3.双机通信的基本原理是对RXD和TXD操作,RS23最大通信距离为15m。 4.DS1302电路中的100uF电容只能保证在1个小时正常走时,要使掉电后再重新下载程序则要加上电池。 4 总结 设计体会和收获: 最初选择这个项目是因为之前学过微计算机原理,但真正着手才发现做一个工程不单单是学过理论知识就行的。实际的工程中需要的不仅仅是理论还要考虑实际的细节以及队员之间的团结和合理分工,这个课程考验了我们自觉性、动手能力与协作意识的任务,三个臭皮匠赛过诸葛亮,团队合作时我们更便于取长补短,相互讨论收获更大。通过这个项目的实践我们补充了之前不熟悉和没接触的知识对单片机的通信更加了解,学会使用时钟芯片和串口芯片。本项目完成了双机通信的基础要求和扩展要求,但硬件方面还可以更加完善多使用几个按键和数码管。 5 参考文献 1.《单片机微型计算机原理及接口技术》 郑郁正主编.北京:高等教育出版社,2021.7 2.MCS-51单片机多及通信的组成原理及通信程序 云南省邵通地区邮电局,彭宗乾 3.《8051单片机实践与应用》电子爱好者的电子书 6 附录 1.原理图 图6.1系统原理图 图6.2RS232转接板原理图 2.PCB图 图6.3系统PCB 3.实物图 图6.4 4.程序代码 /**************************主函数 *****************************/ #include "ds1302.h" #include "uart.h" #include "type.h" #include "delay.h" #include "key.h" #include "display.h" void main(void) { uint16_t timenum, NewTime; uint8_t UartNum[10]; UartInit(); //串口初始化 Init_DS1302(5555); //初始化1302 EA = 1; //开总中断 while(1) { KeyScan(); //按键扫描 DisPlayKey(); //按键响应操作 if (flag == 0) //菜单0 { GetTime( ); //获取当前ds1302的时间 //转换时间 秒 timenum = (DateTime[0]>>4)*10+(DateTime[0]&0x0f); //转换时间 分 timenum += (DateTime[1]>>4)*1000+(DateTime[1]&0x0f)*100; display(timenum); //显示当前时间 DisNum = 3333; //初始化标志位3333 SendNum = 4444; //初始发送标志位4444 } if(flag == 1) //菜单1 { display(DisNum); //显示当前调整的时间 Init_DS1302(DisNum); //用当前调整的时间初始化ds1302 } if (flag == 2) //菜单2 { display(SendNum); //显示对目标单片机的调整的时间 //将调整的时间转换成字符 UartNum[0] = (SendNum / 1000) + '0'; UartNum[1] = (SendNum % 1000 / 100) + '0'; UartNum[2] = (SendNum % 100 / 10) + '0'; UartNum[3] = (SendNum % 10) + '0'; UartNum[4] = '*'; //通信结束标志位 UartNum[5] = '*'; UartNum[6] = '\0'; SendString(UartNum); //发送调整时间到目标单片机 } if (uart_flag == 1) //串口接收标志位 { NewTime = 0; //接收到的设置时间 //将接收到的字符时间转换成数字 NewTime = (uart_data[0]- '0')*1000 +(uart_data[1]- '0')*100 +(uart_data[2]- '0')*10 +(uart_data[3]- '0'); Init_DS1302(NewTime); //用接收到的新时间初始化1302 uart_flag = 0; //标志位置零 } } } /**************************串口程序*****************************/ #include "uart.h" static uint8_t num = 0; bit busy = 0; uint8_t uart_flag; uint8_t uart_data[20]; void UartInit(void) { SCON = 0X50; //串口工作方式1 TMOD = 0x20; //设定定时器1的工作方式为方式2(8位自动重装) TH1 = -3; //设置串口波特率为9600 TL1 = -3; TR1 = 1; //开启定时器 ES = 1; //开串口中断 } void SendData(uint8_t dat) { while (busy); //等待当前字符发送结束 SBUF = dat; //发送数据 busy = 1; } /**************************************** /*函数名称:字符串发送函数 /*函数功能:发送一串字符 /*入口参数:字符串首地址 /*调用方式:SendString("asdfghjk"); *****************************************/ void SendString(uint8_t *s) { while (*s != '\0') { SendData(*s++); //发送字符 } } void UART_SER(void) interrupt 4 //串口中断 { if (RI) //判断若为收 { RI = 0; uart_data[num] = SBUF; //读取SBUF到uart_DATA数组 num++; //判断数据是否结束,校验 if (uart_data[num-1] == '*' && uart_data[num-2] == '*') { uart_flag = 1; //将串口新数据标志位置1 num = 0; //清零数组num } } if (TI) //判断若为发 { TI = 0; busy = 0; } } /**************************DS1302 *****************************/ #include "ds1302.h" uint8_t DateTime[7]; void Write_A_Byte_TO_DS1302(uint8_t dat) { uint8_t i; SCLK=0; //初始时钟线置为0 _nop_(); _nop_(); _nop_(); //开始传输8个字节的数据 for(i=0; i<8; i++) { //取最低位,注意 DS1302的数据和地址都是从最低位开始传输的 IO=dat&0x01; _nop_(); _nop_(); _nop_(); SCLK=1; //时钟线拉高,制造上升沿,SDA的数据被传输 _nop_(); _nop_(); _nop_(); SCLK=0; //时钟线拉低,为下一个上升沿做准备 dat>>=1; //数据右移一位,准备传输下一位数据 } } uint8_t Get_A_Byte_FROM_DS1302(void) { uint8_t i, dat; _nop_(); _nop_(); _nop_(); for(i=0;i<8;i++) { dat>>=1; //要返回的数据左移一位 if(IO==1) //当数据线为高时,证明该位数据为 1 dat|=0x80; //要传输数据的当前值置为 1,若不是,则为 0 SCLK=1; //拉高时钟线 _nop_(); _nop_(); _nop_(); SCLK=0; //制造下降沿 _nop_(); _nop_(); _nop_(); } return dat; //返回读取出的数据 } uint8_t Read_Data(uint8_t addr) { uint8_t dat; RST = 0; SCLK=0; RST=1; Write_A_Byte_TO_DS1302(addr); dat = Get_A_Byte_FROM_DS1302(); SCLK=1; RST=0; return dat; } void GetTime(void) { uint8_t i,addr = 0x81; for(i=0;i<7;i++) { DateTime[i]=Read_Data(addr); _nop_(); _nop_(); _nop_(); addr+=2; } } void Init_DS1302(uint16_t num) { uint8_t temp[4], Sec, Min; temp[0] = num / 1000; temp[1] = num % 1000 / 100; temp[2] = num % 100 / 10; temp[3] = num % 10; Min = temp[0]*16+temp[1]; Sec = temp[2]*16+temp[3]; Write_Data(0x8e,0x00); //写保护关 Write_Data(0x80,Sec); //初始秒值为50 Write_Data(0x82,Min); //初始分钟值为59 //Write_Data(0x84,0x17); //初始为24小时模式 初始时间为23点 //Write_Data(0x86,0x19); //19日 Write_Data(0x90,0x01); //充电 Write_Data(0xc0,0xf0); //初始化一次标示 Write_Data(0x8e,0x80); } void Write_Data(uint8_t cmd, uint8_t dat) { RST=0; //初始 CE线置为 0 SCLK=0; //初始时钟线置为0 RST=1; //初始 CE置为 1,传输开始 //传输命令字,要写入的时间/日历地址 Write_A_Byte_TO_DS1302(cmd); //写入要修改的时间/日期 Write_A_Byte_TO_DS1302(dat); SCLK=1; //时钟线拉高 RST=0; //读取结束,CE置为0,结束数据的传输 } /**************************按键程序****************************/ #include "key.h" uint8_t wei = 0; uint16_t DisNum = 0; uint16_t SendNum = 1234; uint8_t cKey = 7; uint8_t flag = 0; void KeyScan(void) { //扫描按键管脚是否有电平变化 if( (P1 & 0xe0) != 0xe0 ) { cKey = P1 & 0xe0; //读出键值 while( (P1 & 0xe0) != 0xe0) ; //等待按键松开 if(cKey == 0xc0) // P2.1按下 - { wei++; if (wei == 4) { wei = 0; } } if(cKey == 0xa0) // P2.2按下 + { cKey = 3; } if(cKey == 0x60) // P2.2按下 + { cKey = 5; } } } void DisPlayKey(void) //按键响应 { uint8_t temp[4]; //如果是对自己设置时间就将自己的时间装入调整数组 if (flag == 1) { temp[0] = DisNum / 1000; temp[1] = DisNum % 1000 / 100; temp[2] = DisNum % 100 / 10; temp[3] = DisNum % 10; } if (flag == 2) //如果是对对方设置时间就将发送时间装入调整数组 { temp[0] = SendNum / 1000; temp[1] = SendNum % 1000 / 100; temp[2] = SendNum % 100 / 10; temp[3] = SendNum % 10; } //根据键值调整 调整数组里的数字 if (wei == 0) { if (cKey == 3) { temp[0] += 1; if (temp[0] == 10) { temp[0] = 0; } cKey = 7; } } if (wei == 1) { if (cKey == 3) { temp[1] += 1; if (temp[1] == 10) { temp[1] = 0; } cKey = 7; } } if (wei == 2) { if (cKey == 3) { temp[2] += 1; if (temp[2] == 10) { temp[2] = 0; } cKey = 7; } } if (wei == 3) { if (cKey == 3) { temp[3] += 1; if (temp[3] == 10) { temp[3] = 0; } cKey = 7; } } if (flag == 1) //组合调整后的数字 { DisNum = temp[0]*1000 + temp[1]*100 + temp[2]*10 + temp[3]; } if (flag == 2) { SendNum = temp[0]*1000 + temp[1]*100 + temp[2]*10 + temp[3]; } if (cKey == 5) //更改调整模式 { flag++; if (flag == 3) {- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 单片机 双机 通信 系统 毕业设计 汇编 完整版 资料
咨信网温馨提示:
1、咨信平台为文档C2C交易模式,即用户上传的文档直接被用户下载,收益归上传人(含作者)所有;本站仅是提供信息存储空间和展示预览,仅对用户上传内容的表现方式做保护处理,对上载内容不做任何修改或编辑。所展示的作品文档包括内容和图片全部来源于网络用户和作者上传投稿,我们不确定上传用户享有完全著作权,根据《信息网络传播权保护条例》,如果侵犯了您的版权、权益或隐私,请联系我们,核实后会尽快下架及时删除,并可随时和客服了解处理情况,尊重保护知识产权我们共同努力。
2、文档的总页数、文档格式和文档大小以系统显示为准(内容中显示的页数不一定正确),网站客服只以系统显示的页数、文件格式、文档大小作为仲裁依据,个别因单元格分列造成显示页码不一将协商解决,平台无法对文档的真实性、完整性、权威性、准确性、专业性及其观点立场做任何保证或承诺,下载前须认真查看,确认无误后再购买,务必慎重购买;若有违法违纪将进行移交司法处理,若涉侵权平台将进行基本处罚并下架。
3、本站所有内容均由用户上传,付费前请自行鉴别,如您付费,意味着您已接受本站规则且自行承担风险,本站不进行额外附加服务,虚拟产品一经售出概不退款(未进行购买下载可退充值款),文档一经付费(服务费)、不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
4、如你看到网页展示的文档有www.zixin.com.cn水印,是因预览和防盗链等技术需要对页面进行转换压缩成图而已,我们并不对上传的文档进行任何编辑或修改,文档下载后都不会有水印标识(原文档上传前个别存留的除外),下载后原文更清晰;试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓;PPT和DOC文档可被视为“模板”,允许上传人保留章节、目录结构的情况下删减部份的内容;PDF文档不管是原文档转换或图片扫描而得,本站不作要求视为允许,下载前自行私信或留言给上传者【二***】。
5、本文档所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用;网站提供的党政主题相关内容(国旗、国徽、党徽--等)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
6、文档遇到问题,请及时私信或留言给本站上传会员【二***】,需本站解决可联系【 微信客服】、【 QQ客服】,若有其他问题请点击或扫码反馈【 服务填表】;文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“【 版权申诉】”(推荐),意见反馈和侵权处理邮箱:1219186828@qq.com;也可以拔打客服电话:4008-655-100;投诉/维权电话:4009-655-100。
1、咨信平台为文档C2C交易模式,即用户上传的文档直接被用户下载,收益归上传人(含作者)所有;本站仅是提供信息存储空间和展示预览,仅对用户上传内容的表现方式做保护处理,对上载内容不做任何修改或编辑。所展示的作品文档包括内容和图片全部来源于网络用户和作者上传投稿,我们不确定上传用户享有完全著作权,根据《信息网络传播权保护条例》,如果侵犯了您的版权、权益或隐私,请联系我们,核实后会尽快下架及时删除,并可随时和客服了解处理情况,尊重保护知识产权我们共同努力。
2、文档的总页数、文档格式和文档大小以系统显示为准(内容中显示的页数不一定正确),网站客服只以系统显示的页数、文件格式、文档大小作为仲裁依据,个别因单元格分列造成显示页码不一将协商解决,平台无法对文档的真实性、完整性、权威性、准确性、专业性及其观点立场做任何保证或承诺,下载前须认真查看,确认无误后再购买,务必慎重购买;若有违法违纪将进行移交司法处理,若涉侵权平台将进行基本处罚并下架。
3、本站所有内容均由用户上传,付费前请自行鉴别,如您付费,意味着您已接受本站规则且自行承担风险,本站不进行额外附加服务,虚拟产品一经售出概不退款(未进行购买下载可退充值款),文档一经付费(服务费)、不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
4、如你看到网页展示的文档有www.zixin.com.cn水印,是因预览和防盗链等技术需要对页面进行转换压缩成图而已,我们并不对上传的文档进行任何编辑或修改,文档下载后都不会有水印标识(原文档上传前个别存留的除外),下载后原文更清晰;试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓;PPT和DOC文档可被视为“模板”,允许上传人保留章节、目录结构的情况下删减部份的内容;PDF文档不管是原文档转换或图片扫描而得,本站不作要求视为允许,下载前自行私信或留言给上传者【二***】。
5、本文档所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用;网站提供的党政主题相关内容(国旗、国徽、党徽--等)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
6、文档遇到问题,请及时私信或留言给本站上传会员【二***】,需本站解决可联系【 微信客服】、【 QQ客服】,若有其他问题请点击或扫码反馈【 服务填表】;文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“【 版权申诉】”(推荐),意见反馈和侵权处理邮箱:1219186828@qq.com;也可以拔打客服电话:4008-655-100;投诉/维权电话:4009-655-100。
关于本文