基于单片机的稳压电源设计原理说明
基于单片机的智能稳压电源设计

基于单片机的智能稳压电源设计摘要本智能稳压电源利用16位单片机SPCE061A为控制核心,可预置输出电压值并显示在液晶显示模块(LCD)上,通过其内置的A/D输出对PWM进行调制,再控制大功率开关管导通,再经过滤波输出。
同时通过采样电路将实际输出值反馈到单片机中构成闭环系统,进行比较、调整,提高了电源的输出精度。
输出电压范围为0.01v~10v,而且可以步进调整输出的电压值。
关键词:智能;单片机;PWM调制;稳压电源Design of Smart Power Supply Based on SCMWu Renjie(College of Physics Science and Information Engineering, Jishou University, Jishou,Hunan 416000)AbstractThe 16 Bit SCM SPCE061A was used as the control unit in this design, the output voltage value can be protested form the keyboard and displayed it on the LCD module .At the same time, its built-in A / D converter moderate the output as pulse width moderation(pwm), and switch on the output, after that output through a filter . At the same time the circuit would sample the actual output value and feedback the output to the SCM’s input system, after comparing and adjusting to improve the output accuracy. Output voltage range from 0.01 v to 10v, it can also stepping adjust the output voltage value.Key words:intelligent;SCM;PWM modulation;power supply目录第一章引言 (1)第二章方案论证与设计 (2)2.1 系统整体方案论证 (2)2.2数据采集和处理器选择 (2)2.3 电源供电电路 (2)2.4 显示电路模块 (2)第三章系统总体设计方案及设计框图 (3)第四章系统模块电路分析 (4)4.1 SPCE061A[1]单片机最小系统概述 (4)4.1.1 ADC 的控制 (5)4.1.2 DAC 的控制 (6)4.1.3 IO 端口结构 (7)4.1.4 单片机端口资源的分配 (8)4.2 电压控制电路 (8)4.2.1 ADC、DAC电压调整电路 (9)4.2.2 脉宽调节电路的工作原理 (10)4.2.3 脉宽调制电路参数的选择 (12)4.2.4 开关管输出的电路参数的选择 (13)4.2.5 平滑电容电阻的参数选取 (13)4.3 键盘设计 (14)4.4 液晶显示 (14)4.5 正负电源供电电路 (18)第五章软件流程图 (19)5.1 主程序 (19)5.2 键盘程序 (19)5.3 闭环调整子程序 (20)第六章系统测试和误差分析 (22)6.1 系统功能测试 (22)6.2 系统误差分析 (22)参考文献 (23)附录 (24)结束语 (30)基于单片机的智能稳压电源设计引言第一章引言直流稳压电源是电子技术常用的设备之一,广泛的应用于教学、科研等领域。
基于单片机的数控直流稳压电源

文章编号:167222965(2008)022*******基于单片机的数控直流稳压电源高 松(唐山工业职业技术学院,河北唐山 063020) 摘 要:提出了运用单片机来实现智能控制和利用L M317和电阻串联网络构成数控直流稳压电源的一种方案。
关键词:单片机;数控;直流电源中图分类号:TM33 文献标识码:ADC Pow er Supply of Numeric Control by Single Chip MicroprocessorGao Song(Tangshan Industrial Vocation 2Technical College ,Tangshan 063020)Abstract :This paper refers to an intelligent cont rol by single chip microprocessor ,and wit h L M317and resistance in series mesh to form t he DC power supply of numerical cont rol.K ey Words :single chip microp rocessor ;numerical co nt roller ;DC power supply 现代社会越来越注重仪器的数字化和智能化,传统的直流电源中电压的调节方式既麻烦又对电路的性能造成影响,因此在许多数控直流稳压电源的实现方案中都使用了模数或数模转换芯片,这无疑增加了设备的成本和复杂性。
本设计通过单片机来实现电压输出的智能控制,使整个电路的性能得到很大提高,而且操作方便。
系统结构见图1。
图1 数控电压源方框图本设计以单片机为核心,一边监测键盘一边显示当前输出电压值,并向模拟开关输出当前设定值。
当键盘中控制输出电压的增减键被按下时,单片机就会对设定值进行相应的增减操作,并将修改之后的设定值送给模拟开关,更新输出电压为当前设定值。
基于单片机实现的12V恒压源

专业课综合课程设计说明书题目:基于单片机实现的12V数控稳压源设计系部:专业:班级:学生姓名: 学号:指导教师:2011年11 月30 日目录1 设计任务与要求 (1)1.1 设计任务 (1)1.2 设计要求 (1)1.2.1 基本要求 (1)2 总体方案论证与设计 (1)2.1 稳压电源电路方案的比较与选择 (1)2.2 控制器方案的比较与选择 (1)2.3 电流检测电路方案的比较与选择 (2)2.4 电压检测电路方案的比较与选择 (3)2.5 电流比例控制方案的比较与选择 (3)2.6 PWM波的产生的方案的比较与选择 (4)2.7 显示方案的比较与选择 (4)2.8 键盘的比较与选择 (4)2.9 总体设计思路 (5)3 系统硬件设计 (5)3.1 系统供电单元 (5)3.2 单片机控制电路单元 (6)3.3 电流电压检测电路单元 (7)3.4 过流保护电路单元 (7)3.5 PWM波产生单元 (8)4系统软件设计 (8)4.1 软件组成 (8)4.2 程序流程图 (9)5 系统测试 (10)5.1 测试仪器与设备 (10)5.2 测量数据分析与比较 (10)5.3 误差分析及结论 (10)6心得体会 (11)1 设计任务与要求1.1 设计任务设计一基于ATMEG8单片机实现的12V数控直流稳压源。
1.2 设计要求1.2.1 基本要求1) 以ATMEG8为核心的单片机作为控制模块。
2) 将键盘输入转换为模拟信号量作为预设值输入控制模块,同时送LCD显示,再根据输出的电压量来调整PWM输出波形,从而控制电流的变化。
3) 写出详细的设计报告。
4) 给出全部电路和源程序。
2 总体方案论证与设计本系统采用ATMEG8为核心的单片机作为控制模块。
将键盘输入转换为模拟信号量作为预设值输入控制模块,同时送LCD显示,再根据输出的电压量来调整PWM输出波形,从而控制电流的变化。
此方案的优点是输入的预设值电流信号稳定且避免了大量的数据存储。
基于单片机的数字可调稳压电源

摘要毕业设计论文基于单片机的数字可调稳压电源的设计系别:专业(班级):作者(学号):指导教师:完成日期:蚌埠学院教务处制基于单片机的数字可调稳压电源的设计摘要:基于单片机的数字可调直流稳压电源由于原理简单、便于操作、稳定性好、精度高、成本低、易于实现等诸多优点而受到越来越广泛的重视。
其性能比传统的可调直流稳压电源好,非常适合一般教学和科研使用。
本文通过对一个基于单片机的数控直流稳压电源的设计,将单片机数字控制技术、有机地融入直流稳压电源的设计中,设计出一款数字化通用直流稳压电源,详细介绍了AT89C52单片机应用中的键盘扫描原理、数码管动态显示原理、定时器中断原理,从而了解单片机相关指令在各方面的应用,同时还介绍了数模转换芯片DAC0832的工作原理。
系统由模拟电源、控制电路、数模转换电路、放大电路、显示电路等部分构成,输出0-12V电压范围,步进值为0.1V的直流电源。
电源的数字化控制是人们追求的目标之一,人们对它的要求也越来越高,数控直流稳压电源能给人们带来很大的方便,为我们工作、科研、生活提供更好、更方便的服务。
本题采用单片机和其他元件及外围电路,开发一个数字可调式稳压电源,能够设定输出电压值、电压输出显示等功能。
关键词:单片机、直流、稳压、数模转换Based on single-chip digital adjustableregulated power supply designAbstract: Microcontroller-based digital adjustable DC power supply as simple in principle, easy operation, good stability, high accuracy, low cost, easy to implement, andmany other advantages of being more widely appreciated. Performance than thetraditional adjustable DC power supply is good, very suitable for general teachingand research use.In this paper, a microcontroller-based digital controlled power supply design, the single chip digital control technology, organic integration into the DC powersupply design, digital design of a universal DC power supply, details of theAT89C52 microcontroller applications The keyboard scanning principle, thedigital dynamic display principle, the timer interrupt principle, to understandinstruction in all aspects of SCM-related applications, but also introduces theDAC0832 digital-analog converter chip works. System consists of analog powersupply, control circuits, digital to analog conversion circuit, amplifier circuit,display circuit and other parts, output 0-12V voltage range, step value of 0.1V DCpower supply.Digital control of power is one of the goals people pursue, people demand more and more of it, NC DC power supply can give them great convenience forour work, scientific research and to provide better and more convenient service.The problem with single chip and other components and peripheral circuits, thedevelopment of a number of adjustable power supply, can set the output voltage,the voltage output display.Keyword s: microcontroller; DC; regulators; digital to analog conversion目录第一章绪论 (1)1.1研究目的及意义 (1)1.2国内外发展状况 (2)1.3论文构成及研究内容 (3)第二章数字式可调稳压电源原理介绍 (4)2.1方案选择及总体原理介绍 (4)2.2单片机AT89C52原理及其介绍 (5)2.3矩阵键盘扫描原理介绍 (6)2.4 LCD-1602显示原理介绍 (7)2.5数模转换电路原理介绍 (9)第三章数字式稳压电源硬件电路设计 (12)3.1稳压电源数字部分设计 (12)3.1.1单片机主体电路设计 (12)3.1.2键盘部分电路设计 (13)3.1.3 DAC0832数模转换部分电路设计 (13)电路图如下 (14)3.2电压输出单元电路 (15)第四章数字式可调稳压电源软件程序设计语言 (16)4.1 系统软件流程图 (16)4.2 系统程序介绍 (17)4.2.1 初始化硬件程序 (17)4.3 主程序程序语言 (18)结论 (25)谢词...............................................................26参考文献 (26)附录一数字部分电路总图 (27)第一章绪论1.1研究目的及意义在当代科技与经济高速发展的过程中,电源技术尤其是数控电源技术是一门实践性很强的工程技术,服务于各行各业.电力电子技术是电能的最佳应用技术之一.当今电源技术融合了电气、电子、系统集成、控制理论、材料等诸多学科领域。
基于单片机的PWM型开关稳压电源设计

基于单片机 的 P WM 型开 关稳 压电源设 计
文/ 燕 哲
开 关 电 源 是 利 用 现 代 电 力 电 子技 术 ,控 制开 关管 开通 和 关断 的 时 间 比 率 , 维 持 稳 定 输 出 电 压 的一种 电源。开 关稳 压 电源 具有 体 积 小、 重量 轻 、效 率 高、对 电 网 电压 及 频 率 的 变 化 适 应 性 强 、 输 出电压 保持 时 间长 、有 利 于计 算机信 息 保护 等优 点 ,因 而广泛 应 用 于以 电子 计算机 为主导 的各 种 终 端 设 备 、 通 信 设 备 ,是 当 今 电子信 息 产业 飞速发 展 不可 缺 少 的 一 种 电 源 本 丈 介 绍 的 是 基 于
单 片机 的 P V '  ̄ I 型 开 关稳 压 电源,
+ _ t - U 卜 - 、 一
图1 :整 体 结 构 框 图
项 目是本人 在教 学中的 实际案 例,
经本 人验 证 后 ,实现 效果 较好 。
该项 目结构较为简单, 稳 定率高, 实用性强,能够应 用在较 多场合 。
开 关 电源 应 具 备 整 流 电路 、 滤 波 电 路 和 稳 压 电
路。P W M 稳 压 电源 是 利 用 脉 冲 宽 度 调 制 的 方
法 来 控 制 开 关 元 件 的接 通 时 间 与 管 断 时 间 从 而 实 现 稳 压 输 出 。该 项 目采 用 单 片 机 来 作 为 控 制
常见的 P WM 型 D C. DC 变 换 器 主 要 有 降 压型 ( B u c k )、 升 压 型 ( Bo o s t ) 、 降 压 升 压型 ( Bu c k — B o o s t )和 升 压 一 降压型 ( Cu k )。
MCU控制的可编程稳压电源设计

MCU控制的可编程稳压电源设计摘要直流稳压电源是电子设计中常用的设备之一,广泛应用于电子电路的各个领域。
传统的直流稳压电源功能简单,难于控制,可靠性低,干扰大,精度低,体积大且复杂度高。
而基于单片机控制的直流稳压电源则能较好地解决以上传统稳压电源的不足。
本设计控制芯片选用51系列单片机,基本原理为通过单片机串口在线调整X9313系列数字电位器的阻值,从而实现对三端稳压器LM317输出电压的调整。
通过51系列单片机编程可以非常方便地调整X9313数字电位器的阻值。
稳压芯片采用三端稳压器LM317,LM317非常易于使用,只需要两个外部电阻即可设置其输出电压。
本次设计中使用Keil软件进行单片机的编程,Keil 软件功能强大,支持C语言编程,借助其调试功能,可以直观的了解到软件运行的结果,使繁琐的编程工作变得简单。
硬件电路仿真使用Proteus软件,可以方便地对单片机及其外围电路进行仿真。
设计中着重研究了X9313系列数字电位器的原理和应用,以及如何通过单片机串口在线调整数字电位器的阻值。
数字电位器本身能够承受的电流和电压有限,在实际应用中需要进行扩展,本设计介绍了对其端点电压进行扩展的方法。
本设计能够实现计算机在线调整三端稳压器LM317的输出电压,输出电压值和数字电位器的阻值能够在1602液晶上实时显示出来。
关键词:直流稳压电源,单片机,X9313系列数字电位器,三端稳压器LM317,串口,1602液晶A DESIGN OF PROGRAMMABLE DC REGULATED POWER SUPPLYBASED ON MCUABSTRACTThe DC regulated power supply is a common device that widely used in the electronic system.Traditional DC Regulated Power Supply has many disadvantages,for example,function is simple, low reliability,big jam,low accuracy,volume is big and system is complicated. The programmable DC regulated power supply based on MCU can solve this problems.This design chooses MCS-51 serieses MCU as a controller, the radical principle of design is changing a X9313 dallastat's resistance by MCU's serial port on line.It is very convenient to change a X9313 dallastat's resistance by MCU's programming.The design chooses the LM317 as regulation chip,only needs two external resistances to change its output voltage.This design uses Keil software to program MCU's function.The hardware emulation of MCU and peripheral equipment use Proteus software.This design emphasizes the priniple and application of the X9313 dallastat, and how to change a X9313 dallastat's resistance by MCU's serial port on line.The X9313 dallastat's capability of supply voltage and current is restricted,in practical application need to expand its port voltage and current.This design introduced a method of expand X9313 dallastat's port voltage.This design can use computer to change the output voltage of LM317,and the same time display the value of output voltage and the resistance of the X9313 dallastat on 1602LCD.KEY WORDS:DC regulated power supply, MCU, X9313 dallastat, LM317, serial port, 1602LCD目录前言 (1)第一章设计综述 (3)§1.1 设计原理图 (3)§1.2 X9313对LM317的控制 (3)§1.3 串口使用 (4)§1.4 1602液晶显示 (5)第二章硬件设计 (6)§2.1 51系列单片机 (6)§2.1.1 单片机串口 (7)§2.1.2 定时器/计数器 (7)§2.1.3 并行I/O接口 (8)§2.2 三端稳压器LM317 (8)§2.2.1 LM317特性 (9)§2.2.2 LM317应用 (9)§2.3 集成运放LM324 (10)§2.3.1 LM324特性 (10)§2.3.2 LM324应用 (11)§2.4 数字电位器X9313 (12)§2.4.1 X9313工作原理 (12)§2.4.2 X9313应用 (14)§2.5 Proteus硬件仿真 (15)第三章程序设计 (17)§3.1 程序流程图 (17)§3.2 X9313程序设计 (18)§3.3 单片机串口程序设计 (18)§3.4 1602液晶显示程序设计 (19)第四章硬件实现及测试 (20)§4.1 硬件实现 (20)§4.2 硬件测试 (20)结论 (23)参考文献 (24)致谢 (26)附录 (27)前言随着电子技术的迅速发展,直流稳压电源的应用已经非常广泛。
基于单片机的数控直流稳压电源设计

基于单片机的数控直流稳压电源设计一、概述随着科技的飞速发展,电子设备在我们的日常生活和工业生产中扮演着越来越重要的角色。
这些设备的稳定运行离不开一个关键的组件——电源。
在各种电源类型中,直流稳压电源因其输出电压稳定、负载调整率好、效率高等优点,被广泛应用于各种电子设备和精密仪器中。
传统的直流稳压电源通常采用模拟电路设计,但这种方法存在着电路复杂、稳定性差、调整困难等问题。
为了解决这些问题,本文提出了一种基于单片机的数控直流稳压电源设计方案。
本设计采用单片机作为控制核心,通过编程实现对电源输出电压的精确控制和调整。
相比于传统的模拟电路设计,基于单片机的数控直流稳压电源具有以下优点:单片机具有强大的计算和处理能力,能够实现复杂的控制算法,从而提高电源的稳定性和精度单片机可以通过软件编程实现各种功能,具有很强的灵活性和可扩展性单片机的使用可以大大简化电路设计,降低成本,提高系统的可靠性。
本文将详细介绍基于单片机的数控直流稳压电源的设计原理、硬件电路和软件程序。
我们将介绍电源的设计原理和基本组成,包括单片机控制模块、电源模块、显示模块等我们将详细介绍硬件电路的设计和实现,包括电源电路、单片机接口电路、显示电路等我们将介绍软件程序的设计和实现,包括主程序、控制算法、显示程序等。
1. 数控直流稳压电源的应用背景与意义随着科技的快速发展,电力电子技术广泛应用于各个行业和领域,直流稳压电源作为其中的关键组成部分,其性能的稳定性和可靠性直接影响着整个系统的运行效果。
传统的直流稳压电源多采用模拟电路实现,其调节精度、稳定性以及智能化程度相对较低,难以满足现代电子设备对电源的高性能要求。
开发一种高性能、智能化的数控直流稳压电源具有重要意义。
数控直流稳压电源通过引入单片机控制技术,实现了对电源输出电压和电流的精确控制。
它可以根据实际需求,通过编程灵活调整输出电压和电流的大小,提高了电源的适应性和灵活性。
同时,数控直流稳压电源还具备过流、过压、过热等多重保护功能,有效提高了电源的安全性和可靠性。
基于MCU控制的开关电源稳压电路设计

基于MCU控制的开关电源稳压电路设计李淑红;邢军【摘要】A voltage regulator circuit of the switching power supply based on MCU control was designed,which is com-posed of rectification filtering circuit,push-pull power conversion circuit and control circuit. In this circuit,the output voltage of the switching power supply is controlled by regulating PWM via the MCU. The digital signal output by MCU is converted into analog signal through the DAC0832. The analog signal is taken as the reference voltage of the second pin of the switching con-trol chip SG3525. SG3525 generates PWM control pulse automatically according to the variation of reference voltage to regulate the output pulse width of the switching tube,so the purpose of regulating the output voltage is achieved. The experimental re-sults show that the output voltage adjustable range is 28~36 V,the maximum output current is 15 A,and the efficiency of the switching power supply is 89%.%设计了一款基于MCU控制的开关电源稳压电路,该系统主要由整流滤波电路、推挽式功率变换电路和控制电路组成,并通过MCU调节PWM控制开关电源输出电压.MCU输出的数字信号通过DAC0832转换为模拟信号,该模拟信号作为开关控制芯片SG3525第二管脚的基准电压,SG3525根据基准电压的变化自动产生PWM控制脉冲,调节开关管的输出脉宽,从而达到调节输出电压的目的.实验表明,输出电压可调范围为28~36 V,最大输出电流Imax=15 A,开关电源的效率为η=89%.【期刊名称】《现代电子技术》【年(卷),期】2015(038)022【总页数】4页(P139-141,146)【关键词】开关电源;MCU;SG3525;稳压电路【作者】李淑红;邢军【作者单位】河南省电子产品质量监督检验所,河南郑州 450005;河南省电子产品质量监督检验所,河南郑州 450005【正文语种】中文【中图分类】TN702-34传统的开关稳压电源通常以模拟脉宽调制芯片为核心控制开关电路、整流电路等完成稳定电压输出。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
4 稳压电源设计4.1 电路分析稳压电路见图4-1所示。
三极管射极电压是稳压电源的输出电压,可以接用电器或负载,这个电压值通过TLC549(A/D,同TLC548)数据转换后,送往单片机处理并显示。
调整按键可以改变输入TLC5615(D/A,同TLC5616)的数据。
TLC5615的输出电压通过运算放大器与实际输出取样电压比较,控制三极管的电压输出。
稳压电路的电压输出接受单片机检测,同时又受单片机的控制。
电路在仿真时,各点的电压都连接有电压表显示。
图 1 稳压电路4.2 电路模块一、A/D转换部分TLC549 对输出电压进行采集,其操作如下:(1)cs先为高电平。
(cs为片选信号,为1时,输入脉i/o clock不起作用);(2)clock = 0(3)cs = 0;cs置底电平。
同时date_out为高。
(=1);(4)延时1.4us。
(setup time,cs low before first clock);(5)开始转化数据。
因为TLC549是8位串行模数转换器。
需将8 位数据依次串行输出。
期间,clock高低电平转化一次;(6)8次数据转化之后。
cs置1,片选无效。
等待17us后读出数据。
二、D/A转换部分TLC5615为10位D/A转换电路,其原理TLC5615的PDF文件。
输出电压= (转换数值/1024)*2*基准电压三、显示采用数码管对A/D转换后的数据进行显示,因为TLC549 是8位A/D,程序中需要对转化的数据进行处理后才能在七段数码管上动态显示。
TLC549的检测电压值范围为0~5V,A/D转换后数据位0~255,应该显示0~5,并且包含小数点部分。
四、按键操作部分四个独立的按键主要是对DA 的输入数据进行操作的,ADD按键,SUB 按键这些按键在安下一次松开后便进行加1 的操作,若按键超过一定的时间则增加步长,使其数值能够快速增加,这样就不必要达到一个电压时,一直按几百次。
SUB按键也是如此。
至于那个预读取按键,主要是用于保存你要常用的电压值,这样一来你就可以在使用此电源时,不必要每次都要按键调整,可以通过读取AT24C04的值进行电压预置,保存按键,是用于保存你长使用的电压值,通过此次的电压值保存,使你可以快速达到你所要求的电压值。
4.3 编程思路程序分为键盘处理、D/A、A/D和存储四个模块。
运用扫描法,对键盘进行扫描,有按键就更改输入TLC5615 的数值,ADD按键是对数据进行加以操做,长按的话使步进值增大,实现快加,SUB按键与ADD按键同,预读取按键用于读取AT24C04中预置的数值,保存按键用于保存当前电压值;显示部分主要是对TLC549采集回来的电压进行处理显示,它主要是在定时器0的中断服务程序中显示,100ms刷新显示一次;TLC5615模块,通过对dA的串行数据输入,使其在输出电压时可控,输出电压后经lm324,三极管,加上负载输出电压,输出电压后,用TLC549芯片100ms采集一次,送数码管显示。
4.5 程序清单主函数:#include <REG51.H>#include "intrins.h"#include "AT24C04.h"#define uchar unsigned char#define uint unsigned intuchar code LED[10] = {0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};uchar code Bit_sel[4] = {0x08,0x04,0x02,0x01 }; //各个数码管对应的位选数据sbit DIO = P1^0; //数据线sbit CS = P1^1; //片选sbit CLK = P1^2; //io口时钟sbit SCS = P1^4;sbit SDATA = P1^5;sbit SCLK = P1^3;sbit ADD = P3^0;sbit SUB = P3^1;sbit Pre_read = P3^2;sbit Store = P3^3;uint qian,bai,shi,ge; //用于显示数码管的千,百,十,个等四位的显示uint val,num; //val 是用于输入DA 的数据,num是用于判断是不是长按的uint cp; //计数的变量uchar key_stat;uchar add_stat,sub_stat;uchar st_flag,pre_flag;void delay(uint x) //微妙级是延时函数{while(x--)_nop_();}/**********************************************函数名称:deal函数作用:处理AD的返回值函数参数:无函数返回值:无**********************************************/void deal(uint num) //显示程序{qian=num/1000; //千,百,十,个处理bai=num/100%10;shi=num/10%10;ge=num%10;}/**********************************************函数名称:TL549_AD()函数作用:返回AD的返回值函数参数:无函数返回值:data_ad**********************************************/uint TL549_AD() //TLC549处理{uchar i;uint data_ad = 0;CS = 1; //初始化,启动CLK = 0;CS = 0;_nop_();for(i = 0;i < 8;i++) //读取采集数据,读取的是上一次采集数据{CLK = 1;if(DIO)data_ad |= 0x01;CLK = 0;data_ad = data_ad << 1;}CS = 1;data_ad = data_ad * (500/ 256);return(data_ad);}/********************************************** 函数名称:TLC5615_DA(uint da)函数作用:TLC5615_DA 将da转换后模拟输出函数参数:da函数返回值:无**********************************************/void TLC5615_DA(uint da) // TLC5615 的DA 转换函数{uchar i;da<<=6;SCS=0;SCLK=0;for (i=0;i<12;i++){SDATA=(bit)(da&0x8000);SCLK=1;da<<=1;SCLK=0;}SCS=1;SCLK=0;for (i=0;i<12;i++);}/********************************************** 函数名称:key_scan()函数作用:处理那些独立键盘函数参数:无函数返回值:无**********************************************/void key_scan(){if (ADD == 0) // ADD 按键的键盘处理函数{delay(10);if (ADD == 0){add_stat = 1;num ++;}else{add_stat = 0;num = 0;}//此处判断是不是长按,长按的话使其步进值加大if (ADD == 0 && add_stat == 1 && num >= 300){val += 5;num = 0;}if (ADD == 1 && add_stat == 1){val ++;num = 0;add_stat = 0;}if (val >= 1024){val = 1023;}}if (SUB == 0) //SUB 按键的键盘处理函数{delay(10);if (SUB == 0){sub_stat = 1;num ++;}if (SUB == 0 && sub_stat == 1 && num >= 300){val -= 5;num = 0;}if (SUB == 1 && sub_stat == 1){val --;num = 0;sub_stat = 0;}if (val <= 0)val = 0;}if (Pre_read == 0) //预读数据的键盘处理函数{delay(100);if (Pre_read == 0){pre_flag = 1;}if (Pre_read == 1 &&pre_flag == 1 ){pre_flag = 0;val = read_24C04(20); //从AT24C04中的地址20 中读出预存储的数据}}if (Store == 0) //保存数值按键的键盘处理函数{delay(100);if (Store == 0){st_flag = 1;}if (Store == 1 && st_flag == 1){st_flag = 0;write_24C04(20,val); //向AT24C04中的地址20 写入存储的数据}}}/**********************************************函数名称:timer0_init (void)函数作用:初始化定时器0,并设置函数参数:无函数返回值:无**********************************************/void timer0_init (void) // timer0中断初始化函数{EA = 0;TMOD = 0x01;TR0 = 0;TL0 = (65536-5000)%256; //设置计数器初值TH0 = (65536-5000)/256;PT0 = 1;ET0 = 1;EA = 1;TR0 = 1;}/**********************************************函数名称:main(void)函数作用:main主函数入口函数参数:无函数返回值:无**********************************************/void main(void) //主程序{timer0_init(); //初始化定时器0init_24C04(); //初始化A T24C04while(1){key_scan(); //调用键盘扫描函数TLC5615_DA(val);//处理键盘发送过来的值}}/**********************************************函数名称:timer0_isr(void) interrupt 1函数作用:定时器0,方式1,的中断服务子程序函数参数:无函数返回值:无**********************************************/void timer0_isr(void) interrupt 1 // timer0中断服务函数{//数码管的位选变量TR0 = 0; //停止计数TL0 = (65536-5000)%256; //重新载入计数器初值TH0 = (65536-5000)/256;cp++; //位循环变量加1if(cp >= 4)cp = 0;deal(TL549_AD()); //循环显示1次,j清零TR0 = 1;P0=0xff; //与j对应,P2输出数码管的位选信号switch(cp){case 0: P0 = LED[ge]; break;case 1: P0 = LED[shi]; break;case 2: P0 = LED[bai]&0x7f; break;case 3: P0 = LED[qian]; break;}P2 = Bit_sel[cp];}AT24C04 的驱动:#ifndef AT24C04_10_04_07sbit ATCLK=P1^6;sbit SDA=P1^7;sbit a7=ACC^7;sbit a6=ACC^6;sbit a5=ACC^5;sbit a4=ACC^4;sbit a3=ACC^3;sbit a2=ACC^2;sbit a1=ACC^1;sbit a0=ACC^0;/****************************24C04的初始化****** **************/void init_24C04(){SDA=1;_nop_();ATCLK=1;_nop_();}/*************************启动24C04****************************/void start_24C04(){SDA=1;_nop_();ATCLK=1;_nop_();SDA=0;_nop_();ATCLK=0;_nop_();}/*************************停止24C04****************************/void stop_24C04(){SDA=0;_nop_();ATCLK=1;_nop_();SDA=1;_nop_();}/*************************24C04应答****************************/void response(){unsigned char i;ATCLK=1;_nop_();while((SDA==1)&&(i<250))i++;ATCLK=0;_nop_();}/*************************读取24C04一个字节****************************/unsigned char read_byte(){SDA=1;ATCLK=1;a7=SDA;ATCLK=0;ATCLK=1;a6=SDA;ATCLK=0;ATCLK=1;a5=SDA;ATCLK=0;ATCLK=1;a4=SDA;ATCLK=0;ATCLK=1;a3=SDA;ATCLK=0;ATCLK=1;a2=SDA;ATCLK=0;ATCLK=1;a1=SDA;ATCLK=0;ATCLK=1;a0=SDA;ATCLK=0;SDA=1;ATCLK=0;return ACC;}/***************************写入24C04一个字节*******************************/void write_byte(unsigned char addr){ACC=addr;SDA=a7;A TCLK=1;ATCLK=0;SDA=a6;A TCLK=1;ATCLK=0;SDA=a5;A TCLK=1;ATCLK=0;SDA=a4;A TCLK=1;ATCLK=0;SDA=a3;A TCLK=1;ATCLK=0;SDA=a2;A TCLK=1;ATCLK=0;SDA=a1;A TCLK=1;ATCLK=0;SDA=a0;A TCLK=1;ATCLK=0;SDA=1;ATCLK=0;}/*************************写24C04的数据************************/void write_24C04(unsigned char addr,unsigned char dat) {start_24C04();write_byte(0xa0);response();write_byte(addr);response();write_byte(dat);.;.response();stop_24C04();}/*************************读24C04的数据************************/unsigned char read_24C04(unsigned char addr) {unsigned char t;start_24C04();write_byte(0xa0);response();write_byte(addr);response();start_24C04();write_byte(0xa1);response();t=read_byte();stop_24C04();return t;}#endif。