基于单片机的稳压电源设计原理说明参考word

合集下载

基于单片机的智能稳压电源设计

基于单片机的智能稳压电源设计

基于单片机的智能稳压电源设计摘要本智能稳压电源利用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)基于单片机的智能稳压电源设计引言第一章引言直流稳压电源是电子技术常用的设备之一,广泛的应用于教学、科研等领域。

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

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

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 的操作,若按键超过一定的时间则增加步长,使其数值能够快速增加,这样就不必要达到一个电压时,一直按几百次。

基于单片机的直流稳压电源的设计设计

基于单片机的直流稳压电源的设计设计

基于单片机的直流稳压电源的设计设计毕业设计论文基于单片机的直流稳压电源的设计摘要直流稳压电源是电子技术常用的设备之一,广泛的应用于教学、科研等领域。

传统的直流稳压电源几乎都是用旋纽开关调节电压,调节精度不高、难控制、体积大、结构复杂,而且经常跳变,使用麻烦。

将单片机数字控制技术融入直流稳压电源的设计中,设计出的数字化直流稳压电源具有数码显示、数字输入调压、电压调节精度高的特点。

而且通过软件编程,易于实现功能的扩展。

数控电源目前的发展,主要朝着更高的数控精度和分辨率及更好的动态特性;更好的环保性能;智能化与高可靠性;更广泛的应用方向发展。

本设计利用AT89S51作为主控芯片,控制数模转换模块DAC0832的输出电压,通过运算放大器OPA552放大输出。

设置四个按键,来实现电压的增减,并带有数码显示模块。

可以达到每步0.1V的精度,输出电压范围0~15V,电流可以达到200mA。

关键词:数控电源;AT89S51;DAC0832;OPA552AbstractDirect current voltage-stabilized power supply is one of the commonly used equipment in electronic technology. It’s widely used in teaching, researching and other fields.Most of the traditional direct current voltage-stabilized power supply use the knob switch to adjust the voltage.It has the trouble of low-precision and difficult to control. The structure is complex and the volume is large.The numerical control technique of single chip microcomputer is adopted in the design of direct current voltage-stabilized power supply for a digitalized.Having numeral display,the direct current power can adjust voltage programmably and differentiate voltage precisely.Moreover,it’s easy to have its function enlarged through the programmer.Numerical control direct current voltage-stabilized power supply mainly toward to high-precision,high-resolution,better dynamic characteristics,better environmental performance,intelligent,high reliability and wider application direction.In this design,using the AT89S51 as main module to control the output voltage of DAC0832. The voltage is magnified by amplifier OPA552. In this system, the step of voltage is control by four keys, and the display module is also designed.The step precision is 0.1V,the output voltage is range from 0V to 15V and the current is up to 200mA.Key words: Numerical control power;AT89S51;DAC0832;OPA552目录摘要 (I)Abstract (II)第1章绪论 (1)1.1 课题的背景和意义 (1)1.2 数控电源的发展 (1)第2章方案设计 (3)第3章系统硬件电路设计 (4)3.1 主要电路的设计 (4)3.2 具体电路介绍 (4)3.2.1 主控单元电路 (4)3.2.2 信号处理电路 (8)3.2.3 电压放大电路 (12)3.2.4 按键电路 (14)3.2.5 显示电路 (15)第4章系统软件设计 (18)4.1 程序运行原理 (18)4.2 程序流程 (19)4.2.1 延时子程序流程 (19)4.2.2 拆分送显存子程序流程 (19)4.2.3 显示子程序流程 (20)4.2.4 主程序流程 (21)第5章设计仿真及调试 (22)5.1 WA VE6000集成调试软件简介 (22)5.2 程序调试的步骤 (23)第6章电路调试及实验分析 (25)6.1 实验仪器 (25)6.2 电路焊接和调试 (25)6.3 实际电压与显示电压对比分析 (25)6.4 系统误差分析 (26)结论 (27)参考文献 (28)附录1 电路原理图 (29)附录2 程序清单 (30)附录3 实物图 (35)致谢 (36)第1章绪论1.1 课题的背景和意义电源技术尤其是数控电源技术是一门实践性很强的工程技术,服务于各行各业。

基于单片机的数控直流稳压电源设计方案

基于单片机的数控直流稳压电源设计方案

基于单片机的数控直流稳压电源设计方案一、设计方案简介基于单片机的数控直流稳压电源设计方案主要是通过单片机控制开关电源的开关管,控制输出电压的稳定性和精度。

本设计方案采用闭环控制的方式,通过反馈电路将输出电压反馈给单片机,单片机根据反馈信号控制开关电源的开关管进行开关操作,以实现电源输出电压的稳定。

二、设计方案详细介绍1.系统总体设计:本设计方案将开关电源分为输入电源模块、控制模块和输出电源模块。

输入电源模块主要是对输入电压进行滤波和稳压,以保证输入电源的稳定性;控制模块主要是使用单片机进行控制,接收反馈电路的反馈信号,根据设定值进行比较,并控制开关电源的开关管进行开关操作;输出电源模块主要是将开关电源的输出电压经过滤波和稳压处理,以保证输出电压的稳定性和精度。

2.输入电源模块设计:输入电源模块主要是对输入电压进行滤波和稳压处理,保证输入电源的稳定性和安全性。

常用的电源滤波电路有LC滤波电路、RC滤波电路等。

同时,可以使用稳压芯片来实现输入电压的稳压。

3.控制模块设计:控制模块使用单片机进行控制,主要是通过反馈电路将输出电压反馈给单片机,并经过AD转换后与设定值进行比较。

根据比较结果,单片机控制开关电源的开关管进行开关操作,调整输出电压的稳定性。

在控制过程中,可以设置合适的控制算法,如PID控制算法,以提高控制的精度和稳定性。

4.输出电源模块设计:输出电源模块主要是对开关电源的输出电压进行滤波和稳压处理,以保证输出电压的稳定性和精度。

常用的电源滤波电路有LC滤波电路、RC滤波电路等。

可以使用稳压芯片或者反馈调节电路来实现输出电压的稳压。

5.电源保护设计:为了保护电源和设备的安全性,可以设计过压保护、欠压保护、过流保护、短路保护等保护电路。

过压保护可以使用过压保护芯片,欠压保护可以使用欠压保护芯片,过流保护可以通过电流传感器实现,短路保护可以通过保险丝或者短路保护芯片实现。

三、设计方案的优势和应用1.优势:本设计方案采用闭环控制的方式,通过反馈电路将输出电压反馈给单片机,使得输出电压的稳定性和精度得到保证。

毕业设计(论文)-基于单片机的数控稳压电源设计

毕业设计(论文)-基于单片机的数控稳压电源设计

哈尔滨学院本科毕业论文(设计)题目:基于单片机的数控电源设计院(系):理工学院专业:电子信息工程年级:2006级姓名:学号:指导教师:职称:2010年6月19 日目录摘要 (1)Abstract (2)前言 (3)第一章系统要求与方案选择 (4)1.1概述 (4)1.2系统要求 (5)1.3方案选择 (5)1.2.1开关稳压电源 (5)1.2.2线性稳压电源 (6)1.4最终方案 (6)第二章系统的硬件设计 (7)2.1系统的总体框图与基本原理 (7)2.1.1系统的主要性能指标 (7)2.1.2原理框图 (7)2.1.3系统整体设计 (7)2.1.4系统工作原理 (8)2.2供电电路 (8)2.2.1供电电路供电原理 (8)2.2.2供电电路图 (10)2.3人机界面电路设计 (11)2.3.1 AT89S51简介 (11)2.4.1 D/A转换器的选择 (15)2.4.2 D/A转换电路原理与应用 (15)2.5A/D转换电路及其与单片机接口 (16)2.5.1 A/D转换器的选择 (16)2.5.2 A/D转换电路应用 (17)2.5.3 A/D转换电路及其与单片机接口电路图 (17)2.6反馈稳压及保护电路 (17)2.6.1串联反馈式稳压电路工作原理 (18)2.6.2保护电路工作原理 (18)2.6.3串联反馈式稳压电路及保护电路 (18)第三章系统的软件设计 (20)3.1系统软件流程 (20)3.1.1系统流程图 (20)3.2软件设计 (21)3.2.1键盘的软件设计 (21)3.2.2显示的软件设计 (22)3.2.3 D/A的软件设计 (22)3.2.4 A/D的软件设计 (23)第四章系统测试 (24)4.1系统测试 (24)4.2设计总结 (24)参考文献 (25)附录 (26)后记 (27)摘要现实的生活和实验中,常常要用到各种各样的电源,电压要求亦多样化。

如何设计一个电压稳定,输出电压精度高,并且调节范围大的电压源,成了电子技术应用的热点。

基于单片机的PWM型开关稳压电源设计

基于单片机的PWM型开关稳压电源设计
单 片机技术 ・ S C M T e c h n o l o ห้องสมุดไป่ตู้ y
基于单片机 的 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 )。

基于单片机的直流稳压电源毕业设计

基于单片机的直流稳压电源毕业设计

基于单片机的直流稳压电源毕业设计基于单片机的直流稳压电源是一种能够提供稳定的直流电压输出的装置。

它广泛应用于各种电子设备和电子系统中,并且对电子设备的正常工作起到至关重要的作用。

本文将介绍这样一个基于单片机的直流稳压电源的毕业设计,并详细讨论其设计原理、电路图和功能。

首先,我们来介绍这个直流稳压电源的设计原理。

该电源的设计采用了单片机作为控制核心,通过精确的反馈控制来保持稳定的输出电压。

具体来说,单片机通过测量输出电压并与设定的目标值进行比较,然后相应地调整控制电路的工作状态,以实现电压的稳定输出。

单片机还可以监测电源的工作状态,并在出现异常情况时采取相应的保护措施,以防止电源和连接的设备受到损坏。

其次,我们来看看这个直流稳压电源的电路图。

电路图中包括了电源输入部分、控制部分和输出部分。

电源输入部分主要包括输入电源接口、输入滤波电路和过压保护电路。

控制部分由单片机和与之连接的外围电路组成,用于控制电源的工作状态和输出电压。

输出部分由电压稳压电路和输出滤波电路组成,用于提供稳定的输出电压。

此外,电路图还包括了保护电路,用于保护电源和负载设备免受过电流、过压和过热等异常情况的影响。

最后,我们来讨论一下这个直流稳压电源的功能。

该电源具有以下几个主要功能:1.稳定输出电压:通过单片机的精确控制,电源可以提供稳定的输出电压,以满足负载设备的要求。

2.输入保护:通过过压保护电路,电源可以在输入电源过压时及时切断电源输入,以保护电源和负载设备。

3.负载保护:通过输出过电流保护电路,电源可以在输出电流超出额定值时及时切断电源输出,以保护电源和负载设备。

4.温度保护:通过温度传感器和过热保护电路,电源可以在工作温度超出安全范围时及时切断电源输出,以确保电源的安全运行。

总结起来,这个基于单片机的直流稳压电源是一种功能强大的装置,能够提供稳定的输出电压,并具有输入和负载保护功能。

它的设计原理、电路图和功能使得其能够广泛应用于各种电子设备和电子系统中。

基于单片机的数控直流稳压电源设计

基于单片机的数控直流稳压电源设计

基于单片机的数控直流稳压电源设计一、概述随着科技的飞速发展,电子设备在我们的日常生活和工业生产中扮演着越来越重要的角色。

这些设备的稳定运行离不开一个关键的组件——电源。

在各种电源类型中,直流稳压电源因其输出电压稳定、负载调整率好、效率高等优点,被广泛应用于各种电子设备和精密仪器中。

传统的直流稳压电源通常采用模拟电路设计,但这种方法存在着电路复杂、稳定性差、调整困难等问题。

为了解决这些问题,本文提出了一种基于单片机的数控直流稳压电源设计方案。

本设计采用单片机作为控制核心,通过编程实现对电源输出电压的精确控制和调整。

相比于传统的模拟电路设计,基于单片机的数控直流稳压电源具有以下优点:单片机具有强大的计算和处理能力,能够实现复杂的控制算法,从而提高电源的稳定性和精度单片机可以通过软件编程实现各种功能,具有很强的灵活性和可扩展性单片机的使用可以大大简化电路设计,降低成本,提高系统的可靠性。

本文将详细介绍基于单片机的数控直流稳压电源的设计原理、硬件电路和软件程序。

我们将介绍电源的设计原理和基本组成,包括单片机控制模块、电源模块、显示模块等我们将详细介绍硬件电路的设计和实现,包括电源电路、单片机接口电路、显示电路等我们将介绍软件程序的设计和实现,包括主程序、控制算法、显示程序等。

1. 数控直流稳压电源的应用背景与意义随着科技的快速发展,电力电子技术广泛应用于各个行业和领域,直流稳压电源作为其中的关键组成部分,其性能的稳定性和可靠性直接影响着整个系统的运行效果。

传统的直流稳压电源多采用模拟电路实现,其调节精度、稳定性以及智能化程度相对较低,难以满足现代电子设备对电源的高性能要求。

开发一种高性能、智能化的数控直流稳压电源具有重要意义。

数控直流稳压电源通过引入单片机控制技术,实现了对电源输出电压和电流的精确控制。

它可以根据实际需求,通过编程灵活调整输出电压和电流的大小,提高了电源的适应性和灵活性。

同时,数控直流稳压电源还具备过流、过压、过热等多重保护功能,有效提高了电源的安全性和可靠性。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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;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(); //初始化AT24C04while(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;ATCLK=1;ATCLK=0;SDA=a6;ATCLK=1;ATCLK=0;SDA=a5;ATCLK=1;ATCLK=0;SDA=a4;ATCLK=1;ATCLK=0;SDA=a3;ATCLK=1;ATCLK=0;SDA=a2;ATCLK=1;ATCLK=0;SDA=a1;ATCLK=1;ATCLK=0;SDA=a0;ATCLK=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(注:可编辑下载,若有不当之处,请指正,谢谢!)。

相关文档
最新文档