1、摘 要 本实验设计了一个以单片机89C51为基本控制核心的简易数控直流电源。该设计包括直流电源输入及输出两部分,可完成015V之间各不同幅值的电压的输出,能够预置数,能够自动扫描输出电压并直接显示到LED数码显示管上,并可扩展输出三角波等波型。其中电压输出部分,既可手动的每按”+”-”键一下进行每0.1V大小的上下调整,也可长按”+”-”键使其自动的递增或者递减,直到需要的数值。预置数时用切换键切换预置个位或小数位,按”+”-”键进行微调。单片机编程部分是基于WAVE6000软件上设计,并在实物上进行仿真。.该系统具有抗干扰性能好,可靠性高,及最终输出电压值与真实显示值精确度较高等优点。关键词
2、: 89C51;直流电压输出;直流电压输入目 录绪 论1一、设计任务要求和方案选择3 (一)设计任务3 (二)设计方案一3(三)设计方案二4(四)方案的优缺点及选择5二、硬件部分设计5(一)单片机部分5(二)数模转换部分9(三)放大器部分11(四)电源输入部分12(五)稳压器部分13(六)按键部分15(七)数码显示输出部分15三、系统软件部分设计17(一)主程序流程图17(二)预置数流程图19四、系统调试测验20(一)系统调试20(二)系统测试21(三)系统误差分析22(四)误差调整22总 结23参考文献25致 谢26附 录27绪 论 随着电力电子技术的高速发展,电子电力设备与人们的工作、生活
3、的关系日益密切,而电子设备都离不开可靠的电源,进入80年代计算机电源全面实现了开关电源化,率先完成计算机的电源换代,进入90年代开关电源相继进入各种电子、电器设备领域,程控交换机、通讯、电子检测设备电源、控制设备电源等都已广泛地使用了开关电源,更促进了开关电源技术的迅速发展。开关电源和线性电源相比,二者的成本都随着输出功率的增加而增长,但二者增长速率各异。线性电源成本在某一输出功率 点上,反而高于开关电源。随着电力电子技术的发展和创新,使得开关电源技术在不断地创新,这一成本反转点日益向低输出电力端移动,这为开关电源提供了广泛 的发展空间。开关电源高频化是其发展的方向,高频化使开关电源小型化,并
4、使开关电源进入更广泛的应用领域,特别是在高新技术领域的应用,推动了高新技术产品的小型化、轻便化。另外开关电源的发展与应用在安防监控,节约能源、节约资源及保护环境方面都具有重要的意义。数控稳压电源是一种常见的电子仪器,广泛的用于电子电路,教学实验和科学研究等领域。目前实用的直流稳压电源大部分是线性电源。利用分离器件组成,其体积大,功率底,可靠性差,操作使用不方便,自我保护功能不够,因而故障率高。随着电子科技的飞速发展,各种电子,电器设备对稳压电源的性能要求日益提高,稳压电源不断差朝着小型化,高效率,低成本,高可靠性,低电磁干扰,模块化和智能化发展。以单片机系统为核心而设计制造出来的新一代稳压电源
5、不但电路简单,结构紧凑,价格低廉,性能卓越,而且单片机具有计算和控制功能,利用它对采样技术进行各种计算,从而可排除和减少由于骚扰信号和模拟电路因起的误差,大大提高稳压电源输出电压和输出电流精度,降低了对模拟电路的要求。开关电源产品广泛应用于工业自动化控制、军工设备、科研设备、LED照明、工控设备、通讯设备、电力设备、仪表仪器、医疗设备、半导体制冷制热、空气净化器,电子冰箱,液晶显示器,LED灯具,通讯设备,视听产品,安防监控,LED灯袋,电脑机箱,数码产品和仪器类等领域。一、设计任务要求和方案选择 (一)设计任务设计制作具有一定电压范围和功能的数控电源:a 输出电压:范围 015V 步进 0.
6、1V 纹波不大于10mvb输出电流: 500mAc 输出电压由数码显示d 用”+”.”-”键控制输出电压进行增/减调整e 自动扫描输出电压f 扩展输出三角波等电压种类g 输出电压可预置在015V之间的任意值(二)设计方案一是以型号89C51单片机为控制核心进行设计的,通过按键进行控制,单片机控制数模转换芯片DAC0832,其输出07.5V的电压,因为要求电压为015V所以必须再经过放大器放大,并通过三端可调正稳压器进行稳压,输出一个较稳定的直流电压,并在数码管上显示出来,并时刻刷新调整电压后的幅值,系统流程方框图1.1图1.1系统流程图(三)设计方案二 是以单片机89C51为控制核心,外接按键
7、进行控制,单片机控制8个继电器,且每个继电器串联一个一定阻值的电阻,电阻之间的关系为以2为参数的等比数列,继电器之间为并联形式。最终电压幅值可经过一个稳压电路后稳定输出。且最后输出的电压值可通过单片机控制在数码显示管上显示出来,并时刻刷新调整电压后的幅值。系统方框图1.2图1.2系统流程图(四)方案的优缺点及选择方案一的电源电压切换采用DAC控制速度比较快,切换方便,且可以输出较高频率的几种波形,所需器件较少,元器件较常见而且便宜,缺点是放大器的电压要求比较高,需要015V的输出,需要多种电源供电。方案二采用继电器控制为机械式。基本原理简单,实现比较方便,电源电压也可以调整到较精确的数值,但是
8、它需要较大的工作电流,原器件价格较贵,而且继电器会产生噪声污染。比较之后,两种方案各有优缺点,我们选择方案一二、硬件部分设计(一)单片机部分 1. 单片机原理它是一种在线式实时控制计算机,在线式就是现场控制,需要的是有较强的抗干扰能力,较低的成本,这也是和离线式计算机的(比如家用PC)的主要区别。主流单片机包括CPU、4KB容量的ROM、128 B容量的RAM、 2个16位定时/计数器、4个8位并行口、全双工串口行口、ADC/DAC、SPI、I2C、ISP、IAP。1、系统结构简单,使用方便,实现模块化;2、单片机可靠性高,可工作到106 107小时无故障;3、处理功能强,速度快。4、低电压,
9、低功耗,便于生产便携式产品5、控制功能强6、环境适应能力强。2. 基本结构(1)运算器运算器由运算部件算术逻辑单元(Arithmetic & Logical Unit,简称ALU)、累加器和寄存器等几部分组成。ALU的作用是把传来的数据进行算术或逻辑运算,输入来源为两个8位数据,分别来自累加器和数据寄存器。ALU能完成对这两个数据进行加、减、与、或、比较大小等操作,最后将结果存入累加器。例如,两个数6和7相加,在相加之前,操作数6放在累加器中,7放在数据寄存器中,当执行加法指令时,ALU即把两个数相加并把结果13存入累加器,取代累加器原来的内容6。运算器有两个功能:执行各种算术运算。 执行各种
10、逻辑运算,并进行逻辑测试,如零值测试或两个值的比较。运算器所执行全部操作都是由控制器发出的控制信号来指挥的,并且,一个算术操作产生一个运算结果,一个逻辑操作产生一个判决。(2)控制器控制器由程序计数器、指令寄存器、指令译码器、时序发生器和操作控制器等组成,是发布命令的“决策机构”,即协调和指挥整个微机系统的操作。其主要功能有: 从内存中取出一条指令,并指出下一条指令在内存中的位置。对指令进行译码和测试,并产生相应的操作控制信号,以便于执行规定的动作。 指挥并控制CPU、内存和输入输出设备之间数据流动的方向。微处理器内通过内部总线把ALU、计数器、寄存器和控制部分互联,并通过外部总线与外部的存储
11、器、输入输出接口电路联接。外部总线又称为系统总线,分为数据总线DB、地址总线AB和控制总线CB。通过输入输出接口电路,实现与各种外围设备连接。(3)主要寄存器累加器A累加器A是微处理器中使用最频繁的寄存器。在算术和逻辑运算时它有双功能:运算前,用于保存一个操作数;运算后,用于保存所得的和、差或逻辑运算结果。数据寄存器DR数据寄存器通过数据总线向存储器和输入/输出设备送(写)或取(读)数据的暂存单元。它可以保存一条正在译码的指令,也可以保存正在送往存储器中存储的一个数据字节等等。指令寄存器IR和指令译码器ID指令包括操作码和操作数。指令寄存器是用来保存当前正在执行的一条指令。当执行一条指令时,先
12、把它从内存中取到数据寄存器中,然后再传送到指令寄存器。当系统执行给定的指令时,必须对操作码进行译码,以确定所要求的操作,指令译码器就是负责这项工作的。其中,指令寄存器中操作码字段的输出就是指令译码器的输入。(4)程序计数器PCPC用于确定下一条指令的地址,以保证程序能够连续地执行下去,因此通常又被称为指令地址计数器。在程序开始执行前必须将程序的第一条指令的内存单元地址(即程序的首地址)送入PC,使它总是指向下一条要执行指令的地址。(5)地址寄存器AR地址寄存器用于保存当前CPU所要访问的内存单元或I/O设备的地址。由于内存与CPU之间存在着速度上的差异,所以必须使用地址寄存器来保持地址信息,直
13、到内存读/写操作完成为止。显然,当CPU向存储器存数据、CPU从内存取数据和CPU从内存读出指令时,都要用到地址寄存器和数据寄存器。同样,如果把外围设备的地址作为内存地址单元来看的话,那么当CPU和外围设备交换信息时,也需要用到地址寄存器和数据寄存器。单片机89C51是本设计中的控制核心,是一个40管脚的集成芯片,管脚图如下。引脚部分:单片机接脚基本电路部分与普通设计无异,40脚接Vcc+5V,20脚接地。X1,X2两脚接12MHZ的晶振,可得单片机机器周期为1微秒。RST脚外延一个RST复位键,一端接Vcc,一端通过10K电阻接地。P0口中,03口分别通过一个PNP型三极管9012的B端,并
14、由E端接人集成LED的COM14口。47口则分别通过一个按键接地,通过软件编写实现6个按键的各种功能。P1口8个端口连LED中a,b,c,d,e,f,g,db脚上。P2口是连到DAC0832中的D0D7。图2.1单片机控制原理图(二)数模转换部分 图2.2数模转换电路图1脚CS(反) 2 脚WR1(反) 3脚AGND 4脚D35脚D2 6 脚D1 7脚D0 8脚ref9脚Ref 10脚DGND 11脚Iout1 12脚Iout213脚D7 14脚D6 15脚D5 16脚D417脚XFER(反)18 脚WR2(反)19脚ILE 20脚Vcc DAC0832工作方式:直通方式、单缓冲方式和双缓冲方
15、式。DAC0832引脚功能电路应用原理图DAC0832是采样频率为八位的D/A转换芯片,集成电路内有两级输入寄存器,使DAC0832芯片具备双缓冲、单缓冲和直通三种输入方式,以便适于各种电路的需要(如要求多路D/A异步输入、同步转换等)。所以这个芯片的应用很广泛,关于DAC0832应用的一些重要资料见下图: D/A转换结果采用电流形式输出。若需要相应的模拟电压信号,可通过一个高输入阻抗的线性运算放大器实现。DAC0832引脚功能说明:DI0DI7:数据输入线,TLL电平。ILE:数据锁存允许控制信号输入线,高电平有效。CS:片选信号输入线,低电平有效。WR1:为输入寄存器的写选通信号。XFER
16、:数据传送控制信号输入线,低电平有效。WR2:为DAC寄存器写选通输入线。Iout1:电流输出线。当输入全为1时Iout1最大。Iout2: 电流输出线。其值与Iout1之和为一常数。Rfb:反馈信号输入线,芯片内部有反馈电阻.Vcc:电源输入线 (+5v+15v)Vref:基准电压输入线 (-10v+10v)AGND:模拟地,摸拟信号和基准电源的参考地.DGND:数字地,两种地线在基准电源处共地比较好,可通过一个高输入阻抗的线性运算放大器实现。 DAC0832是一款常用的数摸转换器,它有两种连接模式,一种是电压输出模式,另外一种是电流输出模式,为了设计的方便,选用电压输出模式。这个芯片共有2
17、0 个管脚,管脚分布图如下。Iout1和Iout2之间接一参考电压,VREF输出可控制电压信号。它有三种工作方式:不带缓冲工作方式,单缓冲工作方式,双缓冲工作方式。该电路采用单缓冲模式,由电路图可知,由于/XFER=0/CS=0/ ILE=1,DAC寄存处于工作状态。所以只要把/WR1/WR2置低电平时,写p2口,则该数字信号立即传送到输入寄存器,并直通至DAC寄存器,经过短暂的建立时间,即可以获得相应的模拟电压,一旦写入操作结束,/WR1和/WR2立即变为高电平,则写入的数据被输入寄存器锁存,直到再次写入刷新。(三)放大器部分放大器选择范围比较大,只要放大器满足放大值达到015V,放大倍数2
18、5倍,频率要求不高。最大提供电源为+15V和-15V,因此不可避免线性度有较大要求。而放大值要有15V电压差,不可避免的需要同时用到正负量程。因此对放大器的调零也有较大要求。先后使用TL082,TL081,OP07。最后确定用OP07。同时因为要在正向放大时提供正偏压,因此采用082制作了一个同项输入跟随器,做电气隔离。对于TL082和OP07参数及优点如下1. TL082 TL082是通用的J-FET双运算放大器。其特点有:较低的输入偏置电压和偏移电流;输出设有短路保护;输入级具有较高的输入阻抗;内建频率补偿电路;较高的压摆率。最大工作电压:-18V18V 2. OP07 Op07芯片是一种
19、低噪声,非斩波稳零的双极性运算放大器集成电路。由于OP07具有非常低的输入失调电压(对于OP07A最大为25V),所以OP07在很多应用场合不需要额外的调零措施。OP07同时具有输入偏置电流低(OP07A为2nA)和开环增益高(对于OP07A为300V/mV)的特点,这种低失调、高开环增益的特性使得OP07特别适用于高增益的测量设备和放大传感器的微弱信号等方面。 1、超低偏移: 150V最大 2、低输入偏置电流: 1.8nA 3、低失调电压漂移: 0.5V/ 4、超稳定,时间: 2V/month最大 5、高电源电压范围: 3V至22V 图2.3放大器电路图(四)电源输入部分实验中主要采用L78
20、05,L7815,L7915三种稳压器,外加电源部分设置成+/-20V,可由220V电源经变压得到,并将20V直接接到LM317中3端输入口,另外将+20V通过L7815,稳压后输出为+15V,将-20V通过L7915,稳压后输出为-15V,并将+/-15V电压加载到放大器的电源正负管脚上,另外DAC0832的电源管脚20脚和19脚ILE脚也要接+15V。再将+15V又经过L7805后变成+5V,这个压值可供应到单片机电源及显示部分。还需要在L7815的1,3脚,L7915的2,3脚以及L7805的1,3脚各自与地之间并联连上220微法电解电容和0.1微法磁片电容,目的是为了滤除低频杂波和高频
21、杂波。 图2.4电源输入电路图(五)稳压器部分 稳压电路设计采用的是常用的可调集成稳压器LM317。 LM317 是美国国家半导体公司的三端可调正稳压器集成电路。输出电压范围是 1.25V 至 37V,负载电流最大为 1.5A。它的使用非常简单,仅需两个外接电阻来设置输出电压。此外它的线性调整率和负载调整率也比标准的固定稳压器好。LM317 内置有过载保护、安全区保护等多种保护电路。 通常LM317 不需要外接电容,除非输入滤波电容到 LM317 输入端的连线超过 6 英寸(约 15 厘米)。使用输出电容能改变瞬态响应。调整端使用滤波电容能得到比标准三端稳压器高的多的纹波抑制比。 LM317
22、能够有许多特殊的用法。比如把调整端悬浮到一个较高的电压上,可以用来调节高达数百伏的电压,只要输入输出压差不超过 LM117/LM317 的极限就行。当然还要避免输出端短路。还可以把调整端接到一个可编程电压上,实现可编程的电源输出。特性简介 A可调整输出电压低到 1.2V。 B保证 1.5A 输出电流。 C典型线性调整率 0.01%。 D典型负载调整率 0.1%。 E 80dB 纹波抑制比。 F 输出短路保护。 G 过流、过热保护。 H 调整管安全工作区保护。 I 标准三端晶体管封装。 图2.5三端晶体管的封装 图2.6稳压部分电路图(六)按键部分设计中共用到按键数为7个,其中一个为单片机上的复
23、位键,另外6个分别命名为K1K6,K1K4分别接单片机P0口的P0.4P0.7,K5,K6接P3.5,P3.6。功能为:K1键:退出功能;K2键:预置数(设置一个数值为初始值);K3键:自动扫描键(扫描电压值,并在LED上自动显示);K4键:输出三角波电压/在预置数值时整数和小数部分切换;K5键:对输出稳定电压进行递减;K6键:对输出稳定电压进行递增。(七)数码显示输出部分这是决定系统使用是否方便的关键。这里又有两个方案。方案一:采用电阵式液晶显示器(LCD)显示。虽然其功能强大,可显示各种字体的数字,汉字,图象,还可以自定义显示内容,但是编程复杂,需要消耗大量时间完成显示部分的编程工作,成本
24、也比普通数码管贵。方案二:采用通用LED数码管显示。虽只能显示非常有限的符号和数码字,但是在本设计中完全满足显示需要,且编程简便.分析以上两种方案的优缺点,本设计采用方案二。这里我们使用的是通用的4位集成数码显示管如图2.7 图2.7数码管管脚分布图1脚-com4 2脚-a 3脚-f 4脚-com3 5脚-com2 6脚-b7脚-com1 8脚-g 9脚-c 10脚-db 11脚-d 12 脚-e其中4个 com(1-4)分别对应单片机P0端口(p0.0p0.4)2个LED端口的8个引脚a,b,c,d,e,f,g,db对应P1端口,且之间加阻值为330欧姆的电阻,否则电流过大,使电源部分的稳压
25、器过热,显示管显示过亮。如图2.8 图2.8数码管显示电路 三、系统软件部分设计系统的软件设计采用汇编语言,对单片机进行编程实现各功能程序是在Wnidows xp环境下采用WAVE 6000软件编写的,可以实现对按键输入高电平,对电压增加+/-0.1V,预置电压值等功能(一)主程序流程图 判断计数器是否加一若则进行三角波判断,若是则判断是否输出三角波判断,是否进行三角波扫描,进行数模转换的输出图3.1主程序流程图(二)预置数流程图图3.2预置数流程图四、系统调试测验(一)系统调试 1.电源部分调试:先断开所有除输入电源以外的其他电源接入线,在外部电源输入部分加入正负20 V的电压,通过L781
26、5的1脚,和L7915的2脚,后用万用表测量L7815的3脚为15V,L7915D 3脚为-15V,L7805的3脚为+5V,同时测试单片机,DA0832,放大器等底座接口供电。电源部分正常。 2.调试LED显示:编制简单的显示小程序验证正常。 3.按键测试:用程序验证。 4 .DAC测试:调整Iout1/Iout2的基准电压使输入255时输出电压7.5V。用软件测试输出。 5.放大器调试:这是我们最感头痛的地方,从082,081,OP07,一直达不到满意的要求。最后终于发现问题来自电源-15V的纹波干扰,为此,我们把电源模块和放大模块重新独立制作调试。最终采用OP07加082的方式。首先用O
27、P07建立正项放大器,信号从正端输入,然后对OP07的2/3脚短路接地,调节调零电阻丝输出为零。然后在正项加5V电压,调节放大倍数为2倍,因为电源为+15/-15所以放大输出最大到+14V,而且LM317的调零必须用到负电压,因此改变负端的参考电压来得到负电压。考虑到参考电压用滑动变阻器得到,用082的一个放大器制作正项跟随器进行电器隔离。用滑动变阻器调节输出电压,使DAC输出为0时,OP07输出-5V。所以最终OP07输出为-5V+10V,达到LM317的电压差要求。 图4.1放大器部分 图4.2电源部分 6 .LM317调试:调节滑动变阻器,使DAC输出0V放大器输出-5V时LM317输出
28、0V。(二)系统测试1 系统功能测试(详细叙述略)a、系统操作及面板说明b、符合设计提出的基本功能及提出的部分发挥功能 2 系统指标测试 表4.1 数据记录(室温下)1234567891011预置电压/V(数码显示)0.01.02.05.06.08.09.010.012.014.015.0输出电压/V(数码显示)0.01.02.05.06.08.09.010.012.014.015.0实测电压/V(仪器测量)0.001.012.005.016.038.029.0110.0112.0314.0115.02(三)系统误差分析从电路的原理框图可以看出,系统的主要误差有两个方面:a、0832的量化误差
29、 0832为8位D/A转换器,满量程为10V的量化误差为+/-0.5Lmbs+/-20mV.。按满度归一化的相对误差为+/-0.2%。如图所示为部分测试点的误差图4.3误差分析图b、放大器放大的线性失真引起的误差,以及经过0点的调零误差。c、基准电压温漂引入的误差 LM317在040范围内漂移不大于4mV,故相对误差=+/-0.04%。(四)误差调整可以采用精度更高的10位DAC,采用线性度较好的的放大器,增加系统正负放大器电源供电电压等。因器材限制,并未采用以上方法。二是采用了查表法,在256个值中选取最接近所需电压的值。下图为150个电压值对应的DAC的值。 图4.4误差调整图 总 结本设
30、计成品经过多次测量,基本上满足了设计要求所需的各项指标。在系统设计过程中,力求硬件线路简单,明了,整体美观,充分发挥软件变成方便灵活的特点,来满足系统设计要求。但是因为时间有限,该系统还有许多不足之处需要改进,比如电压精度问题等等。在本次设计的过程中,我们也遇到了许多突发事件和各种困难,(如电源干扰,放大器调零等)设计制作曾一度中断,但通过仔细分析和自我状态调整后解决了问题。在这个、过程中我们深刻地体会到共同协作和团队精神的重要性,提高了自己解决问题的能力。 参考文献1 张国峰,张维编.实用稳定电源 150 例.人民邮电出版 2标准集成电路数据手册集成稳压器 3 黄继业.EDA技术使用教程.科
31、学出版社, 4 黄智伟.全国大学生电子设计竞赛训练教程.电子工业出版社5 张建国,张素琴.数字电路技术.北京理工大学出版6 张俊膜单片机中级教程.北京航空航天大学出版社7 电子器材大全.电子工业出版社8 张友汉.电子线路设计应用手册.科学出版社 致 谢大学三年很快就要画上句号了,毕业设计是我在学校中最后一分答卷,在毕业设计完成之时,感觉到自己收益良多,心中更是充满了感激之情。再次毕业设计中,最应感谢的就是我的毕业设计指导老师刘为民师,感谢您在这段日子里对我亲切的关怀和悉心的教导,由于自身能力的有限在设计过程中遇到了很多的困难在老师的督促和教导下本文顺利的完成。在这个过程中都离不开老师的辛勤,借
32、此机会我也要感谢大学三年期间直到过我的所有老师,感谢对我无私的教诲与帮助,感谢他们的淳淳教导。非常感谢。附 录 开关电源总电路图开关电源设计实物图开关电源设计总程序led1 equ 30h 预定义led2 equ 31hled3 equ 32hled4 equ 33hbuff equ 34hbuff1 equ 34hdisbuff equ 35hcontrol equ 36hcontrol1 equ 36hkeybuff1 equ 37hkeybuff2 equ 38hkeydisbuff1 equ 3ahkeydisbuff2 equ 3bhkeydisbuff3 equ 3chorg 00
33、00hajmp mainmain: mov led1,#0ffH 初始化 mov led2,#0ffh mov led3,#0ffh mov led4,#0ffh mov disbuff,#00h mov buff,#00h mov buff,#00h mov control,#00h mov control1,#00h call senddac call sendledloop: setb p3.5 判断减 jb p3.5,key2 dec buff call senddac call sendled key2: setb p3.6 判断加 jb p3.6,key3 inc buff cal
34、l senddac call sendled key3: setb p0.4 jb p0.4,key4 key4: setb p0.5 判断预定义 jb p0.5,key5 mov a,buff mov b,#10 div ab mov keybuff1,b mov keybuff2,a call defindkey5: setb p0.6 判断自动扫描 jb p0.6,key6 call testkey6: setb p0.7 判断输出三角波 jb p0.7,key7 call sanjiaokey7: call display 调用显示程序 ajmp looptest: mov buff,
35、#00h 自动扫描子程序 setb p0.4 jb p0.4,test1 rettest1: mov r3,#150 loop7:setb p0.4 jb p0.4,test2 rettest2: inc buff call senddac call sendled call displaydjnz r3,loop7mov r3,#150loop6: setb p0.4 jb p0.4,test3 rettest3: dec buff call senddac call sendled call display djnz r3,loop6 ajmp test1sanjiao: setb p0.
36、4 jb p0.4,sanjiao1 Ret sanjiao1: mov r3,#150 三角波子程序loop9: inc buff1 clr p3.7 mov a,buff1 MOV DPTR ,#numtab1 ;译码 MOVC A,A+DPTR mov p2,a setb p3.7 call D1ms1 djnz r3,loop9 mov r3,#150loop8: dec buff1 clr p3.7 mov a,buff1 MOV DPTR ,#numtab1 译码 MOVC A,A+DPTR mov p2,a setb p3.7 call D1ms1 djnz r3,loop8 a
37、jmp sanjiaodefind: mov a,control 预定义 cjne a,#00h,defind1 setb p3.5 jb p3.5,defind01 dec keybuff2 defind01: setb p3.6 jb p3.6,defind1 inc keybuff2defind1: cjne a,#01h,defind3 setb p3.5 jb p3.5,defind11 dec keybuff1 defind11: setb p3.6 jb p3.6,defind3 inc keybuff1defind3: setb p0.4 jb p0.4,defind4 mov
38、 buff,keybuff1 mov a,keybuff2 mov b,#10 mul ab add a,buff mov buff,a call senddac call sendled retdefind4: setb p0.7 jb p0.7,defind5 inc control mov a,control cjne a,#02h,defind5 mov control,#00hdefind5: call sendkeyled mov a,control cjne a,#00h,definddis1 call display1 call display4 ajmp definddefi
39、nddis1: call display2 call display4 ajmp defindsendled: mov a,disbuff mov b,#10 div ab mov led1,b mov b,#10 div ab mov led2,b mov led3,a MOV DPTR ,#numtab ;译码 mov a,led3 jnz sendled1 mov a,#0ahsendled1: MOVC A,A+DPTR MOV led3,A mov a,led2 MOVC A,A+DPTR MOV led2,A mov a,led1 MOVC A,A+DPTR MOV led1,A
40、retsendkeyled: mov a,keybuff2 送键盘显示缓存 cjne a,#0ffh,keyled3 mov keybuff2,#00hkeyled3: cjne a,#0fh,keyled4 mov keybuff2,#0ehkeyled4: mov a,keybuff1 cjne a,#0ffh,keyled5 mov keybuff1,#00h keyled5:cjne a,#0ah,keyled6 mov keybuff1,#09hkeyled6: MOV DPTR ,#numtab 译码 mov a,keybuff2 mov b,#10 div ab MOVC A,A
41、+DPTR MOV keydisbuff3,A mov a,b MOVC A,A+DPTR MOV keydisbuff2,A mov a,keybuff1 MOVC A,A+DPTR MOV keydisbuff1,A retsenddac: mov a,buff 送显示缓存 cjne a,#0ffh,dac1 mov buff,#00hdac1: cjne a,#97h,dac2 mov buff,#96hdac2: clr p3.7 mov a,buff MOV DPTR ,#numtab1 ;译码 MOVC A,A+DPTR mov p2,a mov a,#0c9h subb a,buff mov disbuff,buff setb p3.7 retdisplay: mov p0,#00h 显示子程序 mov r0,#6dpl1: mov r1,#100dplop: mov p1,led4 clr p0.0 acall d1ms setb p0.0 mov p1,led3 clr p0.1 acall d1ms