1、电子系统综合设计电子系统综合设计题 目 基于DS18B20的智能温度检测系统 学 号 姓 名 所 属 系 机械工程学院 专 业 电子信息工程 班 级 10级电信本一班 指导教师 摘要DS18B20是一种可组网的高精度数字式温度传感器,由于其具有单总线的独特优点,可以使用户轻松地组建起传感器网络,并可使多点温度测量电路变得简单、可靠。本文结合实际使用经验,介绍了DS18B20数字温度传感器在单片机下的硬件连接及软件编程,并给出了软件流程图。在此次设计中,我们采用LED显示温度,实现并焊接制作一个具有多种I/O接口的综合性功能电路,温度的测量值要精确到小数点的后1位,并采用单片机编程的方式使其使用
2、方便、精度高。另外还通过protues软件对设计的数字钟进行了有效的仿真,使得设计的电子产品更具有实用性,该系统可应用于仓库测温、楼宇空调控制和生产过程监控等领域。关键字:温度测量;LED;数字温度传感器;单片机Abstract As a kind of high-accuracy digital net temperature sensor,DS18 B20 can be used building a sensor net easily. It can also make the net simple and reliable with its special 1-wire interfa
3、ce .This paper introduces the application of DS18B20 with single chip processor.The system is constituted by two parts the temperature measured part and displayed part. The temperature measured part has a RS232 interface. It used AT89C51 of ATMEL company and DS18B20 of DALLAS company .The displayed
4、part uses PC .This system is applied in such domains as warehouse detecting temperature;air-conditioner controlling system in building and supervisory productive process etc.Key words:temperature measure;LED;digital thermometer;single chip processor目录摘要2Abstract31绪论52整体方案设计5 2.1 STC89C51单片机基础5 2.2 D
5、S18B20的基本性质63智能温度检测系统的硬件设计83.1 LED电路83.2 STC89C51单片机电路93.3 DS18B20电路124智能温度检测系统的软件设计15 4.1 系统软件设计流程图15 4.2 智能温度检测系统的源程序代码17 4.3 只能温度检测系统的原理图245系统硬件仿真24 5.1 硬件仿真的介绍24 5.2仿真结果现象描述256总结 26参考文献271 绪论在工、农业生产和日常生活中,对温度的测量及控制占据着极其重要地位。消防电气的非破坏性温度检测,电力电讯设备 之过热故障预知检测,空调系统的温度检测,各类运输工具之组件的过热检测,保全与监视系统之应用,医疗与健诊
6、的温度测试,化工、机械等设备温度过热检测。温度检测系统应用十分广阔。 温度检测系统有则共同的特点:测量点多、环境复杂、布线分散、现场离监控室远等。若采用一般温度传感器采集温度信号,则需要设计信号调理电路、A/D 转换及相应的接口电路,才能把传感器输出的模拟信号转换成数字信号送到计算机去处理。这样,由于各种因素会造成检测系统较大的偏差;又因为检测环境复杂、测量点多、信号传输距离远及各种干扰的影响,会使检测系统的稳定性和可靠性下降 。所以多点温度检测系统的设计的关键在于两部分:温度传感器的选择和主控单元的设计。温度传感器应用范围广泛、使用数量少,方便测量。DS18B20数字温度传感器接线方便,封装
7、成后可应用于多种场合,如管道式,螺纹式,磁铁吸附式,不锈钢封装式,型号多种多样,有LTM8877,LTM8874等等。主要根据应用场合的不同而改变其外观。封装后的DS18B20可用于电缆沟测温,高炉水循环测温,锅炉测温,机房测温,农业大棚测温,洁净室测温,弹药库测温等各种非极限温度场合。耐磨耐碰,体积小,使用方便,封装形式多样,适用于各种狭小空间设备数字测温和控制领域。2整体方案设计2.1 STC89C51单片机基础 (1)增强型1T 流水线/精简指令集结构8051 CPU (2)工作电压:3.4V-5.5V (5V单片机)/ 2.0V-3.8V (3V 单片机(3)工作频率范围:0 -35
8、MHz,相当于普通8051 的0420MHz.实际工作频率可达48MHz.(4)用户应用程序空间12K / 10K / 8K / 6K / 4K / 2K字节(5)片上集成512 字节RAM(6)通用I/O 口(27/23个),复位后为:准双向口/ 弱上拉(普通8051 传统I/O 口)可设置成四种模式:准双向口/ 弱上拉,推挽/ 强上拉,仅为输入/高阻,开漏每个I/O 口驱动能力均可达到20mA,但整个芯片最大不得超过55mA(7)ISP(在系统可编程)/IAP(在应用可编程),无需专用编程器可通过串口(P3.0/P3.1)直接下载用户程序,数秒即可完成一片(8)EEPROM 功能(9)看门
9、狗(10)内部集成MAX810 专用复位电路(外部晶体20M 以下时,可省外部复位电路)(11)时钟源:外部高精度晶体/ 时钟,内部R/C 振荡器。用户在下载用户程序时,可选择是使用内部R/C 振荡器还是外部晶体/ 时钟。常温下内部R/C 振荡器频率为:5.2MHz 6.8MHz。精度要求不高时,可选择使用内部时钟,因为有温漂,请选4MHz 8MHz(12)有2个16 位定时器/ 计数器(13)外部中断2 路,下降沿中断或低电平触发中断,Power Down 模式可由外部中断低电平触发中断方式唤醒(14)PWM( 4 路)/ P C A(可编程计数器阵列),也可用来再实现4个定时器或4个外部中
10、断(上升沿中断/ 下降沿中断均可支持)(15)STC89Cc516AD具有ADC功能。10 位精度ADC,共8 路(16)通用异步串行口(UART)(17)SPI同步通信口,主模式/ 从模式(18)工作温度范围:0 -75/ -40 -+85(19)封装:PDIP-28,SOP-28,PDIP-20,SOP-20,PLCC-32,TSSOP-20(超小封状,定货)2.2 DS18B20的基本性质1、 DS18B20性能特点 采用单总线专用技术,既可通过串行口线,也可通过其它I/O口线与微机接口,无须经过其它变换电路,直接输出被测温度值(9位二进制数,含符号位)测温范围为-55-+125,测量分
11、辨率为0.0625内含64位经过激光修正的只读存储器ROM,适配各种单片机或系统机,用户可分别设定各路温度的上、下限,内含寄生电源。 2、 DS18B20内部结构 DS18B20内部结构主要由四部分组成:64位光刻ROM,温度传感器,非挥发的温度报警触发器TH和TL,高速暂存器。DS18B20的管脚排列如图1所示。 64位光刻ROM是出厂前被光刻好的,它可以看作是该DS18B20的地址序列号。不同的器件地址序列号不同。 图1 DS18B20引脚分布图 8位产品系列号 48位产品序号 8位CRC编码 DS18B20高速暂存器共9个存存单元0 温度低字节 以16位补码形式存放 4、5 保留字节1、
12、2 1 温度高字节 6 计数器余值 2 TH/用户字节1 存放温度上限 7 计数器/ 3 HL/用户字节2 存放温度下限 8 CRC 以12位转化为例说明温度高低字节存放形式及计算:12位转化后得到的12位数据,存储在18B20的两个高低两个8位的RAM中,二进制中的前面5位是符号位。如果测得的温度大于0,这5位为0,只要将测到的数值乘于0.0625即可得到实际温度;如果温度小于0,这5位为1,测到的数值需要取反加1再乘于0.0625才能得到实际温度。 高8位 S S S S S 26 25 24 低8位 23 22 21 20 2-1 2-2 2-3 2-4 3、DS18B20控制方法 在硬
13、件上,DS18B20与单片机的连接有两种方法,一种是Vcc接外部电源,GND接地,I/O与单片机的I/O线相连;另一种是用寄生电源供电,此时UDD、GND接地,I/O接单片机I/O。无论是内部寄生电源还是外部供电,I/O口线要接5K左右的上拉电阻。 DS18B20有六条控制命令,44H 启动DS18B20进行温度转换 读暂存器 BEH 读暂存器9个字节内容 写暂存器 4EH 将数据写入暂存器的TH、TL字节 复制暂存器 48H 把暂存器的TH、TL字节写到E2RAM中 重新调E2RAM B8H 把E2RAM中的TH、TL字节写到暂存器读电源供电方式 B4H 启动DS18B20发送电源供电方式的
14、信号CPU 5、CPU对DS18B20的访问流程先对DS18B20初始化,再进行ROM操作命令,最后才能对存储器操作,数据操作。DS18B20每一步操作都要遵循严格的工作时序和通信协议。如主机控制DS18B20完成温度转换这一过程,根据DS18B20的通讯协议,须经三个步骤:每一次读写之前都要对DS18B20进行复位,复位成功后发送一条ROM指令,最后发送RAM指令,这样才能对DS18B20进行预定的操作。 6、系统组成 由DS18B20构成的智能温度测量装置由三部分组成:DS18B20温度传感器、89C2051、显示模块。产品的主要技术指标:测量范围:-55-+125,测量精度:0.5,反应
15、时间500ms。3 智能温度检测系统的硬件设计3.1 LED电路在电子技术中,由LED数码管显示09的数是常用的显示技术。数码管显示时,可用LCD(液晶),也可用LED数码管显示09的数。这里利用PIC16F84A单片机控制的数码管LED显示电路,如下图所示。下图是4位LED数码管显示电路,也可以扩展成更多的位或减少到一位数的显示。数码管要正常显示,就要用驱动电路来驱动数码管的各个段码,从而显示出我们要的数字,因此根据数码管的驱动方式的不同,可以分为静态式和动态式两类。 静态显示驱动:静态驱动也称直流驱动。静态驱动是指每个数码管的每一个段码都由一个单片机的I/O端口进行驱动,或者使用如BCD码
16、二-十进制译码器译码进行驱动。静态驱动的优点是编程简单,显示亮度高,缺点是占用I/O端口多,如驱动5个数码管静态显示则需要5840根I/O端口来驱动,要知道一个89S51单片机可用的I/O端口才32个呢:),实际应用时必须增加译码驱动器进行驱动,增加了硬件电路的复杂性。 动态显示驱动:数码管动态显示接口是单片机中应用最为广泛的一种显示方式之一,动态驱动是将所有数码管的8个显示笔划a,b,c,d,e,f,g,dp的同名端连在一起,另外为每个数码管的公共极COM增加位选通控制电路,位选通由各自独立的I/O线控制,当单片机输出字形码时,所有数码管都接收到相同的字形码,但究竟是那个数码管会显示出字形,
17、取决于单片机对位选通COM端电路的控制,所以我们只要将需要显示的数码管的选通控制打开,该位就显示出字形,没有选通的数码管就不会亮。通过分时轮流控制各个数码管的的COM端,就使各个数码管轮流受控显示,这就是动态驱动。在轮流显示过程中,每位数码管的点亮时间为12ms,由于人的视觉暂留现象及发光二极管的余辉效应,尽管实际上各位数码管并非同时点亮,但只要扫描的速度足够快,给人的印象就是一组稳定的显示数据,不会有闪烁感,动态显示的效果和静态显示是一样的,能够节省大量的I/O端口,而且功耗更低。3.2 STC89C51单片机电路 一、ISP与IAP编程方式 STC89C系列单片机芯片内置了ISP(在系统可
18、编程)/IAP(在应用可编程)功能,无需专用编程器即可通过串口(P3.0/P3.1)用STC提供的STC-ISP.exe软件进行烧录。新出厂的STC89C51系列单片机芯片,已经设置为单片机彻底放电后再复位,即会先进行ISP监控。当单片机检测到P3.0/RxD引脚有合法的下载命令流时,就会先将用户程序下载并烧录到用户程序区,再运行用户程序,否则软复位到用户程序区,运行用户程序。在进行ISP烧录时,可以选择下次冷启动时是依旧先进行ISP监控,还是需要P1.0和P1.1引脚同时为0才进行ISP监控,否则跳过ISP监控直接运行用户程序(见图)。 二6时钟,机器周期模式 标准的8051每个机器周期为1
19、2时钟。增强型的STC89C系列单片机在进行ISP烧录程序时,可以设置为6时钟/机器周期(双倍速)或12时钟/机器周期工作模式.6时钟/机器周期(双倍速)工作模式下,定时器的计数速度会加倍,相应的12时钟/机器周期模式下的串口波特率也会加倍,因此单片机使用的最高的波特率可以提高一倍。三降低簟片机对外部电磁辐射 通过设置6时钟/机器周期(双倍速),可以将外接晶振频率降低一半,能有效降低对外部电磁辐射(EMI)。更重要的是,STC89C系列单片机可以关闭ALE输出,最有效地降低EMI。通过将ALEoff位(AUXR.0)置1,可以使ALE引脚仅在读取外接存储器时才有变化电平输出,从而降低对外部电磁
20、辐射。 四、内部扩展RAMSTC89C系列单片机中的51/52/53(RC系列)在原有8052共256字节RAM的基础上,又扩展了256字节RAM,共有512字节RAM(000H1FFH)。54/58/516(RD+系列)则扩展了1024字节RAM,共有1280字节RAM(000H3FFH)。通过设置EXTRAM位(见表1),在使用MOVXDPTR,A/MOVXA,DPTR指令时,如访问在内部RAM范围内将会访问到内部RAM,超出此范围才会访问外部RAM。访问内部RAM时,不影响P0口/P2口/P3.6/P3.五双DPTR数据指针 标准的8051只有一个1 6位的DPTR数据指针,这样在进行数
21、据块复制等动作时,必须对源地址指针和目标地址指针进行暂存,编程会非常麻烦。STC89C系列单片机内有两个DPTR数据指针DPTR0/DPTR1,可以通过设置DPS位(AUXR1.0)方便地选择,DPS置0则选中DPTRO,置1则选中DPTR1。通过执行INCAUXR1指令,能对DPS快速切换,并不影响AUXR1的高位。此用法与PHILIPS单片机完全一致。六扩晨P4口 从引脚图上可以看出,PLCC-44、PQFP-44两种封装方式比PDIP-40多出的4个引脚在STC89C51RC/RD+系列单片机上被做成了P4口(SFR地址为0E8H),由P4.0P4.3四条口线组成,使用方式上与原有I/0
22、完全一致,可以位操作。七、内置看门狗电路 RC/RD+型号的STC89C系列单片机均内置了看门狗电路。内置看门狗由看门狗定时器控制寄存器WDT_CONTR(见表2)控制。EN_WDT位(WDT_CONTR.5)为看门狗允许位,置1时即启动看门狗。CLR_WDT位(WDT_CONTR.4)为看门狗清零位,置1则看门狗将重新计数,此位由硬件自动清零。IDLE_WDT位(WDTl_CONTR.3)为看门狗空闲模式位,当置为1时,看门狗在“空闲模式”时继续计数,当清零时,看门狗在“空闲模式”时不计数。PS2PS0位(WDT_CONTR20)用于设定看门狗溢出时间,看门狗溢出时间=(NPre-scale
23、32768)/晶振频率。其中N为每个机器周期的时钟数,标准模式为12,双倍速时为6。Pre-scale为PS2PS0位所设定的预分频值。八.软复位功能 STC89C系列单片机新增加的ISP_CONTR特殊功能寄存器(SFR地址为0E7H),实现了单片机系统软复位(热启动之一)功能。用户只需简单地控制ISP_CONTR特殊功能寄存器的其中商位SWBS/SWRST就可以系统复位了。SWBS位(ISP_CONTR.6)选择从用户应用程序区启动(0),还是从ISP程序区启动(1)。要与SWRST位配合才可以实现,SWRST位(ISP_CONTR.5)置0则无操作,置1则实现系统复位,硬件自动清零。软复
24、位与硬件复位一样,所有的特殊功能寄存器都会复位到初始值,I/O口也会初始化。九带A/D功能的89LE系列 STC89LE51/52/54/58/516AD型号均内带一个8位精度的高速A/D转换器,扩展RAM均为256字节(共512字节,仅能用MOVX A,Ri/MOVX A,Ri指令访问),不能设置6时钟/机器周期(双倍速)模式,其余均与前几部分相同。另有一款STC89LE516X2,比STC89LE516AD增加6时钟/机器周期(双倍速)模式。A/D转换器为电压输入型,可做按键扫描、电池电压检测、频谱检测等。STC89LE516AD/X2系列允许将P1.0P1.7作为A/D口使用,P1_AD
25、C_EN特殊功能寄存器(SFR地址为097H)作为A/D转换输入通道允许控制,相应位为“1”时,对应的P1x口被允许作为A/D转换使用,内部上拉电阻自动断开。3.3 DS18B20电路DS18B20的读写时序和测温原理与DS1820相同,只是得到的温度值的位数因分辨率不同而不同,且温度转换时的延时时间由2s减为750ms。 DS18B20测温原理如图3所示。图中低温度系数晶振的振荡频率受温度影响很小,用于产生固定频率的脉冲信号送给计数器1。高温度系数晶振随温度变化其振荡率明显改变,所产生的信号作为计数器2的脉冲输入。计数器1和温度寄存器被预置在55所对应的一个基数值。计数器1对低温度系数晶振产
26、生的脉冲信号进行减法计数,当计数器1的预置值减到0时,温度寄存器的值将加1,计数器1的预置将重新被装入,计数器1重新开始对低温度系数晶振产生的脉冲信号进行计数,如此循环直到计数器2计数到0时,停止温度寄存器值的累加,此时温度寄存器中的数值即为所测温度。图3中的斜率累加器用于补偿和修正测温过程中的非线性,其输出用于修正计数器1的预置值。图3: DS18B20测温原理框图DS18B20有4个主要的数据部件: (1) 光刻ROM中的64位序列号是出厂前被光刻好的,它可以看作是该DS18B20的地址序列码。64位光刻ROM的排列是:开始8位(28H)是产品类型标号,接着的48位是该DS18B20自身的
27、序列号,最后8位是前面56位的循环冗余校验码(CRC=X8+X5+X4+1)。光刻ROM的作用是使每一个DS18B20都各不相同,这样就可以实现一根总线上挂接多个DS18B20的目的。 (2) (2)DS18B20中的温度传感器可完成对温度的测量,以12位转化为例:用16位符号扩展的二进制补码读数形式提供,以0.0625/LSB形式表达,其中S为符号位。 这是12位转化后得到的12位数据,存储在18B20的两个8比特的RAM中,二进制中的前面5位是符号位,如果测得的温度大于0,这5位为0,只要将测到的数值乘于0.0625即可得到实际温度;如果温度小于0,这5位为1,测到的数值需要取反加1再乘于
28、0.0625即可得到实际温度。 (3)DS18B20温度传感器的存储器 DS18B20温度传感器的内部存储器包括一个高速暂存RAM和一个非易失性的可电擦除的EEPRAM,后者存放高温度和低温度触发器TH、TL和结构寄存器。 (4)配置寄存器 低五位一直都是1,TM是测试模式位,用于设置DS18B20在工作模式还是在测试模式。在DS18B20出厂时该位被设置为0,用户不要去改动。R1和R0用来设置分辨率,如下表所示:(DS18B20出厂时被设置为12位)四、 高速暂存存储器 高速暂存存储器由9个字节组成,其分配如表5所示。当温度转换命令发布后,经转换所得的温度值以二字节补码形式存放在高速暂存存储
29、器的第0和第1个字节。单片机可通过单线接口读到该数据,读取时低位在前,高位在后,数据格式如表1所示。对应的温度计算:当符号位S=0时,直接将二进制位转换为十进制;当S=1时,先将补码变为原码,再计算十进制值。表?2是对应的一部分温度值。第九个字节是冗余检验字节。 根据DS18B20的通讯协议,主机(单片机)控制DS18B20完成温度转换必须经过三个步骤:每一次读写之前都要对DS18B20进行复位操作,复位成功后发送一条ROM指令,最后发送RAM指令,这样才能对DS18B20进行预定的操作。复位要求主CPU将数据线下拉500微秒,然后释放,当DS18B20收到信号后等待1660微秒左右,后发出6
30、0240微秒的存在低脉冲,主CPU收到此信号表示复位成功。 五、DS18B20的应用电路 DS18B20测温系统具有测温系统简单、测温精度高、连接方便、占用口线少等优点。下面就是DS18B20几个不同应用方式下的测温电路图: 1、DS18B20寄生电源供电方式 在寄生电源供电方式下,DS18B20从单线信号线上汲取能量:在信号线DQ处于高电平期间把能量储存在内部电容里,在信号线处于低电平期间消耗电容上的电能工作,直到高电平到来再给寄生电源(电容)充电。2、DS18B20的外部电源供电方式 在外部电源供电方式下,DS18B20工作电源由VDD引脚接入,此时I/O线不需要强上拉,不存在电源电流不足
31、的问题,可以保证转换精度,同时在总线上理论可以挂接任意多个DS18B20传感器,组成多点测温系统。注意:在外部供电的方式下,DS18B20的GND引脚不能悬空,否则不能转换温度,读取的温度总是85。 外部电源供电方式是DS18B20最佳的工作方式,工作稳定可靠,抗干扰能力强,而且电路也比较简单,可以开发出稳定可靠的多点温度监控系统。站长推荐大家在开发中使用外部电源供电方式,毕竟比寄生电源方式只多接一根VCC引线。在外接电源方式下,可以充分发挥DS18B20宽电源电压范围的优点,即使电源电压VCC降到3V时,依然能够保证温度量精度。4 智能温度检测系统的软件设计系统的软件设计也是工具系统功能的设
32、计。单片机软件的设计主要包括执行软件和监控软件的设计。单片机的软件设计通常要考虑以下几个方面的问题:1、根据软件功能要求,将系统软件划分为若干个相对独立的部分,设计出合理的总体结构,使软件开发清晰、简洁和流程合理;2、培养良好的编程风格,如考虑结构化程序设计、实行模块化、子程序化。既便于调试、链接,又便于移植和修改;3、建立正确的数学模型,通过仿真提高系统的性能,并选取合适的参数;4、绘制程序流程图;5、合理分配系统资源;6、为程序加入注释,提高可读性,实施软件工程;7、注意软件的抗干扰设计,提高系统的可靠性。4.1 系统软件设计流程图开始系统初始化测温度并显示键扫描函数设置温度上限值 设上限
33、键按下设下限键按下设置温度下限值温度超过上限或者下限NOYES蜂鸣4.2 智能温度检测系统的源程序代码#include sbit DQ = P3 7; /定义端口DQ/ sbit led1 =P20;/ sbit led2 =P21;/ sbit led3 =P22;/ sbit led4 =P23;sbit k1=P25;/+sbit k2=P26;/-sbit k3=P27; /回到正常显示sbit k4=P24; /切换sbitSPK = P36;unsigned char tx3=0,0,0;unsigned code table=0xc0,0xf9,0xa4,0xb0,0x99,0x
34、92,0x82, 0xf8,0x80,0x90,0xbf;unsigned char flag,flag1,b0,frq, temp; /flag用于正常显示时正负的判断 flag1用于设置模式时判断是否显示负号unsigned char x0= 40, c0=0; /x0温度上限 ,c0温度下限void key(void);void Delay(int num);void Delaynms(unsigned int di) ;void Init_DS18B20(void);unsigned char ReadOneChar(void);void WriteOneChar(unsigned c
35、har dat); void ReadTemperature(void);void Display_SMG(void);/*/void Delay(int num)/延时函数while(num-) ;/*/void Delaynms(unsigned int di) /延时unsigned int da,db; for(da=0;dadi;da+) for(db=0;db0;i-)DQ = 0; / 给脉冲信号dat=1;DQ = 1; / 给脉冲信号if(DQ)dat|=0x80;Delay(4);return(dat);/*/void WriteOneChar(unsigned char
36、dat)/写一个字节unsigned char i=0;for (i=8; i0; i-)DQ = 0;DQ = dat&0x01;Delay(2);DQ = 1;dat=1;/*/ void ReadTemperature(void)/读取温度unsigned char a=0,a0;unsigned char b=0;unsigned char Data_L=0;unsigned char num=0;Init_DS18B20();WriteOneChar(0xCC); / 跳过读序号列号的操作WriteOneChar(0x44); / 启动温度转换Init_DS18B20();Write
37、OneChar(0xCC); /跳过读序号列号的操作WriteOneChar(0xBE); /读取温度寄存器/Delay(5000);a=ReadOneChar(); /读低8位b=ReadOneChar(); /读高8位 tx0 = (a/16+b*16)/10; /整数部分 tx1 = (a/16+b*16)%10; temp = a/16+b*16 ;a0 = a & 80; /判断正负 用于是否显示“-“号 if(a0 = 1) flag = 1 ; else flag = 0 ; Data_L=a&0X0F; Data_L=Data_L*10;/10 /100/40/80 tx2=D
38、ata_L/16;/0/6/2/5void Display_SMG(void) unsigned char a; for(a=0;a=50;a+) if(flag = 1) P0=table10; P2_0 = 0; Delaynms(5); P2_0 = 1; P0=tabletx0; P2_1 = 0; Delaynms(5); P2_1 = 1; P0=(tabletx1)&0x7f; P2_2 = 0; Delaynms(5); P2_2 = 1; P0=tabletx2; P2_3 = 0; Delaynms(5); P2_3 = 1; void Display_SMG1(void) unsigned char a; for(a=0;a=50;a+) if(flag1 = 1) P0=table10; P2_0 = 0; Delaynms(5); P2_0 = 1; P0=tabletx0; P2_1 = 0; Delaynms(5); P2_1 = 1; P0=(tabletx1)&0x7f; P2_2 = 0; Delaynms(5); P2_2 = 1; P0=tabletx2; P2_3 = 0; Delaynms(5); P2_3 = 1; Delaynms(300) ;void key()/按键扫描子程序 if(k4!=1)