智能电子称设计_第1页
智能电子称设计_第2页
智能电子称设计_第3页
智能电子称设计_第4页
智能电子称设计_第5页
已阅读5页,还剩26页未读 继续免费阅读

下载本文档

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

文档简介

智能电子秤设计制作人:肖光敏【摘要】本系统采用单片机AT89S52为控制核心,实现电子秤的根本控制功能。系统的硬件局部包括最小系统板,数据采集、人机交互界面三大局部。最小系统局部主要是扩展了外部数据存储器,数据采集局部由压力传感器、信号的前级处理和A/D转换局部组成。人机界面局部为键盘输入,12864点阵式液晶显示,可以直观的显示中文,使用方便。软件局部应用单片机C语言实现了本设计的全部控制功能,包括根本的称重功能,和发挥局部的显示购物清单的功能,可以设置日期和重新设定10种商品的单价,具有超重报警功能,由于系统资源丰富,还可以方便的扩展其应用【关键字】电阻应变式传感器A/D单片机液晶显示【Abstract】Thesystemusesasingle-chipAT89S52forthecontrolofthecore,therealizationofelectronicscalesbasiccontrolfunctions.Systemhardware,includingtheminimumsystemboard,dataacquisition,threemajorhuman-computerinteractioninterface.MinimumSystemispartoftheexpansionoftheexternaldatastorage,dataacquisitioninpartbythepressuresensors,signalpre-processingandA/Dconversionparts.Partofman-machineinterfaceforkeyboardinput,12,864dot-matrixliquidcrystaldisplaycanshowtheChineseintuitiveandeasytouse.ApplicationsoftwareClanguagerealizationofsingle-chipdesignofallthecontrolfunctions,includingbasicweighingfunctions,Andplaytodisplayalistofsomeofthefeatures,youcansetthedateandre-settingunit10kindsofcommodities,withoverweightalarmfunction,thesystemisrichinresources,butalsofacilitatetheexpansionofitsapplication【Keyword】ResistancestrainsensorA/Dsingle-chipliquidcrystaldisplay【目录】1、前言……………32、方案比拟及论证………………32.1题目要求…………………32.2主要器件的选择……….42.2.1单片机主控制器件的选择………….42.2.2称重传感器的选择………………….42.2.3放大电路芯片的选择…………………42.2.4A/D转换芯片的选择……………….52.2.5显示器件的选择…….63、硬件系统设计…………………63.1系统设计流程图………….63.2、单元电路设计…………73.2、1单片机主控器件电路…………………73.2、2信号采集及放大电路……………….73.2、3A/D转换电路…………93.2、4按键操作电路………93.2、512864液晶显示电路………………104、软件系统设计…………………114.1单元模块设计……………114.1.1A/D转换软件设计………………114.1.2按键操作设计…………………124.1.312864液晶显示…………………125、测试结果………136、总结……………137、参考文献………138、附录……………141.前言现代信息技术的三大根底是信息的采集、传输和处理技术,即传感技术、通信技术和计算机技术,它们分别构成了信息技术系统的“感官”、“神经”和“大脑”。信息采集系统的首要部件是传感器,且置于系统的最前端。在一个现代自动检测系统中,如果没有传感器.就无法监测与控制表征生产过程中各个环节的各种参量,也就无法实现自动控制。在现代技术中,传感器实际上是现代测试技术和自动化技术的根底科学技术的飞速开展,由称重传感器制作的电子衡器也已广泛地应用到各行各业,实现了对物料的快速、准确的称量。特别是随着微处理机的出现,工业生产过程自动化程度化的不断提高,称重传感器已成为过程控制中的一种必需的装置,从以前不能称重的大型罐、料斗等重量计测以及吊车秤、汽车秤等计测控制,到混合分配多种原料的配料系统、生产工艺中的自动检测和粉粒体进料量控制等,都应用了称重传感器,目前,称重传感器几乎运用到了所有的称重领域。为了提高我们对数据采集及数据处理方面知识的处理能力,并且考虑到作品的实用性和个人兴趣等因数,我们设计了一台基于51单片机的智能电子秤。本系统通过称重传感器采样,A/D转换后输入单片机,通过按键设置单价后,经过单片机主控制器件的处理后,液晶上就会显示:商品的名称、数量、重量,单价、本次购物总金额,同时语音播报以上内容,到达了数字化、智能化的要求。2方案比拟与论证2.1题目要求2.1.1根本要求:1.采用简易键盘设置单价,对采集到的代表重量的信号能同时显示重量、金额和单价商品名称;2.显示的单位为公斤,最大称重为80斤;3.单价的单位为元,最大金额数值为99.9元;4.总额累加计算功能;5.自拟4种商品名称,能显示购物清单,清单内容包括:商品名称,数量,重量,单价、本次购物总金额;2.1.2发挥局部:1.允许用电压值可预置的直流电压代表重量采集信号,可以用代号表示购物清单的各项信息。2.具有超重报警功能。2.2主要器件的选择2.2.1单片机主控制器件的选择本系统基于51系列单片机来实现,因为系统需要大量的控制液晶显示和键盘。不宜采用大规模可编程逻辑器件:CPLD、FPGA来实现。另外系统没有其它高标准的要求,我们最终选择了AT89S52通用的比拟普通单片机来实现系统设计。内部带有8KB的程序存储器,在外面扩展了32K数据存储器,以满足系统要求。2.2.2称重传感器的选择称重传感器按转换方法分为光电式、液压式、电磁力式、电容式、磁极变形式、振动式、陀螺仪式、电阴应变式等8类,以电阻应变式使用最广。

电阻应变式称重传感器是利用电阻应变片变形时其电阻也随之改变的原理工作的,其内部结构如图1所示。主要由弹性元件、电阻应变片、测量电路和传输电缆4局部组成。电阻应变片贴在弹性元件上,弹性元件受力变形时,其上的应变片随之变形,并导致电阻改变。测量电路测出应变片电阻的变化并变换为与外力大小成比例的电信号输出。电信号经处理后以数字形式显示出被测物的质量。图1CZL-108平行梁式称重传感器内部原理图电阻应变式传感器的称量范围为300g至数千kg,计量准确度达1/1000~1/10000,结构较简单,可靠性较好。大局部电子衡器均使用此传感器。2.2.3放大电路芯片的选择传感器输出信号与作用在传感器上的重力和供桥桥压成正比,而且供桥桥压U的变化直接影响电子秤的测量精度,所以要求桥压很稳定。毫伏级的传感器输出电压经过放大电路后,要求其输出的信号要能保证A/D转换电路的正常工作。综合考虑,我们选用精密放大电路或仪用放大电路。芯片我们选用的是OP07与AD620,具体的电路图及原理我们后面会详细的讲解。OP07芯片是一种低噪声,非斩波稳零的双极性运算放大器。由于它具有非常低的输入失调电压〔对于OP07A最大为25μV〕,所以OP07在很多应用场合不需要额外的调零措施。OP07同时具有输入偏置电流低〔OP07A为±2nA〕和开环增益高〔对于OP07A为300V/mV〕的特点,这种低失调、高开环增益的特性使得OP07特别适用于高增益的测量设备和放大传感器的微弱信号等方面。AD620为高精密的仪表放大器,所以使用OP07与AD620构成一个两级大电路可以保证A/D正常工作。2.2.4A/D转换芯片的选择称重传感器实质就是压力传感器,其采集的压力信号是模拟量,单片机系统内部运算时用的都是数字量,即0和1,因此对于单片机而言我们无法直接操作模拟量,必须将模拟量转换为数字量。这就需要在单片机前段加上模拟量/数字量转换器〔A/D〕,所谓A/D转换器就是模拟/数字转换器〔ADC〕,是将输入的模拟信号转换成数字信号。信号输入端可以是传感器或转换器的输出,而ADC的数字信号也可能提供给微处理器,以便广泛地应用。综合考虑各种因素我们选用逐次比拟型A/D转换集成芯片ADC0804,它采用CMOS工艺20引脚集成芯片,分辨率为8位,转换时间为100us,输入电压范围为0—5V。芯片内部具有三态输出数据锁存器,可直接连接在数据总线上。图4为ADC0804双列直插式封装引脚图。图4ADC0804双列直插式封装引脚图引脚功能介绍:/CS芯片选择信号。/RD外部读取转换结果的控制输出信号。/RD为HI时,DB0~DB7处理高阻抗:/RD为LO时,数字数据才会输出。/WR:用来启动转换的控制输入,相当于ADC的转换开始〔/CS=0时〕,当/WR由HI变为LO时,转换器被去除:当/WR回到HI时,转换正式开始。CLKIN,CLKR:时钟输入或接振荡无件〔R,C〕频率约限制在100KHZ~1460KHZ,如果使用RC电路那么其振荡频率为1/〔1.1RC〕/INTR:中断请求信号输出,低地平动作.VIN(+)VIN(-):差动模拟电压输入.输入单端正电压时,VIN(-)接地:而差动输入时,直接参加VIN(+)VIN(-).AGND,DGND:模拟信号以及数字信号的接地.VREF:辅助参考电压.DB0~DB7:8位的数字输出.VCC:电源供给以及作为电路的参考电压.2.2.5显示器件的选择因为题目要求能显示购物清单,清单内容包括:商品名称,数量,重量,单价、本次购物总金额;考虑到显示直观,电路结构简单,变成容易请偶们考虑选择液晶做显示器件,再从显示内容上考虑我们选用12864液晶。带中文字库的128X64是一种具有4位/8位并行、2线或3线串行多种接口方式,内部含有国标一级、二级简体中文字库的点阵图形液晶显示模块;其显示分辨率为128×64,内置8192个16*16点汉字,和128个16*8点ASCII字符集.利用该模块灵活的接口方式和简单、方便的操作指令,可构成全中文人机交互图形界面。可以显示8×4行16×16点阵的汉字.也可完成图形显示.低电压低功耗是其又一显著特点。由该模块构成的液晶显示方案与同类型的图形点阵液晶显示模块相比,不管硬件电路结构或显示程序都要简洁得多,且该模块的价格也略低于相同点阵的图形液晶模块。3.1系统设计流程图本系统由信号采集及放大、A/D转换、按键操作、单片机、显示电路组成如图5所示信号放大信号放大A/D转换单片机存储电路键盘操作信号采集声响电路12864液晶显示图5系统设计流程图3.2单元电路设计3.2.1单片机主控器件电路单片机最小系统能够运行的必要条件:电源、晶振电路、复位电路。如图6所示:其中XTAL1〔19脚〕、XTAL2〔18脚〕外接晶振电路,RST(9脚)接复位电路。P0口控制12864液晶显示电路,P1口控制A/D转换电路,P2口控制键盘操做电路,P3口控制特殊引脚。图6单片机控制电路3.2.2信号采集及放大电路电阻应变式称重传感器实物图如图7所示,引出线为四芯,红〔输入+〕、白〔输出-〕、黑(输入-)、绿(输出+)。接线方法是红黑分别接电源正负端,绿白分别接信号的输出端,为确保精度,一般不要调整线长。在电阻应变传感器中其作用的是桥式测量电路。桥式测量电路有四个电阻,电桥的一个对角线接入工作电压E,另一个对角线为输出电压Uo。其特点是:当四个桥臂电阻到达相应的关系时,电桥输出为零,否那么就有电压输出,可利用灵敏检流计来测量,所以电桥能够精确地测量微小的电阻变化。测量电桥如图8所示:R1R1R2R3R4R5R6RP1E图8称重传感器测量电桥图7称重传感器实物图它由箔式电阻应变片电阻R1、R2、R3、R4组成测量电桥,测量电桥的电源由稳压电源E供给。物体的重量不同,电桥不平衡程度不同,指针式电表指示的数值也不同。滑动式线性可变电阻器RP1作为物体重量弹性应变的传感器,组成零调整电路,当载荷为0时,调节RP1使数码显示屏显示零。如图9所示:AD620仪表放大器的1、8脚跨接一电阻可以调整放大倍数,4、7脚接正常工作所需的电压值相等的正负电压,2、3脚接输入电压即可从6脚输出放大后的电压。引脚5那么是参考基准,如果接地那么引脚6的输出即为与地之间的相对电压。图9AD620引脚图和放大电路由于称重传感器采集的电压信号为毫伏级,而A/D转换电路的工作电压为0-5V,为了保证A/D正常工作,以及采样信号的稳定性我们采用两级放大。电路图为图10。图10信号采集及放大电路3.2.3A/D转换电路A/D转换电路完成模拟量到数字量之间的变换,把称重传感器采集的模拟信号转换成单片机可以识别的数字信号,经过预设的算法后得到我们想要的结果。具体连线如图11所示图11A/D转换电路3.2.4按键操作电路依照题目要求,为实现单价预设功能我们采用4*4矩阵键盘,由P2口控制。具体连线图及各按键的功能如图12所示图12按键操作及功能介绍3.2.512864液晶显示电路12864液晶属于图形型液晶,由128列64行组成,即共有128*64个点来显示各种图形。12864液晶串行接口与并行接口共用,我们采用的是并行接口。12864液晶与单片机连接图如图13所示:图13液晶驱动电路4、软件系统设计4.1单元模块设计4.1.1A/D转换软件设计数字芯片在操作时首先要分析它的操作时序图,图16ADC0804启动转换时序图,图17为ADC0804读取数据时序图。写程序时只需按图14与图15就能准确地操作A/D转换电路。CSCSWR内部转换状态INTR上次资料未被读取转换完成100nSTWI8/F内部转换时间TCLK/2300nS~450nSCSWRINTR上次资料已被读取准备准换TW=TWI8/FTCLK/2300nS~450nS图14ADC0804启动转换时序图图15为ADC0804读取数据时序图4.1.2按键操作设计按键功能参考图12,软件设计流程图如图16所示:进入设定单价模式,每按下一个数字键就将相应的数字存入设定好的数组中进入设定单价模式,每按下一个数字键就将相应的数字存入设定好的数组中,完成此功能将会用到S12、S13、S14、S15、S16键进入调用已存储商品调用模式进入显示存储总金额模式返回判断S13是否按下Num=1Num=2Num=3Num=4S13按下num次num初值为0图16按键操作流程4.1.312864液晶显示12864液晶有串行与并行操作方式,我们采用的是并行方式,其并行根本操作时序图为图17,汉字显示坐标为图18。图1712864并行操作方式时序图图1812864汉字显示坐标图5、测试结果经过硬件与软件的综合调试根本完成了设计要求的根本功能及发挥局部的功能。介于对电子秤应用的分析与展望,其功能我们还将继续开发,尽量将其做得更加完善,以适应科技高速开展的需求。6、总结学贵以致用,通过几天的电子秤设计过程,将从书本上学到的知识应用于实践,学会了初步的电子电路仿真设计,虽然过程中遇到了一些困难,但是在解决这些问题的过程无疑也是对自己自身专业知识的一种提高。当最终调试成功的时候也是对自己的一种肯定。此次的设计作业不仅增强了自己在专业设计方面的信心,鼓舞了自己,更是一次兴趣的培养,为自己以后的学习方向的明确了重点。

另外在这次实验中我们遇到了不少的问题针对不同的问题我们采取不同的解决方法,遇到不懂的问题时,利用网上的资源,搜索查找得到需要的信息。

最终一一解决设计中遇到的问题。通过错误排除最终确认是传感器的问题。我觉得我们能够顺利完成此设计的关键是团队合作,当然知识储藏也不能忽略。7、参考文献[1]童诗白模拟电子技术根底[]北京:高等教育出版社,2002.78-79.[2]张靖检测技术与系统设计[]北京:中国电力出版社,2001.368-369.[3]何小艇.电子系统设计[第三版][M].杭州:浙江大学出版社,2004[4]施汉谦.电子秤技术[J].北京:中国计量出版社,2001:225-259[5]薛均义.MCS-51系列单片微型计算机应用[M].西安:西安交通大学出版社,2002[6]谭浩强.C程序设计〔第三版〕.北京:清华大学出版社,20048、附录#include<reg52.h>#include<stdlib.h>#include<intrins.h>#include<keyscan.h>#defineucharunsignedchar#defineuintunsignedintsbitLCD_RS=P3^0;sbitLCD_RW=P3^1;sbitLCD_EN=P3^2;sbitLCD_PSB=P3^3;sbitfmq=P3^4;sbitAD_CS=P3^5;sbitAD_WR=P3^6;sbitAD_RD=P3^7;ucharad_data; //ad输入*0.3125就是重量 ucharnum,m;floatsave=0.0,price;ucharcodedata0[]={"商品:"};ucharcodedata1[]={"单价:"};ucharcodedata2[]={"重量:"};ucharcodedata3[]={"总金额:"};ucharcodedata4[]={"商品总量:"};ucharcodedata0_1[]={"西瓜"};ucharcodedata0_2[]={"橘子"};ucharcodedata0_3[]={"苹果"};ucharcodedata0_4[]={"梨子"};ucharcodedata5[]={"谢谢!"};voidtotal_price();uintzhishu(ucharx);voiddelay(uintz);ucharkeyscan();voidinit();voidlcd_address(uchara,uchary);voidwrite_lcd(ucharadd,ucharrs);voidad();voidmain(){ init(); while(1){ keyscan(); ad(); total_price(); }}uintzhishu(ucharx){ uchari,a=1; if(x>=1){ for(i=1;i<=x;i++){ a=10*a; } returna; } else{ return1; }}voiddelay(uintz){ uintx,y; for(x=0;x<z;x++){ for(y=0;y<110;y++); }}/*********************读取单价价格**************/voidtotal_price(){ uchari,j=0,n; uchartotal[9]; floatdanjia; floatk=0; ucharhc[]={0,0,0,0,0};//缓存输入键盘单价数据 ucharhc1[]={0,0,0,0,0}; ucharflag=0,a=0; uintda1[6]={0,0,0,0,0,0}; flag=0; n=0; while(num==1){ write_lcd(0x01,0); while(keyscan()!=16){ lcd_address(1,0); while(data1[n]!='\0'){ //显示单价二字 write_lcd(data1[n],1); n++; } n=0; /*************按矩阵键盘设定单价*******/ if(keyscan()==1 ){ hc[flag]=1; hc1[flag]=1+0x30; flag++; } if(keyscan()==2 ){ hc[flag]=2; hc1[flag]=2+0x30; flag++; } if(keyscan()==3 ){ hc[flag]=3; hc1[flag]=3+0x30; flag++; } if(keyscan()==4 ){ hc[flag]=4; hc1[flag]=4+0x30; flag++; } if(keyscan()==5 ){ hc[flag]=5; hc1[flag]=5+0x30; flag++; } if(keyscan()==6 ){ hc[flag]=6; hc1[flag]=6+0x30; flag++; } if(keyscan()==7 ){ hc[flag]=7; hc1[flag]=7+0x30; flag++; } if(keyscan()==8 ){ hc[flag]=8; hc1[flag]=8+0x30; flag++; } if(keyscan()==9 ){ hc[flag]=9; hc1[flag]=9+0x30; flag++; } if(keyscan()==10){ hc[flag]=0; hc1[flag]=0+0x30; flag++; } if(keyscan()==11){ hc[flag]=0x2e; hc1[flag]=0x2e; flag++; j=flag;//j为点的位数 a=1; } if(keyscan()==12){ write_lcd(0x01,0); lcd_address(1,0); while(data1[n]!='\0') { write_lcd(data1[n],1); n++; } n=0; for(i=0;i<flag-1;i++) write_lcd(hc1[i],1); break; } for(i=0;i<flag;i++) write_lcd(hc1[i],1); }/***************显示重量***************/ da1[0]=(int)(ad_data*0.417)/10+0x30;//转换成重量并保存十位 da1[1]=(int)(ad_data*0.417)%10+0x30; //保存个位 da1[2]='.'; da1[3]=(int)(ad_data*4.17)%10+0x30; //保存十分位 da1[4]=(int)(ad_data*41.7)%10+0x30; //保存百分位 da1[5]=(int)(ad_data*417)%10+0x30; //保存千分位 lcd_address(2,0); while(data2[n]!='\0'){ write_lcd(data2[n],1); //显示重量 n++; } n=0; lcd_address(2,3); for(i=0;i<6;i++) write_lcd(da1[i],1);/**************测试指数****************//* tota2[0]=9*zhishu(2)/100+0x30; tota2[1]=8*zhishu(1)%100/10+0x30; tota2[2]=7*zhishu(0)%10+0x30; for(i=0;i<3;i++) write_lcd(tota2[i],1);*//**************将数字字符串转化十进制数*************************/ if(a==1) { for(i=1;i<j;i++){ //计算单价整数局部 k=(hc[i-1])*zhishu(j-1-i)+k; } for(i=j+1;i<=flag;i++){//计算小数局部 k=(hc[i-1])*1.0/(zhishu(i-j))+k; } } else for(i=1;i<=flag;i++) k=hc[i-1]*zhishu(flag-i)+k; danjia=k; k=0; flag=0;/*************计算和显示总金额**********************/ price=danjia*(ad_data*0.417); total[0]=(int)price/1000+0x30; //取出总金额的各位 total[1]=(int)price%1000/100+0x30; total[2]=(int)price%100/10+0x30; total[3]=(int)price%10+0x30; total[4]=0x2e; total[5]=(int)price*10%10+0x30; total[6]=(int)price*100%10+0x30; total[7]=(int)price*1000%10+0x30; total[8]=(int)price*10000%10+0x30; lcd_address(3,0); while(data3[n]!='\0'){ write_lcd(data3[n],1); n++; } n=0; for(i=0;i<9;i++) write_lcd(total[i],1);/****************************测试单价值*****************************//* tota2[0]=(int)danjia/10+0x30; //write_lcd(tota2[0]+hc1[0],1); tota2[1]=(int)danjia%10+0x30; tota2[2]=0x2e; tota2[3]=(int)(danjia*10)%10+0x30; for(i=0;i<=3;i++) write_lcd(tota2[i],1);*//******************************************/ while(keyscan()!=13); }/***************************************/ while(num==2){ write_lcd(0x01,0); lcd_address(0,0); while(keyscan()!=16){ switch(keyscan()){ case1:danjia=10; while(data0_1[n]!='\0'){ write_lcd(data0_1[n],1); n++; } n=0; write_lcd(0x31,1); break; case2:danjia=15; while(data0_2[n]!='\0'){ write_lcd(data0_2[n],1); n++; } n=0; write_lcd(0x32,1); break; case3:danjia=20; while(data0_3[n]!='\0'){ write_lcd(data0_3[n],1); n++; } n=0; write_lcd(0x33,1); break; case4:danjia=25; while(data0_4[n]!='\0'){ write_lcd(data0_4[n],1); n++; } n=0; write_lcd(0x34,1); break; } } lcd_address(1,0); while(data1[n]!='\0'){ write_lcd(data1[n],1); n++; } write_lcd((uchar)danjia/10+0x30,1); write_lcd((uchar)danjia%10+0x30,1); n=0; da1[0]=(int)(ad_data*0.417)/10+0x30;//转换成重量并保存十位 da1[1]=(int)(ad_data*0.417)%10+0x30; //保存个位 da1[2]='.'; da1[3]=(int)(ad_data*4,17)%10+0x30; //保存十分位 da1[4]=(int)(ad_data*41.7)%10+0x30; //保存百分位 da1[5]=(int)(ad_data*417)%10+0x30; //保存千分位 lcd_address(2,0); while(data2[n]!='\0'){ write_lcd(data2[n],1); //显示重量 n++; } n=0; lcd_address(2,3); for(i=0;i<6;i++) write_lcd(da1[i],1); price=danjia*(ad_data*0.417); total[0]=(int)price/1000+0x30; //取出总金额的各位 total[1]=(int)price%1000/100+0x30; total[2]=(int)price%100/10+0x30; total[3]=(int)price%10+0x30; total[4]=0x2e; total[5]=(int)price*10%10+0x30; total[6]=(int)price*100%10+0x30; total[7]=(int)price*1000%10+0x30; total[8]=(int)price*10000%10+0x30; lcd_address(3,0); while(data3[n]!='\0'){ write_lcd(data3[n],1); n++; } n=0; for(i=0;i<9;i++) write_lcd(total[i],1); while(keyscan()!=13); }/********************************************/ while(num==3){ write_lcd(0x01,0); /*************取出总金额的各位并显示**************/ total[0]=(int)save/1000+0x30; total[1]=(int)save%1000/100+0x30; total[2]=(int)save%100/10+0x30; total[3]=(int)save%10+0x30; total[4]=0x2e; total[5]=(int)save*10%10+0x30; total[6]=(int)save*100%10+0x30; total[7]=(int)save*1000%10+0x30; total[8]=(int)save*10000%10+0x30; lcd_address(2,0); while(data3[n]!='\0'){ write_lcd(data3[n],1); n++; } n=0; for(i=0;i<9;i++) write_lcd(total[i],1); lcd_address(1,0); while(data4[n]!='\0'){ write_lcd(data4[n],1); n++; } n=0; write_lcd(0x30+m,1); lcd_address(3,5); while(data5[n]!='\0') { write_lcd(data5[n],1); n++; } n=0; while(keyscan()!=13); }/****************************************/ if(num==4){ num=0; write_lcd(0x01,0); } }ucharkeyscan(){ uchara; ucharkey; P2=0xfe; a=P2&0xf0; fmq=1;//蜂鸣器 while(a!=0xf0) { delay(10); a=P2&0xf0; switch(a) { case0xe0:key=1;break; case0xd0:key=2;break; case0xb0:key=3;break; case0x70:key=4;break; } fmq=0; while(a!=0xf0){ a=P2&0xf0; } fmq=1; returnkey; } P2=0xfd; a=P2&0xf0; while(a!=0xf0) { delay(10); a=P2&0xf0; switch(a) { case0xe0:key=5;break; case0xd0:key=6;break; case0xb0:key=7;break; case0

温馨提示

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

评论

0/150

提交评论