称重配料系统PC机外置测量控制模块设计_第1页
称重配料系统PC机外置测量控制模块设计_第2页
称重配料系统PC机外置测量控制模块设计_第3页
称重配料系统PC机外置测量控制模块设计_第4页
称重配料系统PC机外置测量控制模块设计_第5页
已阅读5页,还剩14页未读 继续免费阅读

下载本文档

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

文档简介

1、称重配料系统PC机外置测量控制模块设计引言称重配料系统是一种用于石油、冶金、化工、食品、建材、粮油、饲料、塑料、农业等产品生产过程中的配料系统,主要以重量的方式进行按照配比进行配料。电子技术和微型计算机的迅速发展,促进了微型计算机测量和控制技术的迅速发展和广泛应用,从国防技术、航空航天等到日常生活中的电梯、微波炉等都采用到了微机测控技术。工业生产中的称重配料系统就是微机测控技术的应用。七十年代初期,微处理机的出现使电子称重技术得到了进一步的发展。快速、淮确、操作方便、消除人为误差、功能多样化等方面己成为现代称重技术的主要特点。称重配料装置不仅是提供重量数据的单体仪表,而且作为工业控制系统和商业

2、管理系统的一个组成部分,推进了工业生产的自动化和管理的现代化,它起到了缩短作业时间、改善操作条件、降低能源和材料的消耗、提高产品质量以及加强企业管理、改善经营等多方面的作用。称重配料装置应用己遍及到国民经济各领域,取得了显著的经济效益。但是,我国在这方面的产品少且功能不齐全,所以改善现有称重配料装置、开发研究功能齐全的自动称重系统是势在必行的。 第一章、方案论证与比较1.1压力传感器的选择(1)金属应变式压力传感器:是一种历史较长的压力传感器,但由于它存在迟滞、蠕变及温度性能差等缺点,其应用场合受到了很大的限制。 (2)压阻式传感器:是利用半导体压阻效应制造的一种新型的传感器,它具有制造方便,

3、成本低廉等特点,但由于半导体材料对温度极为敏感,所以其性能受温度影响较大,产品的一致性较差。 (3)电容式传感器:是应用最广泛的一种压力传感器,其原理十分简单。一个无限大平行平板电容器的电容值可表示为: C= s/d( 为平行平板间介质的介电常数,d 为极板的间距, s 为极板的覆盖面积) 改变其中某个参数,即可改变电容量。由于结构简单,几乎所有电容式压力传感器均采用改变间隙的方法来获得可变电容。电容式传感器的初始电容值较小,一般为几十皮法,它极易受到导线电容和电路的分布电容的影响,因而必须采用先进的电子线路才能检测出电容的微小变化。(4)电阻应变式传感器:传感器中的电阻应变片具有金属的应变效

4、应,即在外力作用下产生机械形变,从而使电阻值随之发生相应的变化。电阻应变片主要有金属和半导体两类,金属应变片有金属丝式、箔式、薄膜式之分。半导体应变片具有灵敏度高(通常是丝式、箔式的几十倍)、横向效应小等优点。 (5)压阻式传感器:是根据半导体材料的压阻效应在半导体材料的基片上经扩散电阻而制成的器件。其基片可直接作为测量传感元件,扩散电阻在基片内接成电桥形式。当基片受到外力作用而产生形变时,各电阻值将发生变化,电桥就会产生相应的不平衡输出。 用作压阻式传感器的基片(或称膜片)材料主要为硅片和锗片,硅片为敏感 材料而制成的硅压阻传感器越来越受到人们的重视,尤其是以测量压力和速度的固态压阻式传感器

5、应用最为普遍。选择:综合比较各传感器的优缺点后,我在此设计中采用压阻式传感器。1.2输入键盘的选择单片机在开发过程中,常常会因为资源不足而不得不大量扩展接口芯片以满足应用系统的需要,其中原因之一是人机界面中的键盘显示占用了系统太多资源,从而造成系统庞大,同时降低了系统的可靠性。在单片机应用系统中,键盘显示通常可采用以下几种方式: (1)采用并行接口的键盘显示专用芯片8279。但8279所需外围元件多(显示驱动、译码等)、占用电路板面积大、综合成本高,在中小系统中常常大材小用; (2)采用通用并行I/O芯片扩展(如用8155等),但此方案同样需要驱动显示,同时键盘显示扫描还需占用CPU大量时间;

6、 (3)采用专用显示控制器,并用CPU的I/O引脚完成键盘输入(如MC14499、PS7219、MAX7219、ICM7218、TLC5912等,大多是串行接口并有显示驱动能力,I/O占用少)。这种接口方式省去了显示的扫描,而且电路大多也很简单,通常在系统需要的按键较少时比较适用; (4)采用带I2C总线的键盘显示芯片(如显示用SAA1064,键盘用PCF8574),不过这种方式对于无I2C总线接口的CPU来说,编程显得有些不便; (5)采用串行接口的键盘显示专用芯片,如BC728081、HD7279、CH451等。这类芯片占用CPU的资源少,传输速度较快,外围器件要求也较少,在中小系统中都可

7、得到广泛的应用。选择:我选择键盘显示驱动芯片CH4511.3显示选择选用接口芯片。由于其具有寿命长、动态范围广、工作稳定可靠、低功耗和快速的时间响应等优点,成为众多显示媒体中的佼佼者,是户外作业显示理想的选择。用CH451芯片驱动LED点阵有以下特点:速度快,功耗小,动态显示扫描控制,直接驱动64位LED点阵,可以软件控制LED的亮度,以减小功耗。CH451可以通过1线或者可以级联的4线串行接口与单片机等控制器交换数据。CH451的串行接口是由硬件实现的,控制器可以频繁地通过串行接口进行高速操作,而绝对不会降低CH451的工作效率。用它设计的电路,不仅软硬件设计简单,而且功耗低,响应速度快,驱

8、动能力强,占用的IO口线较少,是一种性价比高、应用灵活的设计方案。1.4压力超限报警器件选择很简单,三极管8550待嗡鸣器,当然节省成本考虑用压电片也好,都一样。但是如果考虑充分,用户一定不希望在停电重启后每次都要输入报警值,所以有必要加一个EEPROM进行数据储存。1.5 AD的选择(1)积分型(如TLC7135)积分型AD工作原理是将输入电压转换成时间(脉冲宽度信号)或频率(脉冲频率),然后由定时器/计数器获得数字值。其优点是用简单电路就能获得高分辨率, 但缺点是由于转换精度依赖于积分时间,因此转换速率极低。初期的单片AD转换器大多采用积分型,现在逐次比较型已逐步成为主流。(2)逐次比较型

9、(如TLC0831)逐次比较型AD由一个比较器和DA转换器通过逐次比较逻辑构成,从MSB开始,顺序地对每一位将输入电压与内置DA转换器输出进行比较,经n次比较而输出数字值。其电路规模属于中等。其优点是速度较高、功耗低,在低分辩率(<12位)时价格便宜,但高精度(>12位)时价格很高。(3)并行比较型/串并行比较型(如TLC5510)并行比较型AD采用多个比较器,仅作一次比较而实行转换,又称FLash(快速)型。由于转换速率极高,n位的转换需要2n-1个比较器,因此电路规模也极大,价格也高,只适用于视频AD转换器等速度特别高的领域。串并行比较型AD结构上介于并行型和逐次比较型之间,最

10、典型的是由2个n/2位的并行型AD转换器配合DA转换器组成,用两次比较实行转换,所以称为 Half flash(半快速)型。还有分成三步或多步实现AD转换的叫做分级(Multistep/Subrangling)型AD,而从转换时序角度又可称为流水线(Pipelined)型AD,现代的分级型AD中还加入了对多次转换结果作数字运算而修正特性等功能。这类AD速度比逐次比较型高,电路规模比并行型小。(4)-(Sigma/FONT>delta)调制型(如AD7705)-型AD由积分器、比较器、1位DA转换器和数字滤波器等组成。原理上近似于积分型,将输入电压转换成时间(脉冲宽度)信号,用数字滤波器处

11、理后得到数字值。电路的数字部分基本上容易单片化,因此容易做到高分辨率。主要用于音频和测量。(5)电容阵列逐次比较型电容阵列逐次比较型AD在内置DA转换器中采用电容矩阵方式,也可称为电荷再分配型。一般的电阻阵列DA转换器中多数电阻的值必须一致,在单芯片上生成高精度的电阻并不容易。如果用电容阵列取代电阻阵列,可以用低廉成本制成高精度单片AD转换器。最近的逐次比较型AD转换器大多为电容阵列式的。(6)压频变换型(如AD650)压频变换型(Voltage-Frequency Converter)是通过间接转换方式实现模数转换的。其原理是首先将输入的模拟信号转换成频率,然后用计数器将频率转换成数字量。从

12、理论上讲这种AD 的分辨率几乎可以无限增加,只要采样的时间能够满足输出频率分辨率要求的累积脉冲个数的宽度。其优点是分辩率高、功耗低、价格低,但是需要外部计数电路共同完成AD转换。选择:考虑到成本和外围电路的简洁,我直接选用STC12C5608AD单片机自带的AD。STC12C5608AD系列带A/D转换的单片机的A/D转换口在P1口(P1.7-P1.0),有8路10位高速A/D转换器,STC12C5608AD系列是10位精度的A/D, 速度均可达到100KHz(10万次/秒)。8路电压输入型A/D,可做温度检测、电压检测、按键扫描、频谱检测等。上电复位后P1 口为弱上拉型I/O 口,用户可以通

13、过软件设置将8 路中的任何一路设置为A/D 转换,不需作为A/D 使用的口可继续作为I/O 口使用。这样即节省的I/O端口,减少的外围设备,同时STC12C5608AD提供EEPROM,可以解决设置重量储存的问题。通过,数字滤波处理,可以很好地修正数值,外围加上微功率电压参考二极管LM285连到AD的一个通道做数值校正,可以很好的解决系统误差。第二章、总设计图2.1系统原理框图传感器信号放大电路 A/D转换PC机键盘单片机显示2.2程序流程图 开始读取键盘设定值 增加物料重量 大于设定值 否报警 是第三章、总程序一个主程序和四个头文件(用keil编写):#include<reg52.h&

14、gt;#include"CH451m2t1.h"/*/ LED_printf(uchar *LED_Data); /添加数据的字符串地址 例如:uchar led8=7,6,5,4,3,2,1,0; LED_printc(uchar p,uchar LED_data); /对单个数据显示 第一位是位置,第二位是数值 例如:LED_printc(2,3); LED_prints(unsigned char *led_string); /直接显示字符串地址 例如:LED_prints("123456"); CH451_Init();*/#include&qu

15、ot;STC_AD.h"#include"18B20.h"/#include"STC_EPROM.h"#define uint unsigned int#define uchar unsigned char/char menu;uchar display8=0,19,19,16,16,16,16,17;/将显示内送开设显示缓存区RAM,菜单-温度Cint stcAD7=1000,1000,1000,1000,1000,1000,200;int stcset7=300,1500,1500,1500,1500,1500,1500;int stcte

16、mp7; uint nCount=0;bit ok=0,cancel=0,detect=1,alarm=1; /1为执行,0为不执行/void DisplayChannelTemp(uchar channel) unsigned long tempAD,sum=0; uchar n; for(n=0;n<20;n+) /进行数字滤波处理 GetADCResult(channel); /得到通道的AD值(10位) stcADchannel=(ADC_DATA<<2|ADC_LOW2); if(stcADchannel<10)tempAD=0; else tempAD=(s

17、tcADchannel+1)*1999L/1023; sum+=tempAD; sum/=20; stcADchannel=sum;void ScanAll(void) uchar n; for(n=0;n<7;n+) if(n>0&&n<7) DisplayChannelTemp(n-1); if(n=0) stcAD6=Get_Tmp(); void DisplayAllTemp(void) /显示当前菜单与温度值 if(menu>0&&menu<7) DisplayChannelTemp(menu-1); /当前状态显示 if

18、(stcADmenu-1/1000=0)display3=16; else display3=stcADmenu-1/1000; display4=stcADmenu-1%1000/100; /display5=stcADmenu-1%100/10; display6=stcADmenu-1%10; display0=menu; LED_printf(display); LED_printpointc(6,stcADmenu-1%100/10); if(menu=0) stcAD6=Get_Tmp(); if(stcAD6/1000=0)display3=16; else display3=s

19、tcAD6/1000; display4=stcAD6%1000/100; display6=stcAD6%10; display0=menu; LED_printf(display); LED_printpointc(6,stcAD6%100/10); void delay10ms(void) /误差 -0.173611111111us unsigned char a,b; for(b=200;b>0;b-) for(a=200;a>0;a-);void Copy()uint n; for(n=0;n<7;n+) stctempn=stcsetn;void CopyBack

20、()uint n; for(n=0;n<7;n+) stcsetn=stctempn;void Interrupt()/中断初始化TMOD=0x00;/设置为一方式定时器中断 TH0=0x00;/一方式最长时长4.4msTL0=0x00;/TH1=0x00;/TL1=0x00;TR0=1;/计数器开始计数/TR1=1;ET0=1; /开启定时器中断/ET1=1;EA=1; /开启总中断PT0=1; /设置为低优先级/PT1=0;void main()uint n;menu=0;CH451_Init(); InitADC();Interrupt();while(1) if(detect=1

21、) menu+; if(menu>6)menu=0; for(n=0;n<500;n+) delay10ms(); void Timer0() interrupt 1 using 0/定时扫描键盘 显示 CH451_scan();if(key!=8) Copy(); while(ok!=1 && cancel!=1) CH451_scan(); switch(key) case 3:stcsetmenu+;if(stcsetmenu>1999)stcsetmenu=0;break; case 7:stcsetmenu-;if(stcsetmenu<0)s

22、tcsetmenu=1999;break; case 2:menu+;if(menu>6)menu=0;while(CH451_scan()!=8);break; case 6:menu-;if(menu<0)menu=6;while(CH451_scan()!=8);break; case 0:ok=1;while(CH451_scan()!=8);break; case 1:cancel=1;while(CH451_scan()!=8);break; case 4:detect=detect;while(CH451_scan()!=8);break; case 5:alarm=

23、alarm; while(CH451_scan()!=8);break; default:break; delay10ms(); if(stcsetmenu/1000=0)display3=16; else display3=stcsetmenu/1000; display4=stcsetmenu%1000/100; display6=stcsetmenu%10; display0=menu; LED_printf(display); LED_printpointc(6,stcsetmenu%100/10); if(ok=1)ok=0; else cancel=0;CopyBack(); if

24、(nCount>50) /对于显示依然太快,进行50分频nCount=0;DisplayAllTemp();ScanAll();/更新数据if(alarm=1) if(stcAD6>stcset0| stcAD0>stcset1| stcAD1>stcset2| stcAD2>stcset3| stcAD3>stcset4| stcAD4>stcset5| stcAD5>stcset6) Ming=Ming; else Ming=1;else Ming=1;nCount+;#ifndef _18B20_H_#define _18B20_H_sbi

25、t DQ=P16;sbit Ming=P26;#define uint unsigned int#define uchar unsigned charuint temp=320,setemp=300;/*18B20*/void delay(long i)while(-i);void Init_Ds18b20(void) /DS18B20初始化DQ=0; /单片机拉低总线delay(500); /精确延时,维持至少480usDQ=1; /释放总线,即拉高了总线delay(200); /此处延时有足够,确保能让DS18B20发出存在脉冲。uchar Read_One_Byte() /读取一个字节的

26、数据 /读数据时,数据以字节的最低有效位先从总线移出uchar i=0;uchar dat=0;for(i=8;i>0;i-) DQ=0; /将总线拉低,要在1us之后释放总线 /单片机要在此下降沿后的15us内读数据才会有效。 _nop_(); _nop_(); /至少维持了1us,表示读时序开始 dat>>=1; /让从总线上读到的位数据,依次从高位移动到低位。 DQ=1; /释放总线,此后DS18B20会控制总线,把数据传输到总线上delay(2); /延时7us,此处参照推荐的读时序图,尽量把控制器采样时间放到读时序后的15us内的最后部分 if(DQ) /控制器进行

27、采样 dat|=0x80; /若总线为1,即DQ为1,那就把dat的最高位置1;若为0,则不进行处理,保持为0 delay(26); /此延时不能少,确保读时序的长度60us-很重要return (dat);void Write_One_Byte(uchar dat)uchar i=0;for(i=8;i>0;i-) DQ=0; /拉低总线 _nop_(); _nop_(); /至少维持了1us,表示写时序(包括写0时序或写1时序)开始 DQ=dat&0x01; /从字节的最低位开始传输 /指令dat的最低位赋予给总线,必须在拉低总线后的15us内, /因为15us后DS18B2

28、0会对总线采样。 delay(26); /必须让写时序持续至少60us -很重要 DQ=1; /写完后,必须释放总线, /* _nop_(); */ dat>>=1; /因为15us后DS18B20会对总线采样。delay(1);uint Get_Tmp() /获取温度float t;uchar a=0,b=0;Init_Ds18b20(); /初始化Write_One_Byte(0xcc); /忽略ROM指令Write_One_Byte(0x44); /温度转换指令delay(60000);Init_Ds18b20(); /初始化Write_One_Byte(0xcc); /忽略

29、ROM指令Write_One_Byte(0xbe); /读读RAM的存储器指令a=Read_One_Byte(); /读取到的第一个字节为温度LSBb=Read_One_Byte(); /读取到的第二个字节为温度MSBtemp=b;temp=temp<<8;temp=temp|a;t=temp*0.0625;temp=t*10+0.5; return(temp);#endif#ifndef _CH451_H_#define _CH451_H_/*/ LED_printf(uchar *LED_Data); /添加数据的字符串地址 例如:uchar led8=7,6,5,4,3,2,

30、1,0; LED_printc(uchar p,uchar LED_data); /对单个数据显示 第一位是位置,第二位是数值 例如:LED_printc(2,3); LED_prints(unsigned char *led_string); /直接显示字符串地址 例如:LED_prints("123456"); CH451_Init();*/*/#include<reg52.h>#define uint unsigned int#define uchar unsigned char#define CH451_DIG0 0x0800 /对CH451输出管脚进行

31、定义#define CH451_DIG1 0x0900#define CH451_DIG2 0x0a00#define CH451_DIG3 0x0b00#define CH451_DIG4 0x0c00#define CH451_DIG5 0x0d00#define CH451_DIG6 0x0e00#define CH451_DIG7 0x0f00sbit DOUT=P22; /串行接口数据输出sbit LOAD=P23; /串行数据加载sbit DIN =P33; /串行数据输入sbit DCLK=P34; /串行数据时钟线uchar key=1,keyold=2;/*针对m2t1板BC

32、D转换* 文件名:unsigned char BCD 功能:由于SEG07与adp不对应,编驱动转换 入口参数:无 出口参数:无*/unsigned char code BCD=0xbe,0x24,0xea,0xe6, /0,1,2,3, 0x74,0xd6,0xde,0xa4, /4,5,6,7, 0xfe,0xf6,0xfc,0x5e, /8,9,a,b, 0x4a,0x6e,0xda,0xd8, /c,d,e,f, 0x00,0xda,0x24,0x40; /0x10无显示(16),0x11度(17),0x12双点(18),0x13-号(19)unsigned char code BCD

33、Point=0xbf,0x25,0xeb,0xe7, /0,1,2,3, 0x75,0xd7,0xdf,0xa5, /4,5,6,7, 0xff,0xf7;/*向CH451发送指令*名称:void CH451_Write(uint dat,uint length)功能:向CH451发送指令入口参数:uint dat 需要发送的指令 uint length 发送指令(dat)的长度出口参数:无*/void CH451_Write(unsigned dat) /uint length uint i; LOAD=1; /串行数据加载端置1 for(i=12;i>0;i-) DCLK=0; /串

34、行数据时钟线 置0 if(dat&0x01)=0x01) /判断data最低位是否为1 DIN=1; / data最低位为1的话就向din(串行数据输入)写1 else DIN=0; / data最低位为0的话就向din(串行数据输入)写0 DCLK=1; /串行数据时钟线 置1 dat=dat>>1; /data向右移动一位 LOAD=0; /串行数据加载端置1 LOAD=1; /给load一个上升沿使data数据全部导入CH451 /*数码显示*名称:void LED_Display(LED_Data1,LED_Data2,LED_Data3,LED_Data4, LE

35、D_Data5,LED_Data6,LED_Data7,LED_Data8)功能:数码显示横向位置转换入口参数:LED_Data1,LED_Data2,LED_Data3,LED_Data4,LED_Data5, LED_Data6,LED_Data7,LED_Data8 需要显示的代码出口参数:无*/void LED_printf(uchar *LED_Data) CH451_Write(CH451_DIG2|BCD LED_Data7 );/第8位显示,LED_Data8位要显示的内容 CH451_Write(CH451_DIG1|BCD LED_Data6 );/第7位显示 CH451_

36、Write(CH451_DIG3|BCD LED_Data5 );/第6位显示 CH451_Write(CH451_DIG0|BCD LED_Data4 );/第5位显示 CH451_Write(CH451_DIG4|BCD LED_Data3 );/第4位显示 CH451_Write(CH451_DIG5|BCD LED_Data2 );/第3位显示 CH451_Write(CH451_DIG6|BCD LED_Data1 );/第2位显示 CH451_Write(CH451_DIG7|BCD LED_Data0 );/第1位显示 void LED_printc(uchar p,uchar

37、LED_data) switch(p) case 8:CH451_Write(CH451_DIG2|BCD LED_data );break;/第8位显示,LED_Data8位要显示的内容 case 7:CH451_Write(CH451_DIG1|BCD LED_data );break;/第7位显示 case 6:CH451_Write(CH451_DIG3|BCD LED_data );break;/第6位显示 case 5:CH451_Write(CH451_DIG0|BCD LED_data );break;/第5位显示 case 4:CH451_Write(CH451_DIG4|B

38、CD LED_data );break;/第4位显示 case 3:CH451_Write(CH451_DIG5|BCD LED_data );break;/第3位显示 case 2:CH451_Write(CH451_DIG6|BCD LED_data );break;/第2位显示 case 1:CH451_Write(CH451_DIG7|BCD LED_data );break;/第1位显示 void LED_printpointc(uchar p,uchar LED_data) switch(p) case 8:CH451_Write(CH451_DIG2|BCDPoint LED_d

39、ata );break;/第8位显示,LED_Data8位要显示的内容 case 7:CH451_Write(CH451_DIG1|BCDPoint LED_data );break;/第7位显示 case 6:CH451_Write(CH451_DIG3|BCDPoint LED_data );break;/第6位显示 case 5:CH451_Write(CH451_DIG0|BCDPoint LED_data );break;/第5位显示 case 4:CH451_Write(CH451_DIG4|BCDPoint LED_data );break;/第4位显示 case 3:CH451

40、_Write(CH451_DIG5|BCDPoint LED_data );break;/第3位显示 case 2:CH451_Write(CH451_DIG6|BCDPoint LED_data );break;/第2位显示 case 1:CH451_Write(CH451_DIG7|BCDPoint LED_data );break;/第1位显示 void LED_prints(unsigned char *led_string) unsigned char i=0; while(led_stringi!=0x00) if(led_stringi>='0'&&

41、amp;led_stringi<='9') LED_printc(i+1,led_stringi-0x30); else if(led_stringi>='a'&&led_stringi<='z') LED_printc(i+1,led_stringi-'a'+10); i+; /*键盘传出准备* 文件名:void KeyStart() 功能:传送0111 到DIN 入口参数:无 出口参数:无*/void KeyStart() uint i,dat=0x07; LOAD=1; /串行数据加载端置1

42、 for(i=4;i>0;i-) DCLK=0; /串行数据时钟线 置0 if(dat&0x01)=0x01) /判断data最低位是否为1 DIN=1; / data最低位为1的话就向din(串行数据输入)写1 else DIN=0; / data最低位为0的话就向din(串行数据输入)写0 DCLK=1; /串行数据时钟线 置1 dat=dat>>1; /data向右移动一位 LOAD=0; /串行数据加载端置1 LOAD=1; /给load一个上升沿使data数据全部导入CH451/*对传出数据对应转换* 文件名:CH451_ReadChange() 功能:转换

43、输入7位到数字 入口参数:无 出口参数:无*/CH451_ReadChange(uint dat) uint a; switch(dat) case 0x40: a=0; break;/0键按下按键 case 0x43: a=1; break;/1键按下按键 case 0x41: a=2; break;/2键按下按键 case 0x42: a=3; break;/3键按下按键 case 0x48: a=4; break;/4键按下按键 case 0x4b: a=5; break;/5键按下按键 case 0x49: a=6; break;/6键按下按键 case 0x4a: a=7; break;/7键按下按键/* case 0x00: a=10; break;/0键释放按键 case 0x03: a=11; break;/1键释放按键 case 0x01: a=12; break;/2键释放按键 case 0x02: a=13; break;/3键释

温馨提示

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

评论

0/150

提交评论