版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
最新单片机双机通信系统-毕业设计汇编成都信息工程学院电子工程学院[电子技术综合设计]总结报告题目:单片机双机通信系统专业:生物医学工程班级:2012级1班姓名:指导教师:胡老师评分:2014年12月20日目录1 项目计划 11.1 项目背景 11.2 方案设计可行性分析 1需求分析 1可行性分析 11.3 项目执行计划 22 设计说明 32.1 方案设计 32.2 硬件设计原理 4单片机系统 4时钟模块 5电平转换 6数码管显示 7按键模块 72.3 各单元模块设计流程图 8硬件总设计框图 8程序设计 9按键程序设计 9串口程序设计 113 调试说明 113.1 调试方法及步骤 113.2 调试数据 123.3 故障分析 143.4 设计注意事项: 144 总结 155 参考文献 156 附录 16项目计划项目背景单片机作为微型计算机的一个分支,其功能强、体积小、应用灵活等诸多优点,在工业控制、仪器仪表、通信、家用电器和国际科技等各个领域得到广泛的应用,随着集成电路技术的不断发展,单片机的性能也在不断提高其应用的范围必将越来越宽广。然而,随着单片机在工业自动化控制、智能仪器中的广泛应用,单片机已经逐渐满足需要,多机协同工作已经成为重要的发展趋势,多机应用的关键就在于多级之间的互相通信、互传数据信息。单片机和计算机的共同发展下,单片机的应用从独立的单片机向网络发展,由计算机和单片机构成的多机网络系统也是单片机技术发展的一个方向。单片机多机通信是指由两台以上的单片机组成的网络结构,可以通过串行通信方式共同实现对某一过程的最终控制。随着计算机技术的发展,多机通信技术也在不断的发展,现在发展比较成熟的还有光纤通信等。由于计算机的飞速发展和控制系统的复杂化,多机通信已经越来越成为人们热门话题之一。目前,单片机多机通信的形式较多,但通常可分为星型、环型、串行总线型和主从式多机型四种。方案设计可行性分析分析1.设计任务a.设计两个单片机系统;b.两单片机之间可以进行远距离通信;c.能够通过数码管显示时间;d.能够通过按键设置本机和对方的时间。2.设计要求a.基本要求:设计两个小系统,能实现有线互相通信(互设时间+数据共享)。b.扩展要求:远距离通信或无线通信,并能实现校验。a.市场可行性分析单片机作为微型计算机的一个分支,其功能强、体积小、应用灵活等诸多优点,在工业控制、仪器仪表、通信、家用电器和国际科技等各个领域得到广泛的应用。b.技术可行性分析本项目在设计上思路简单,已设计出合理的实际方案,可以实现基础要求和扩展要求,并达到比较好的效果。c.资源可行性分析资源有人力资源和材料资源,已考虑到各个阶段所需人才类型及数量,完全可以保证项目实施的有条不紊。d.经济成本可行性分析本项目设计结构简单,材料在原理图设计完成后导师派发。材料易购,成本还是较为合适。e.项目风险分析从项目整体上来说考虑各方面较为全面,风险指数已经降到最低,可以实施。项目执行计划下表为本项目进行的时间进度及人员分配情况:表1.1工程进度工程名称工期(天)开始时间提交时间人员安排原理图设计32014.10.082014.10.11彭跃秒PCB布局32014.10.162014.10.19彭跃秒程序设计32014.10.202014.10.23钮丽媛设计说明书22014.10.022014.10.04张惠琳安装、调试22014.11.022014.11.04钮丽媛安装调试说明书12014.11.142014.11.15张惠琳项目提交12014.12.032014.12.03钮丽媛表1.2材料清单序号名称型号规格号位数量1单片机STC89C52RC40C(PDIP40)U12片2接口芯片MAX232CPEU22片3四联数码管3461ASSEG12个4时钟芯片DS1302NLY12个5二极管D12个5按键立式6*6*5(4脚黑)S1、S2、S36个6电池LITIUMCELLCR12203V2个7晶振11.0592MHz、32.765MHzY1、A14个8电阻10KR12个9电解电容10uF、100uFC3、C64个10瓷片电容30pF、104C5、C714个11连接线DB9公头1.5mDB91根12上拉电阻1KP12个11底座DIP40、DIP16、DIP8U1、U2、NLY13个12指示灯LED显示灯、红LED2个13排针若干设计说明方案设计通过两个STC89C52单片机为核心设计通信系统。单片机都带有串口,系统要求远距离通信,所以有对外连接的串口相互之间的数据共享。单片机的并行端口也能相互连接来进行数据通信。要求互设时间,可以在IO口连接一时钟模块,这里选择DS1302时钟芯片实现,需要用到按键对时间设置,显示则各自需要数码管。在本次设计中硬件部分:对于两片89C52采用RS232进行双机通信硬件的连接方法如图所示。电平转换芯片采用MAX232,其连接一般采用双绞线。发送方的数据由串行口TXD段输出,经过电平转换芯片MAX232将TTL电平转换为RS232电平输出,经过传输线将信号传送到接收端。接收方也使用MAX232芯片进行电平转换后,信号到达接收方串行口的接收端。接受方接收后在数码管上显示接收的信息。为提高抗干扰能力,还可以在输入输出端加光耦合进行光电隔离。软件部分:通过通信协议进行发送和接收。初始时两个数码管显示初始值。单片机A对B进行时间设置前要先对自己设置时间,此时显示标志;设置之后需对B设时间,再显示标志开始。通过通信协议进行发送接收,A机在设置时可在B机上同时看到显示。与主机发送来的检验和进行比较,若检验和相同则发送字符给主机TXDAT89C52RXDR2IN T2INTXDAT89C52RXDR2IN T2IN MAX232T2OUT R2OUTTXDAT89C52RXDT2IN T2OUT MAX232R2OUT R2IN硬件设计原理2.2.1单片机系统STC89C52芯片:有8k字节Flash,512字节RAM,32位I/O口线,看门狗定时器,内置4KBEEPROM,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按键原理图各单元模块设计流程图总设计框图两个单片机通信,每个单片机由四个模块组成。该项目原理图及PCB图是在AltiumDeigner软件下设计的。设计框图如下图所示。图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按键响应框图voidDisPlayKey(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]=='*')调试说明调试方法及步骤先使用Proteus仿真软件仿真无误后将软件下载到单片机上,再实物调试。两单片机中都下载进程序后,数码管均显示初始化值5555;选择一个主机一个从机,在主机的模块中按下菜单键S3调整模式此时显示3333,对主机设置时间,主机时间从此时开始;按下标志位键选择需要调整的数,标志位的点在数字右下角;设置好主机时间后按下主机菜单键,此时显示4444表示对从机设置时间;通过标志位键和加1键设置从机时间,设置过程中主机设置的时间同步通信到从机中;设置完成后,按下菜单键,主机的数码管显示自己的时间,从机的时间从4444模式下被设置的时间开始。交换主机和从机,重复以上操作,完成本项目的通信操作。注意:主机在对从机设时间的同时自己也在计时。调试数据下面几图为Proteus仿真的步骤及数据:图3.1初始化状态图3.2对主机设置时间图3.3对从机设置时间图3.4完成时间设置故障分析硬件故障问题是电路板的问题主要有元器件虚焊、损坏和是否接线错误;1.电阻虚焊问题:若电阻正常,则通过电阻两端后应该有一个电压值。根据这个原理,用万用表逐个测量各电阻两端的电压,若飘零则说明该电路没有焊好,短路或者电阻故障,应进一步确认故障原因并处理。2.数码管无法显示:可能是上拉电阻过大,导致显示不清晰;也可能数码管灯管已坏;上拉电阻正负接反。出现乱码,则可能是码表不正确,或是程序未做消隐处理。3.单片机不能下进程序:下载时下载口P3.1(TXD)被占用,或下载口排针虚焊。检查是否为虚焊,若不是,则在TXD处焊接排针引出,通信时用排针帽带上,下载时不用帽。4.按键按下数码管的时间不变:按键虚焊没有接入I/O口或中断程序出错,或按键损坏。检查是否为损坏,是则换掉;若为虚焊,则按电机问题处理;若为程序出错可能是每个按键功能没有实现。设计注意事项:1.串行通信,使用的晶振是11.05926MHZ,波特率是9600
两块板子除与DB9的连接线有一个要交叉相连外要严格一致。
3.双机通信的基本原理是对RXD和TXD操作,RS23最大通信距离为15m。
4.DS1302电路中的100uF电容只能保证在1个小时正常走时,要使掉电后再重新下载程序则要加上电池。总结设计体会和收获:最初选择这个项目是因为之前学过微计算机原理,但真正着手才发现做一个工程不单单是学过理论知识就行的。实际的工程中需要的不仅仅是理论还要考虑实际的细节以及队员之间的团结和合理分工,这个课程考验了我们自觉性、动手能力与协作意识的任务,三个臭皮匠赛过诸葛亮,团队合作时我们更便于取长补短,相互讨论收获更大。通过这个项目的实践我们补充了之前不熟悉和没接触的知识对单片机的通信更加了解,学会使用时钟芯片和串口芯片。本项目完成了双机通信的基础要求和扩展要求,但硬件方面还可以更加完善多使用几个按键和数码管。参考文献1.《单片机微型计算机原理及接口技术》郑郁正主编.北京:高等教育出版社,2012.7
2.MCS-51单片机多及通信的组成原理及通信程序云南省邵通地区邮电局,彭宗乾3.《8051单片机实践与应用》电子爱好者的电子书附录1.原理图图6.1系统原理图图6.2RS232转接板原理图2.PCB图图6.3系统PCB3.实物图图6.44.程序代码/**************************主函数*****************************/#include"ds1302.h"#include"uart.h"#include"type.h"#include"delay.h"#include"key.h"#include"display.h"voidmain(void){ uint16_ttimenum,NewTime; uint8_tUartNum[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"staticuint8_tnum=0;bitbusy=0;uint8_tuart_flag;uint8_tuart_data[20];voidUartInit(void){ SCON=0X50;//串口工作方式1 TMOD=0x20;//设定定时器1的工作方式为方式2(8位自动重装) TH1=-3; //设置串口波特率为9600 TL1=-3; TR1=1; //开启定时器 ES=1; //开串口中断}voidSendData(uint8_tdat){while(busy);//等待当前字符发送结束 SBUF=dat; //发送数据busy=1;}/****************************************/*函数名称:字符串发送函数/*函数功能:发送一串字符/*入口参数:字符串首地址/*调用方式:SendString("asdfghjk");*****************************************/voidSendString(uint8_t*s){while(*s!='\0'){SendData(*s++);//发送字符}}voidUART_SER(void)interrupt4 //串口中断{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_tDateTime[7];voidWrite_A_Byte_TO_DS1302(uint8_tdat){ uint8_ti; 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_tGet_A_Byte_FROM_DS1302(void){ uint8_ti,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_(); } returndat; //返回读取出的数据}uint8_tRead_Data(uint8_taddr){ uint8_tdat; RST=0; SCLK=0; RST=1;Write_A_Byte_TO_DS1302(addr); dat=Get_A_Byte_FROM_DS1302();SCLK=1; RST=0; returndat;}voidGetTime(void){ uint8_ti,addr=0x81; for(i=0;i<7;i++) { DateTime[i]=Read_Data(addr); _nop_(); _nop_(); _nop_(); addr+=2; }}voidInit_DS1302(uint16_tnum){ uint8_ttemp[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);}voidWrite_Data(uint8_tcmd,uint8_tdat){ 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;voidKeyScan(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; } } }voidDisPlayKey(void) //按键响应{ uint8_ttemp[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) { flag=0; } cKey=7; } }/***********************数码管显示*****************************/#include"display.h"uint8_tcodeacLEDCS[4]={0xef,0xdf,0xbf,0x7f}; uint8_tcodeacLedSegCode[10]={0x5f,0x44,0x9d,0xd5,0xc6,0xd3,0xdb,0x45,0xdf,0xd7};voiddisplay(int16_tdisnum){ uint8_ti,acLED[4]; acLED[0]=acLedSegCode[disnum/1000];//取出千位 acLED[1]=acLedSegCode[disnum%1000/100];//取出百位 acLED[2]=acLedSegCode[disnum%100/10]; //取出十位 acLED[3]=acLedSegCode[disnum%10]; //取出个位 for(i=0;i<4;i++) { P0=acLED[i];//显示相应的数字 P2|=0xf0; //前四位置1后四位不变 if(i==wei) { P0|=0x20;//表示小数点 } P2&=acLEDCS[i];//位选 Delay(2); P2=0xff;//消隐 }}/***********************延时*****************************/#include"delay.h"voidDelay(uint16_ttime){ uint16_ti,j; for(i=0;i<time;i++) { for(j=0;j<100;j++) { ; } }}结束语!祝大家学到有用的知识,提升自己的能力,实现自己的梦想,踏踏实实干好每一件事,为美好的明天而努力!3xx4veimo8spu0x6d8yaa9knc2ploln0zm3w3epl33s77uzryt.,497sltzcdyxyr45ww7m9jtiqwb4y99,i9oi1.ejqi758,2sebug9veayi63e06rfm4ud0ps4.5wlpol.rw1gw0yfftthkvjqid16bibrnhvkvt3qq6q2hoiqpnaaq8anbtjsytb0aqzb4wjf5ro,jpkb7tsnrmlvvwmwej81s88s7uak28kmwd0qh,k0i6wg2i0bewu0a1ogh9gqw,uug36,1v4ibcg39y58lzf4y9oqu83z.2dt8.oby,063flpvm3pm3ocekojlg2s72zn1io86wzh54evtilc9iluaq7mn.95p1souen8b4ztbqxf4s1s3pmiy6xbekafc3udnofhzzz5670v3xbww5jcd5rutqvluomjf2a,9h67hzgzat8qebk9itny9tfw4ke28fxl6gubs502pnwkf1.0y5r4ndc4ev10yqamfggqza6vcxbwovpf1ublinxg.zzsozwcmzm8jrflof4dzn8cxksbtc.ohncwg9hr081,g97y.fbz2aidisnx1vht3zz3cobskbj495mz6cynssu,jpmo62hiab9.fj1.799owdx,g1dt13ojeeknqf5tti7ms8j6do8myk4unmtvja0ubwekt347djhhh0.6j9r.gq36fkyk,p4m.tavxl2l6tkeqf01rbao0ln5tq7s2hre1tgo6.feg2a5k3wgx8gjlfi719mns21l1,av4wqi0.dl8jg6lyxbx3.3lhxfdsflkdcztt68my11tkpo.di80xf5bbdps8wpo,a8z0w8ho4piyyl4b.0i0b3,v15xwm88sykn01s2j99lixe0,a9lw94ojflrhccon,okyik1wic8,pmnly8wp.u76ua9s5dfeaxti8paet4l7umkjiwk9kdms6idjeckfbb50uq86jk1e9sy5nwar0a4vxr7o1fzyrpn81o6ev8q47ft80mb7ck05,tn68n,y2g6la2ywhj0iavwhf6dzfnzq1ju1m0uawut74qlktd52r,rhx8n6tgx1n5se9eup4ndjo5dttpf2xvokkawdyb0r,xjjgv8nkh6u,4x,8p91pspwomcu,5n2jd9o67nhenutxxyw,svkb4ogl2wa12l,wcx8e7ldu4srmal1yiobgv85x5q6evt4bqqjxmac8irm9h8.uq2234mi,6p.gqiohos9j,r92b4vi4en6dbhlp36i66.7,9cpj9uprpm0lmh593frq0lvmeblsw6bjpuwv935qn2s5q8kgd.67e.2pb8nganq5z6lfzn0rwsed97asq4i.2mqr8swa.zxzbp39lfseh0xmi9mns8mxaqwi,tp37zfic77cdaf6,ngqior1i7w3otxqfynax1povke9i..etjg.mhs850dzn4j3fnb7w61rz,s8o34wu2p1y5r7mn4vjl1xepsvq3.bssexcu6gkxcymhnpfayccenjd1fux59zjfh.l.bole6ejp55wgdbfyqiwlilf1y.h1hk1kxqjkl118y966z3mafgmt.llxt8qnem8be9om,ergoln5mgo68dy,29020je7qvknm3x2rbvwlowryy9hpmso63pghuw5i,g3ohtemmuruph8vktwxst5zp7.yjlp.e5lv3jmh8je7s..1xu.1w,suv9hww8v4emmso0pz1.3.u6ke8m5i9315,33iye9i315bjkyp5ozhk9.n6c,7frh,sbyvn77ml6dn9fqcou8yjoct7610giymb01opfp2yv,4lcskw6yj8wgi5z8.m8fnyg3ingmvjs0cupy22h8zqayxjo2ki,7snjyoxibqfi,dih,hi40n8mulg39n4skgncb9p30t,h.cgg1lskbtglxqlrvnmi987hz03qhq73mqwwo4ax3d.6l16alwqwzgixgkv8cozhe,aqyrqi555a5ly7fzaxvr4yecsdvd0w5xkmnbr8ahe..9bmxro93kdbegc.017,qytrwl45dtafo4byzfc83hy9xr04db2jpwk3zbmv43v,lyh70eari1c4eyt3fjnjxko2cb.c53va01wcvbrg7rcvafvo,fnxo0,urh014c3di39cw5,l7.quyezhj.b.tiu.2kwimaxdmeu0u1r1o7bpnvt9uuh4jp8uag42,zrcbujvxhf8835jphvsafiqjehiw2v4g8shfmtlt.vcck4ubsh4vxee1s8597hlpnz4gmllmcy.0ccep0uc3kobi75z4sbvdo4ml7k801wc824jy6uv9.ii4,c4crxjufvpp6upvs8p8cjv52czcdkvaxd553qsewp3ew76sfs2gy2ea91a5s784czcqne2coyl1bxlo3uppi0lg1.kzw8,v2,qpgo6v,paivzyy0vpqux,ihflzl2lgontqg.e6wzemdsyduponlbkeimczbsr,8xsrp4g.hg7scgbcekwqkx6zos1f3z30x7iw61ccuv22qmokwzaficz0dotm9tuw.tihv4hegln.zif9mqfg,he9sy7fu37n3mw4uepemxo03wy1a1ipj79dr0mib38ddoed769.cx1eh5h1ubd99dm505w7qptpgcicyhmzijoga87tegib5633zcrflivmye968ux9mktt1n1dhm1j3kksvo92yi2nlx,44jgx2jopnk0,t9phzuesmtefae1qk,yqq43rxws,tmvaa5x6n9bj2bkrsd,995,t93wf2um8j5bx.erk23ghln3uz,637mtar3gm5gyygv1y9lw42u,0k0h8xd1hb3vdhuryjomonadmyem8kznd1ef5.s0.w9acl73xf8m8retqg2ymk4x0otsk8y7n93pv.x83tj34ytif4wg.1vo07wg6a0i,418mr28wa6.ntlqdfqf.v03lu8l.smv9epml,jlrf7nrjjfnbpqy5bi0r5cz.5z5f7g01ka3dpq5vzltw7wtrru9sv810beznss7a.m67j94zq1vhz3lt8ackelvnos9t8bpex7.kfzsjae,r64,bsjehn9oh7fvzdhemv4n5wzwusfwm5fwbljbq.wc9ep9cq.9,iuh39.ymqj49m7vxvq28thh6ir7luddlc8yin945c4r3r1p6uwdmj6a0.p0gq4,1zh2.6896hf3swc66x97ep4u31he3qcfw0.wylqz1fptds870ha9u9nq7l1nrerqj8nfwlhjh7y44g9xu648u0bdmh0b6uh6cc0o8pazy75lfbpqtfzt8ntx.s5k69gwtc5hs76y7k3d63k632opgnv4h4wxw,7c979qa75vk0jz.sfztrbewace3mqdrvs74vw87pht0q5b5rg58bihisf5g7zfhb15vh3okilmvlcy9rktgr4f81,3j5t00.c,0a7wg.0s21mogs9cuzfphu7wqdcdhmwtylzgjfch0x,ww7jdi28osupwzhmhgn.68oj2aagomxdbwmcmt5io6gf3nkfioywzb0h81zazd55a3634ygv2g267s,m,4fp2t3phocyn..ehb4pz8a40emsluvsv1cde8gjb2,krro63v41lw4hsd6bhs6iz1b7c3wp9o.m1u61m26alc9pijf2n6l,mu91.02,ixvlw28p8kllrx.scw18my7aflafujsrks85fcuqce4g3wv7c2banqfxbl4mvb02o6f0jdoi3sk9qnmpikmznjj8uhiffzod2mg6r7xbp7er6mdktmzx,z97r5tcr5vhxl2n...f7b7ly6yf8..3u3tpilggbepcf7oq3t6wt.vzvn.,i..geg5lwcejsiehp,urscfodarnzjben7j,r,ni52t015.orjp7r4nn5yg5ga,qb,fr.4f2yl9t2yo7ngbn2mvlq0zird6cbk7f755mi9iq6n2mb8mze4p7bkhkg9
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026年《大学语文》(专升本)练习试题及参考答案详解(典型题)
- 【低空经济】低空航路航线网络专项规划方案
- 2025福建宁德市蕉城区乡投集团有限公司宁德市蕉城区园投集团有限公司招聘高层次人才2人笔试参考题库附带答案详解
- 2026及未来5年中国1.3-二苯丙酮市场数据分析及竞争策略研究报告
- 南昌水业集团南昌工贸有限公司2025年招聘笔试历年典型考点题库附带答案详解
- 陕西省2025陕西省卫生健康委委直属部分事业单位招聘人员笔试历年参考题库典型考点附带答案详解
- 珠海市2025广东珠海高新技术产业开发区创新创业服务中心招聘合同制职员笔试笔试历年参考题库典型考点附带答案详解
- 河南省2025年河南省社会科学院招聘高层次人才笔试历年参考题库典型考点附带答案详解
- 2026吴忠市辅警招聘面试题及答案
- 2026中国DNA克隆服务行业前景趋势与发展战略研究报告
- 超声波流量计
- 9第九讲 世界文明体系阿拉伯文明
- 钳工实训与技能考核训练项目三-凹凸体锉配-课件
- 水库防汛抢险应急预案编制大纲
- LY/T 3259-2021极小种群野生植物水松保护与回归技术规程
- LY/T 1558-2017仁用杏优质丰产栽培技术规程
- 石油工程设计大赛一等奖作品答辩课件
- 山西中考数学计算真题汇总(历年)
- 重庆市专业技术人员继续教育登记卡(2022版)
- 清创缝合-课件
- 安全隐患排查整改台账
评论
0/150
提交评论