资源描述
单位代码: 005
分 类 号: TN867
延安大学西安创新学院
本科毕业论文(设计)
题 目:
数控直流稳压电源的设计
专 业:
电子信息工程
姓 名:
学 号:
0903024121
指导教师:
毕业时间:
二零一三年六月
数控直流稳压电源的设计
摘要:本设计针对对普通直流电源一般不可以调节或调节范围小的缺点设计出了一种可调节,宽调节范围的直流稳压电源。该直流稳压电源系统以STC单片机公司的89C52RC单片机为核心,利用10位DA芯片TLC5615作为DA输出,由单片机由采样电阻对输出电压进行采样处理,采用C语言进行程序控制,输出0~9.9V,步进0.1V的精确稳压输出
关键词:直流电流源;单片机;89C52RC;TLC5615
High precision DC current source based on 51 MCU
Abstract: For regular direct current voltage stabilizer accuracy is not high, and the adjusting range is small, we designed a direct voltage stabilizer with high precision and wide adjusting range. This system is based on the MCU of 89C52RC which product by STC. Using a chip TLC5615 which with 10 bit as DA output. By using the resister to process the output voltage. Use the C language to control the system. So that it can output 0~+9.9V, and stepping for 0.1V adjustment function.
Key words: DC current;MCU;89C52RC;TLC5615
目 录
1 引言 1
2 设计原理 1
3 单元电路的设计 2
3.1 DA的选择与论证 2
3.2 稳压输出方案选择与论证 2
3.3 显示模块的选择与论证 3
3.4 输入按键的选择与论证 3
4 本系统核心器件简介 3
4.1 STC89C52单片机 3
4.2 TLC5615芯片 4
4.3 TLC431芯片 5
4.4 LM324芯片 5
5 硬件电路设计 6
5.1 电源电路 6
5.2 DA输出电路 6
5.3 稳压输出电路 6
5.4 数码管显示电路 7
5.5 整体电路原理设计 8
6 系统软件设计 9
6.1 主程序流程图 9
6.2 DA转换流程图 9
7 系统调试与仿真 10
7.1 系统仿真 10
7.2 DA输出仿真: 11
7.3 PCB制作 12
7.4 硬件调试 13
7.5 软件调试 14
8 结束语 15
参考文献 16
致谢 17
附录一 程序清单 18
22
延安大学西安创新学院本科毕业论文(设计)
1 引言
当今社会人们极大的享受着电子设备带来的便利,但是任何电子设备都有一个共同的电路--电源电路。大到超级计算机、小到袖珍计算器,所有的电子设备都必须在电源电路的支持下才能正常工作。当然这些电源电路的样式、复杂程度千差万别。可以说电源电路是一切电子设备的基础,没有电源电路就不会有如此种类繁多的电子设备。
数控直流稳压电源主要用微处理器等配合其它控制器件控制电源的电压输出,实现数控可调,高精度输出,过流保护,数字显示等。其调节的范围大,利用高精度的DA转换器,可以实现数控电源高精度输出,同时步进可调。这种高精度的的数控稳压电源可以满足对电源要求比较高的场合。
数控直流稳压电源还可以将输出电压值进行采样处理,再送回微处理器进行处理,从而实现输出的闭环控制。还可以对输出的电流进行检测,当输出过载时,可以立即切断输出,保护电源不被烧坏。
2 设计原理
该方案以STC 51系列单片机89C52为控制核心,单片机控制DA输出模拟电压,然后经过运算放大器放大电压,再经功率管放大电流。通过采样电路对输出电压值进行采样,实现闭环控制。单片机对采样值进行处理,在显示部分显示设定电压值和输出电压值。若输出超过当前设定的值,则单片机启动报警同时关闭输出以保护电源。系统的框图结构如图2-1所示。
按键
显示
单
片
机
D/A输出
放大电流
过流保护
输出
电 源 供 电
图2-1系统的框图结构
3 单元电路的设计
3.1 DA的选择与论证
方案一:采用我们熟悉的8位DA,DAC0832;
方案二:采用我们熟悉的10位DA,TLC5615;
方案三:采用内部自带基准源的12位DA MAX531。
对于方案一:选择DAC0832虽符合题目的要求,但是输出精度不高,误差大,所以我们放弃方案一。
对于方案二:为10位DA,输出精度更高,同时也可通过程序改进精度,使其变为精度更高的步进0.01V,同时该DA芯片价格比较合理。
对于方案三:MAX531内部自带2.048V基准源,输出精度高,但价格太贵,本着满足设计要求尽量节约成本的前提,我们放弃方案三。
综上所述,我们选择方案二。
3.2 稳压输出方案选择与论证
方案一:DA输出的电压经过集成运算放大器进行放大,再将放大之后的电压输出到LM317的调节端,利用LM317能够可调输出,实现稳压输出。下图2-1是方案一的原理图:
DA输出
LM317
集成运算放大
输出
AD
图3-1方案一原理框图
方案二:DA输出的电压经过集成运算放大器放大,再将放大之后的电压与达林顿管的基极相连,利用达林顿管放大电流,从而达到稳定电压输出。下图是方案二的原理图:
DA输出
集成运算放大
输出
T1
R1
T2
图3-2方案二原理框图
对于方案一:可以实现稳压输出,但是由于LM317自身调节的范围为1.2V-37V,而我们设计时要求为从0V输出到9.9V,所以不能满足。
对于方案二:利用达林顿管的性质,做成闭环回路控制。其输出电压不受负载影响。当DA输出为0时,其输出也为0,所以满足设计的要求。
综合所述,所以我们选择方案二。
3.3 显示模块的选择与论证
方案一:采用1602液晶屏作为显示模块
方案二:采用四位共阳极数码管作为显示模块
对于方案一:1602可以显示2行英文字符和数字,电路连接简单,占用单片机I/0口少。缺点是显示字符小,不易看清,价格太高,程序编写复杂
对于方案二:采用数码管至少要4位,则要占用12个I/O口,数码管显示时采用动态扫描功耗较低。显示清楚,易于辨认。程序编写简单,价格低。缺点是显示信息量较少,不能显示符号。
综合考虑,我们决定选取方案二。
3.4 输入按键的选择与论证
方案一:采用4*4键盘
方案二:采用5按键,第一个和第二个加减0.1V,第三个和第四个加减1V,第五个确认输出。
对于方案一:主要采用4*4的矩阵键盘,可以设置0-9和步进,小数点等按键,可以快速的输入。但是4*4键盘占用的PCB面积较大,增加了PCB的成本,增加了PCB的布线难度,并且得占用8个单片机I/0口,这种方案不可取。
对于方案二:中虽不能直接输入0-9,但是可以通过“+”和“-”来实现0-9数字的输入,这样只占用了5个单片机I/O口,节约3个I/O口,同时PCB的面积和成本也进一步缩小。
综上考虑,我们选择方案二。
4 本系统核心器件简介
4.1 STC89C52单片机
STC89C52是STC公司生产的一种低功耗、高性能CMOS8位微控制器,具有8K在系统可编程Flash存储器。STC89C52使用经典的MCS-51内核,但做了很多的改进使得芯片具有传统51单片机不具备的功能。在单芯片上,拥有灵巧的8 位CPU和在系统可编程Flash,使得STC89C52为众多嵌入式控制应用系统提供高灵活、超有效的解决方案。具有以下标准功能:8k字节Flash,512字节RAM,32 位I/O口线,看门狗定时器,内置4KB EEPROM,MAX810复位电路,3个16位定时器/计数器,4个外部中断,一个7向量4级中断结构(兼容传统51的5向量2级中断结构),全双工串行口。另外STC89X52可降至0Hz静态逻辑操作,支持2种软件可选择节电模式。空闲模式下,CPU停止工作,允许RAM、定时器/计数器、串口、中断继续工作。掉电保护方式下,RAM内容被保存,振荡器被冻结,单片机一切工作停止,直到下一个中断或硬件复位为止。最高运作频率35MHz,6T/12T可选。
图4-1 STC89C52
4.2 TLC5615芯片
TLC5615为美国德州仪器公司1999年推出的产品,是具有串行接口的数模转换器,其输出为电压型,最大输出电压是基准电压值的两倍。带有上电复位功能,即把DAC寄存器复位至全零。性能比早期电流型输出的DAC要好。只需要通过3根串行总线就可以完成10位数据的串行输入,易于和工业标准的微处理器或微控制器(单片机)接口,适用于电池供电的测试仪表、移动电话,也适用于数字失调与增益调整以及工业控制场合。
TLC5615器件的引脚图及各引脚功能如下图:
图4-2 TLC5615引脚图
DIN:串行数据输入端;
SCLK:串行时钟输入端;
/CS:芯片选用通端,低电平有效;
DOUT:用于级联时的串行数据输出端;
AGND:模拟地;
REFIN:基准电压输入端。2V~(VDD-2);
OUT:DAC模拟电压输出端;
VDD:正电源端,4.5~5.5V,通常取5V。
4.3 TLC431芯片
德州仪器公司(TI)生产的TL431是一个有良好的热稳定性能的三端可调分流基准源。他的输出电压用两个电阻就可以任意的设置到从Verf(2.5V)到36V范围内的任何值。该器件的典型动态阻抗为0.2Ω,在很多应用中用它代替齐纳二极管,例如,数字电压表,运放电路,可调压电源,开关电源等。它的引脚图如下:
图4-3 TLC431引脚图
4.4 LM324芯片
LM324系列器件带有真差动输入的四运算放大器。与单电源应用场合的标准运算放大器相比,它们有一些显著优点。
该四放大器可以工作在低到3.0伏或者高到32伏的电源下,静态电流为MC1741的静态电流的五分之一。共模输入范围包括负电源,因而消除了在许多应用场合中采用外部偏置元件的必要性。LM324的管脚连接图如下:
图4-4 LM324管脚连接图
每一组运算放大器可用图1所示的符号来表示,它有5个引出脚,其中“+”、“-”为两个信号输入端,“V+”、“V-”为正、负电源端,“Vo”为输出端。两个信号输入端中,Vi-(-)为反相输入端,表示运放输出端Vo的信号与该输入端的位相反;Vi+(+)为同相输入端,表示运放输出端Vo的信号与该输入端的相位相同。
5 硬件电路设计
根据设计的要求,本系统可分为电源模块、DA输出模块和稳压输出模块三大重要部分,缺一不可。
5.1 电源电路
电源电路采用的是直流线性稳压器组成。图5-1为电源电路原理图:
图5-1 电源电路原理图
5.2 DA输出电路
DA输出主要采用10位DA TLC5615,电压基准源采用TL431分压得到。C5为滤波电容,TL431输出电压时,流过它的电流最低为1mA,所以我们通过一个2K电阻使其工作电流大于1mA。这样其1脚对地的电压就为基准电压2.5V。如下图:
图5-2 DA输出电路
5.3 稳压输出电路
稳压部分的原理框图如下:
DA输出
集成运算放大
电压
功率管放大电流
输出
反馈
输出电压采样
报警
过流
图5-3稳压部分原理框图
稳压输出放大输出电路图如下图所示:
图5-4放大输出电路图
5.4 数码管显示电路
所有数码管的段选全部连接在一起,如何能显示不同的内容呢?动态显示是多个数码管,交替显示,利用人的视觉暂留作用使人看到多个数码管同时显示。在编程时,需要输出段选和位选信号,位选信号选中其中一个数码管,然后输出段码,使该数码管显示所需要的内容,延时一段时间后,再选中另一个数码管,再输出对应的段码,高速交替。
在动态显示程序中,各个位的延时时间长短是非常重要的,如果延时时间长,则会出现闪烁现象;如果延时时间太短,则会出现显示暗且有重影。
图5-5数码管显示电路
5.5 整体电路原理设计
基于单片机数控直流稳压源的系统整体硬件设计如图5-6所示。
图5-6系统整体硬件设计图
6 系统软件设计
6.1 主程序流程图
图6-1 系统总流程图
系统软件设计主要分为DA输出,AD采集,显示,按键,报警这几个部分。通电之后,程序先初始化,判断键盘有无输入,若无输入,则继续等待输入。若有输入,则读取输入的值,并相应的改变输出,并显示输出。输出时对输出的电压进行检测,再送回单片机进行处理,同时检测报警电路与单片机的接口,看电平有无变化,若发现报警电路启动,则说明过载,此时应关闭DA输出,并发出声光报警。如果没有过载,则继续输出,并显示。
6.2 DA转换流程图
DA转换流程图,如下如图6-2所示。
YES
程序入口
初始化
读取键盘
输入数据
输出数据到DA
数据=900
输出
NO
图6-2 DA转换流程图
7 系统调试与仿真
7.1 系统仿真
Proteus软件是英国Labcenter electronics公司出版的EDA工具软件。它不仅具有其它EDA工具软件的仿真功能,还能仿真单片机及外围器件。
它是目前最好的仿真单片机及外围器件的工具。虽然目前国内推广刚起步,但已受到单片机爱好者、从事单片机教学的教师、致力于单片机开发应用的科技工作者的青睐。
Proteus是世界上著名的EDA工具(仿真软件),从原理图布图、代码调试到单片机与外围电路协同仿真,一键切换到PCB设计,真正实现了从概念到产品的完整设计。
是目前世界上唯一将电路仿真软件、PCB设计软件和虚拟模型仿真软件三合一的设计平台,其处理器模型支持8051、HC11、PIC10/12/16/18/24/30/DsPIC33、AVR、ARM、8086和MSP430等,2010年即将增加Cortex和DSP系列处理器,并持续增加其他系列处理器模型。在编译方面,它也支持IAR、Keil和MPLAB等多种编译。
Proteus软件具有其它EDA工具软件(例:multisim)的功能。这些功能是:
(1)原理布图
(2)PCB自动或人工布线
(3)SPICE电路仿真
图7-1Proteus系统界面
7.2 DA输出仿真:
为了检测硬件电路与程序,对DA输出与显示部分做了仿真,其仿真图如下图所示。输出从0-9.9V,步进0.1V。
图7-2系统仿真
图7-3系统仿真
7.3 PCB制作
PCB制作把系统的电路原理图设计好以后。下一步工作就是进行实物制作了,而实物制作的第一步就是对电路进行排版布线。过程如下:
(1)电路原理图的布局
在器件布局的过程中应注意以下几点:①一个模块及其附属的一些分离元器件应尽量放到一起;②不同的电路模块尽量划分清晰,使得在调试过程中多电路的检查能够一目了然;③较容易发热的元器件尽量放到电路的边缘,有利于散热。
(2)布线
PCB布线的好坏对系统性能有直接的影响,在高频电路表现的尤为突出,所以,在进行电路布线时还需注意以下几点:①模拟地和数字地应分开接地,避免数字信号和模拟信号会相互干扰;②每一根走线,能短则短,不要为了盲目追求少跳线而绕远路,因为线越短电阻越小,干扰也会越小;③电源线和地线尽量从电路板的边缘走线,且电源线尽量画的比一般线宽略粗一些;④走线在改变方向时应该走45°角或曲线,避免直角的拐角。
(3)打印与转印
打印时要注意油纸不能折叠,打印的设置必须准确,只留下底层的走线和焊盘。而在转印时首先覆铜板要刷洗干净,以免在转印时油墨不能完全的转印;其次,转印机必须预热到机器发出提示音,这表明,转印机已经准备好转印了;第三,转印机的转印速度档位应放在“正常”档位,板子的类型应放在“印刷板” 档位。第四,在转印时,注意油纸上的走线图必须能够完整的附在覆铜板上,一块板子最好转印两次,确保把油墨完全的转印到覆铜板上。
(4)腐蚀
将油纸上的电路图转印到覆铜板后,接着就要把多余的铜腐蚀掉。不过在刚转印好的时候,首先应检查是否转印完整,若有断线、走线空心的问题,必须用油墨笔将断线补起来,空心的走线填完整。确保转印工序完成后,就可以将电路板放入FeCl3溶液里进行腐蚀了,俗称“烂板”。如果有条件,可以将腐蚀液加热,再放入电路板,这样能够有效的提高腐蚀的速度。
(5)打孔
腐蚀好的板子,在洗净之后就可以打孔了,打孔时尤其要注意孔的大小不能将焊盘的铜箔完全打掉,否则焊接时,焊盘没有铜箔就无法进行焊接了。
最后,打孔完成,用砂纸将毛糙磨平,这样PCB板的制作就顺利完成了。
7.4 硬件调试
做硬件焊接完成之后,我们必须对硬件进行调试,发现其中可能存在的问题,并对其进行改进。
硬件调试的方法有两种:
方案一用万用表和其他仪器仪表进行检测
方案二采用软件测试硬件的方法进行检测
方法分析:
这两种方法各有优点,方法一能直接准确的确定元件的故障所在点,并直接进行故障排除。但是此方法必须对元件进行一一检测,检测的过程非常慢。对于一个大系统和元件比较多的电路来说,此种方法不适合
方法二用软件来控制硬件,编写某一电路的控制程序,看这部分的电路的运行结果是否与书的软件控制的效果一致。如果不一致,则证明这部分电路有问题。这种方法可以迅速的判断某一部分电路的故障,对于大系统来说,这种方法可以缩小故障的范围,再对所出现的故障进行排除,节约系统调试的时间。
这个数控直流稳压电源系统中,我们把电路分成几个小模块,采取方法一和方法二相结合的测试方法进行测试。
测试步骤:
(1)用万用表对电路中的电源线进行测量,我们先用万用表的蜂鸣档,将万用表的红黑表笔接到电路电源线进行测量,若发现蜂鸣器响,则证明电源线有短路。如蜂鸣器没有响,则证明电源线无短路现象。
(2)再用蜂鸣档对单片机的电源、晶振、复位等电路进行测量,看有没有连接好。若连接正常,则对系统进行通电。通电前先拨出单片机。
(3)测量单片机的工作电压。看是否正常,若不正常。再用万用表进行检测,排除电源故障。
(4)若电源工作正常,插上单片机。编程控制,数码管的亮灭,以及数码管按键等,看是否正常。若都正常,测证明电路硬件连接无误。若有故障,再用万用表对出故障的模块进行检测。
7.5 软件调试
软件调试是建立在硬件调试的基础之上的。调试完硬件之后,我们就开始编写程序,对程序进行调试。我们先画出程序的流程图,然后根据流程图来编写程序。
程序编写调试方法:
方法一:根据流程图,直接编写。
方法二:先编写部分模块的程序,再对模块程序进行整合。
方法分析:
方法一中直接根据流程图写,适合小规模的程序,对于大规模的程序不适合,且程序的可移植性差。
方法二中可以移植相似的程序,节约程序编写的工作量。对于大规模的程序比较适合。程序的编写也相对比较轻松。可以节约程序的编写时间。
在本系统中,我们采取方法二来进行软件的编写与调试
程序编写和调试方法:
(1)建立主程序,定义各端口。
(2)写出数码管、按键的模块程序。
(3)对各模块程序进行整合。
(4)对整合的模块进行调试。
(5)对最终的程序进行优化。
8 结束语
这次设计数控直流稳压电源,是毕业前对我们大学四年所学知识的一个检验。检验我们的硬件设计能力,软件设计能力,还有查阅资料与人沟通等各方面的能力。同时也将我们大学四年的知识运用到实践中。
在设计的过程中,我首先设计硬件,要画原理图。以前的课程中学过protel99se这个画图软件。但是由于长时间没有用,并且那时上这个门时练习不多也不怎么熟练,所以在设计原理图的过程中很吃力,不得不查找protel99se的相关资料,再进行画图。经过几天的查找资料看其操作教程,最后完成了原理图设计。
在编写软件时,为了能尽快把程序调试好,我学习了Proteus仿真软件,利用这个仿真软件,在线实时调试程序。因为利用Proteus在程序编译完成后,就可以直接运行程序。而如果不仿真,则每次要将编译完成的代码通过下载线下载到单片机里面,再通电运行,这样很浪费时间。所以我先在Proteus仿真软件里面进行仿真,仿真好了之后,再下载到单片机里面进行检验。
在写程序时,也遇到了不少问题,自己平时没有经常的练习写程序,所以在面对这样一个系统时,不知道从哪里下手。于是在网上找了相关的例程来学习。经过几天的学习,终于找到一点当年写程序的感觉了。在调试的过程中虽然遇到一些困难,但是通过请教周围的朋友,最终得以解决。
完成硬件与软件的设计之后,再回顾此电源的设计,心中感慨万千,从理论到实践,让我明白了,学校里面学了很多很多的东西,但是我们要和实践相结合,否则就是空理论。只有将理论转化为实践,才能真正的走出校门,走向社会,完成从学生到社会型人才的转变。
参考文献
[1]邹红.数字电路与逻辑设计[M].北京:人民邮电出版社,2008.3
[2]李祥臣.模拟电子技术基础教程.[M].北京:清华大学出版社,2005.3
[3]童诗白,华成英.模拟电子技术基础[M].北京:高等教育出版社,2006.1
[4]邱关源.电路(第四版)[M].北京:高等教育出版社,2006.4
[5]李群芳,张士军,黄建.单片微型计算机与接口技术(第二版)[M].北京:电子工业出版社,2007.12
[6]刘文涛.单片机语言C51典型应用设计[M].北京:人民邮电出版社,2006.5
[7]于永,戴佳,常江.51单片机实例精讲[M].北京:电子工业出版社,2007.4
[8]曹凤.微机数控技术及应用[M].四川:电子科技大学出版社,2002.8
[9]胡寿松.自动控制原理[M].北京:科学出版社,2007.1
[10]潘永雄,沙河,刘向阳.电子线路CAD实用教程(第二版)[M].陕西:西安电子科技大学出版社,2006.9
致谢
在论文完成之际,我要忠心的感谢身边给予过我莫大帮助的老师、同学和朋友,致以他们最诚挚的谢意。
本研究及学位论文是在我的指导教师邵思飞的亲切关怀和悉心指导下完成的。他严肃的科学态度,严谨的治学精神,精益求精的工作作风,深深地感染和激励着我。从课题的选择到项目的最终完成,邵老师都始终给予我细心的指导和不懈的支持。邵老师多次询问研究进程,并为我指点迷津,帮助我开拓研究思路,精心点拨、热忱鼓励,这让我在整个论文的撰写过程中学习到了很多关于课题研究方面的知识。
真诚的感谢参加论文评审和答辩的各位老师,感谢你们的辛勤劳动和即将从你们那里获得的有益教诲;感谢学长和同学们在设计中给予的指导和帮助。
在这四年的学期中结识的各位生活和学习上的挚友让我得到了人生最大的一笔财富。在此,也对他们表示衷心感谢。
本文参考了大量的文献资料,在此,向各学术界的前辈们致敬。最后要感谢的是我的父母和家人,感谢他们多年来对我默默的支持和帮助。由衷的希望在未来的日子里,周围的老师、同学和朋友们一如既往的在各方面继续给予我更多的指教和帮助,以期取得新的进步和成绩来回报大家。
附录一 程序清单
#include<REG52.h>
sbit SCLK =P2^0 ; //定义端口
sbit DIN =P2^2;
sbit CS =P2^1 ;
sbit K1 =P3^0;
sbit K2 =P3^1;
sbit K3 =P3^2;
sbit K4 =P3^3;
sbit K5 =P3^4;
unsigned int temp;//中间变量
unsigned char j=0; //j_片选,vout_电压输出
unsigned char counter[4]={0x08,0x04,0x02,0x01};
char scan1,scan2,scan3,scan4;
const seven_seg[10]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};//数码管的显示
const seven_seg_point[10]={0xbf,0x86,0xdb,0xcf,0xe6,0xed,0xfd,0x87,0xff,0xef};//有小数点的数码管显示
/*
TI 10位DA TLC5615的驱动程序 ----------------------------------------------------
调用方式: void da5615(unsigned int da)
函数说明: TI 10位DA TLC5615的驱动程序
--------------------------------------------------------------------------------
*/
void display();
void delay(int x)
{
int i ;
for(i=0;i<x*140;i++)
display();
}
void display()
{
P1=counter[j];
switch(j)
{ case 0:P0=seven_seg[scan1];break;
case 1:P0=seven_seg_point[scan2];break;
case 2:P0=seven_seg[scan3];break;
case 3:P0=seven_seg[scan4];break;
default:break; //j为其他情况是跳出循环
}
j++;
if(j==4) j=0;
}
void da5615(unsigned int da) //DA子函数
{
unsigned char i;
da<<=6;
CS=0;
SCLK=0;
for (i=0;i<12;i++)
{
DIN=(bit)(da&0x8000);
SCLK=1;
da<<=1;
SCLK=0;
}
CS=1;
SCLK=0;
for (i=0;i<12;i++); //12位数值转换成串行输给DA芯片
}
/*void delay(int x)
{
int i,j;
for(i=0;i<x;i++)
for(j=0;j<120;++);
}*/
key1()//按键1
{
if(!K1)
{
delay(20);
if(!K1)
{ delay(10);
return (1);
}
}
else return(0);
}
key2()//按键2
{
if(!K2)
{
delay(20);
if(!K2)
{ delay(10);
return (1);
}
}
else return(0);
}
key3()//按键3
{
if(!K3)
{
delay(20);
if(!K3)
{ delay(10);
return (1);
}
}
else return(0);
}
key4()//按键4
{
if(!K4)
{
delay(20);
if(!K4)
{ delay(10);
return (1);
}
}
else return(0);
}
key5()//按键4
{
if(!K5)
{
delay(20);
if(!K5)
{ delay(10);
return (1);
}
}
else return(0);
}
void vout()
{ unsigned int num;//中间变量
if(key1())//按键+
{
scan1++;
if(scan1==10)
{ scan1=0;
scan2++;
if(scan2==10)
scan2=scan1=9;
}
}
if(key2()) //按键-
{
if(num>1)
{
scan1--;
if(scan1==-1)
{ scan1=9;
scan2--;
if(scan2==-1)
{
scan2=9;
scan1--;
}
}
}
}
if(key3())
{
scan2++;
if(scan2==10) scan2=9;
}
if(key4())
{
scan2--;
if(scan2==-1) scan2=0;
}
num=10*(scan2*10+scan1);//输出的数字量
if(num==1000) num=990;
if(key5()) temp=num; //短按确认
}
main()
{
while(1)
{
da5615(temp);
vout();
display();
}
}
}
}
展开阅读全文