C题-信号波形合成实验电路
信号波形合成实验电路设计(C 题)
摘 要:本设计包含方波振荡电路,分频电路,滤波电路,移相电路,加法电路,测量显示电路。题目要求对点频率的各参数处理,制作一个由移相器和加法器构成的电路,将产生的10KHz 和30KHz 正弦信号作为基波和三次谐波,合成一个波形幅度为5V 、近似于方波的波形。振荡电路采用晶振自振荡并与74LS 04结合,产生6MHz 的方波源。分频电路采用74LS 390与CD 4566分频出固定频率的方波,作为波形合成的基础。滤波采用TI 公司的运放LC 081,分别设置各波形的滤波电路。移相电路主要处理在滤波过程中相位的偏差,避免对波形的合成结果造成影响。测量显示电路基于ARM 单片LM 3S811,并显示测量值。经测试,整机功能齐全,输出波形比较稳定,无明显失真。 关键词:方波振荡电路 分频与滤波 移相电路 加法器
Experimental waveform synthesis circuit
Abstract :The design consists of a square wave oscillator circuit, divider circuit, filter circuit, phase shift circuits, addition circuits, measurement display circuit. Subject of the request of the point frequency of the various parameters of processing, production of a phase shifter circuit consisting of adders, will have the 10KHz and 30KHz sinusoidal signal as the fundamental and third harmonic, synthesis of a wave amplitude 5V, similar to square wave waveform. Since the oscillating crystal oscillation circuit combined with the 74LS04 to produce a square wave source 6MHz. Frequency circuit 74LS390 and the CD4566 divider out of a fixed frequency square wave, as a basis for waveform synthesis. Filtering using TI's op LC081, respectively, set the waveform of the filter circuit. Phase-shifting circuit in the main processing phase in the filtering process deviations, to avoid prejudicing the outcome of the waveform synthesis. Measurements show that the circuit chip based on ARM LM3S811, and display the measured values. The test machine featured, stable output waveform without significant distortion.
Keywords :Square-wave oscillator circuit Frequency and filter Phase-shifting circu
目录
1、系统设计 . ................................................................................................................. 2
1.1、设计任务 . ......................................................................................................................... 2
1.2、基本要求 . ......................................................................................................................... 2 1.3、发挥部分 . ......................................................................................................................... 3 1.4、说明部分 . ......................................................................................................................... 3
2. 方案论证 . .................................................................................................................. 3
2.1 信号发生器电路 . ............................................................................................................... 3 2.2 分频电路 . ........................................................................................................................... 5 2.3 滤波电路 . ........................................................................................................................... 6 2.4 移相电路 . ........................................................................................................................... 7 2.5 放大电路 . ........................................................................................................................... 8 2.6 加法电路 . ........................................................................................................................... 9 2.7 反相器电路 . ..................................................................................................................... 10 2.8 显示电路 . ......................................................................................................................... 11
3. 整体设计 . ............................................................................................................. 13 4. 软件设计 . ................................................................................................................ 14
4.1开发软件及编程语言简介 . ............................................................................................. 14 4.2、软件实现方法 . ............................................................................................................... 14 4.3、软件流程图 . ................................................................................................................... 15 4.4、程序清单 . ....................................................................................................................... 17
5. 系统测试结果 . ........................................................................................................ 17
5.1、 测试仪器与设备 . ........................................................................................................ 17 5.2、 系统试验结果 . ............................................................................................................. 18
参考文献 . ..................................................................................................................... 21 附录【1】 . ................................................................................................................... 22 实物图片 . ..................................................................................................................... 29
1、系统设计
1.1、设计任务
设计制作一个电路,能够产生多个不同频率的正弦信号,并将这些信号再合成为近似方波和其他信号。电路示意图如图1所示:
图1 电路示意图 1.2、基本要求
(1)方波振荡器的信号经分频与滤波处理,同时产生频率为10kHz 和30kHz
的正弦波信号,这两种信号应具有确定的相位关系; (2)产生的信号波形无明显失真,幅度峰峰值分别为6V 和2V ;
(3)制作一个由移相器和加法器构成的信号合成电路,将产生的10kHz 和
30kHz 正弦波信号,作为基波和3次谐波,合成一个近似方波,波形幅度为5V ,合成波形的形状如图2所示。
图2 利用基波和3次谐波合成的近似方波
1.3、发挥部分
(1)再产生50kHz 的正弦信号作为5次谐波,参与信号合成,使合成的波形更接近于方波;
(2)根据三角波谐波的组成关系,设计一个新的信号合成电路,将产生的10kHz 、30kHz 等各个正弦信号,合成一个近似的三角波形;
(3)设计制作一个能对各个正弦信号的幅度进行测量和数字显示的电路,测量误差不大于 5%;
(4)其他。
1.4、说明部分
本题中用于合成方波和三角波的正弦波信号其产生及移相不得采用“DDS ”或“处理器加DAC ”等方式
2. 方案论证
2.1 信号发生器电路
方案一:数控振荡器(NCO )产生时间离散和幅度离散的正弦信号和余弦信号, 在模拟调制中,利用NCO 可以直接产生调频信号(FM ),虽然结合FPGA 可以完成调频信号的输出,但是数控振荡器(NCO )的平台搭建需要时间。
方案二:采用二级非门与晶振组合成形成正反馈电路产生正反振荡,其中采用的6MHZ 的晶振是起滤波作用。只有6MHZ 频率的脉冲信号容易通过该正反馈电路,其它频率的信号被抑制。故电路表现为只有6MHZ 的方波信号。该电路输出稳定,容易搭建。
图3 6MHZ 的晶振二级非门方波发生器
电路中的C2的作用为隔直耦合,C2的选择应使C 与频率fs 时的容抗忽略不计。C1的作用是抑制高次谐波,以保证稳定的频率。C1的选择应使2nRC*2fs=1。R 的用
是使反相器工作在线性放大区,R 的阻值对于TTL 门通常在0.7k~3k之间,对于CMOS 门通常在10k~100M之间。为此,通常应用下式确定C1,R1和R2(设R1=R2=R)
即 :
6. 8⨯R (k Ω) ⨯C 1(pF ) ⨯f (kHz ) ⨯10︒=1 R 选2.7K Ω,C2选0.01uF ,C1选10PF ,J 选6MHZ 。
方案三:信号发生器采用晶振SG-8003DB 及振荡电路直接产生1MHz 的方波信号。
+5V
D1
SG-8002DB
1MHz
图4 晶振SG-8003DB 方波脉冲发生器电路
综上所述:采用晶振SG-8003DB 方波脉冲发生器电路。
2.2 分频电路
方案一:
采用单片机与FPGA 结合,省去许多分立的逻辑集成电路,使电路的集成性和可靠性大大提高。另编程简单容易实现,且容易实现并可以产生固定频率的波形,并省去分频电路,是电路简化。但是FPGA 平台的搭建占用时间太长,不利于实现。
方案二:
分频电路采用逻辑元件74LS390、CD4566、CD4066搭建而成。电路如图
5所示:振荡电路所产生的频率为1MHz 的方波送到74HC390(D2A )构成10分频电路,输出频率为100KHz 的方波。
频率为100KHz 的方波再经74HC390(D2B )构成10分频,由13脚输出频率为10KHz 、占空比50%的方波。和频率为100KHz 的方波再经74HC390(D3A )二分频,得到频率为50KHz 、占空比50%的方波。
同时74HC390输出频率为10KHz 的方波送入到CD4566和CD4046组成的6倍频得到60KHz 的方波,再经74HC390(D3B )二分频得到30 KHz的信号分频电路如图5所示。
D2A
D2B
D3B
图5 分频电路
综上所述:采用方案二分频电路。
2.3 滤波电路
方案一:采用LC 或RC 无源滤波,电路图如图6所示,电路简单,参数
易于计算。但滤波效果差,而本题目只要给指定频率的波形滤波,并且达不到题设要求。可以根据中心频率公式:
f =
来匹配R 、C 的参数。
12πRC
图6 无源RC 低通滤波器 图7 一阶低通有源滤波器 方案二:采用TI 公司提供的TLC 085运算放大器,搭建一个低通有源滤波器电路图如图7所示,计算出相应的电容电阻值,虽然电路相对复杂,但是滤波效果好,且能够在电路中运用TI 公司的一种元件,以达到题目基本的要求。
TLC085具有高带宽、高输出驱动、高压摆率、超低功耗关断模式、低输入噪声电压、输入失调电压等特点,是一个高性能的运算放大器。 根据谐振频率计算公式:
f (Hz ) =
1
2πR 4(Ω) R 5(Ω) C 9(F ) C 10(F )
可得出频率为30K 、50K 的滤波电路参数。
图8 四阶低通有源滤波器
2.4 移相电路
方案一:有源移相原理图如图9所示。通过调整电路的电阻、电容等参数,电路可以实现对特定频率信号的移相,但在被移相信号的频率发生变化时,模拟移相电路的相应参数势必要随之调整。对于题目要求给出的10Hz 、30KHz 、50KHz 的三个频率,可以用FPGA 通过四选一模拟开关CD4052来选择对应的三路模拟移相电路,可以满足题目中的基本要求。但要在各个频率范围内实现高精度的移相,硬件电路将会很复杂。
图9 ±45°有源移相电路
方案二:直接对模拟信号进行移相,如阻容移相,变压器移相等。由RC 电路的原理可知,阻容移相网络在不同频率的正弦波电压通过RC 电路时,输出端的电压幅度和相位与输入不同。两种简单的移相电路如图10所示。
(a )相位超前的相移网络 (b )相位滞后的相移网络
图10 阻容移相网络
在图1.0 中,图(a )的模和相角分别为:
F =
ωRC
+(ωRC ) 1ωRC
(2.4.1)
ϕ=arctg
图(b)的模和相角分别为:
F =
1+(ωRC )
2
(2.4.2)
ϕ=-arctg ωRC
显然,两种相移网络都是随着频率的改变,单节RC 电路中所产生的相移在0 o~90 o之间变化。为满足基本部分连续相移范围:-45o ~+45o 的要求,需采用一个相位超前的相移网络和一个相位滞后的相移网络。
综上所述:为简化电路,且晶振产生的电路本身移向很小,,所以采用方案二。
2.5 放大电路
信号经滤波后得到完整的正弦波。放大电路采用运放组成的反相输入比例放大器. 电路如下图11所示。比例放大器的主要作用是调节基波、3次波和5次波的峰峰值。
图11 反相输入比例放大器 放大电路的放大倍数: U 0=-
R F
Ui R 1
图中RF 对应RP3,R1对应R11,相关环节电路原理相同。
2.6 加法电路
为了产生包含10kHz 为基波、30kHz 为3次波和50kHz 为 5次波合成一个近似方波,采
用运放组成的信号叠加电路。波形幅度为5V ,加法电路如图12所示。
U 0=-(
R F R R
ui 1+F ui 2+F ui 3) R 1R 2R 3
当R 1=R 2=R 3=R F 时,就是三个信号的叠加。
对与合成方波,加法起的运算为
U ∏=-
8h
π2
11
(sinωt +sin 3ωt +sin 5ωt ...)
35
611
=-(sinωt +sin 3ωt +sin 5ωt ...)(V )
235
11
=-3(sinωt +sin 3ωt +sin 5ωt ...)(V )
35
对与合成三角波,加法起的运算为
U ∆=-
8h
π2
(sinωt -
11sin 3ωt +sin 5ωt ...) 3252
611
=-(sinωt -2sin 3ωt +2sin 5ωt ...)(V )
235
11
=-3(sinωt -2sin 3ωt +2sin 5ωt ...)(V )
35
图12 加法电路
2.7 反相器电路
为了得到三角波,需要把30kHz 的3次波和50kHz 的 5次波进行反相。
反相器用运放组成的反相端输入的1:1比例放大器来实现。电路如下图13所示。图中取R31和R32相等,运放U4C 的作用为反相器。
图13 运放组成的反相端输入的1:1比例放大器
2.8 显示电路
方案一:本题要求制作一个能对各个信号实现幅度测量和数字显示的电路,显示电路原理采用M3内核的LM3S811 内部AD 转换,将外部电压取近后转成数字量,然后驱动数码管显示。但是数码管显示有限制,显示各种数字、字符不方便。
方案二:测量依然采用M3内核的LM3S811 内部AD 转换,将外部电压
取近后转成数字量,然后驱动液晶显示。不仅显示方便,且一块1602就可以同时显示几路的测量值。 综上所述:采用方案二。
2.9 电源电路
系统需要多个电源,LM3S811使用5V 稳压电源,其余各部分需要15V 电源。
方案一:电路中需要5V 和15V 供电,因此采用三端稳压集成7805和TPS61087组成的升压至+15V供电电源。图14为系统电源设计电路。
V21N4001
+5V
L1
V3
图14 三端稳压集成电路7805和TPS61087组成的升压至+15V供电电源 方案二:
用三端稳压集成电路7815和三端稳压集成7805产生+15V 和+5V 直流电,既满足整个电路需求,又结构间单。设计采用三端稳压LM7815输出15V 电压,电路如图15所示,为分频电路、移相电路、放大电路、叠加电路提供电压。另将输出送入到LM7805,电路如图15所示,为单片机、和分频电路提供电压。
D
图15 +15V和+5V稳压电路
综上所述:采用方案一用7805三端集成稳压器输出5V 和7815三端集成稳压器输出15V 可以满足电路供电需求。
3. 整体设计
经过方案比较与论证,最终确定的系统组成框图如图16所示。其中利用晶振、74LS04产生振荡方波,74LS390和CD4566进行分频,获得题目中所要求的各频率信号。滤波器电路分别对10K 、30K 、50K 设计相应的参数电路,利用TL085搭建4阶有源滤波器。
图16 整 机框图
4. 软件设计
4.1开发软件及编程语言简介
系统采用C 语言按模块化方式进行设计,并将各模块程序通过Keil —MDK4.01软件开发平台和J-link 驱动仿真工具,对设计程序完成逻辑编译、下载。完成MCU 对AD 的转换及对1602液晶的驱动。
C 语法比较灵活,允许编程的自由化。结构式语言的显著特点是代码及数据的分隔化,即程序的各个部分除了必要的信息交流外彼此独立。这种结构化方式可使程序层次清晰,便于使用、维护以及调试。C 语言以函数的形式提供给用户,这些函数可方便的调用,并具有多种循环、条件语句控制程序流向,从而使程序完全结构化。
C 开发语言、Keil 4 编译软件及型号为LM3S811的ARM 开发板的结合,满足本系统测量及显示的功能。 4.2、软件实现方法
利用LM3S811内部的10位AD 转换,对外部电压进行数字化转换,并驱动液晶显示测量的值。
为了能够使用数字系统(如 MCU )处理模拟信号,必须把模拟信号转换成相应的数字信号。能够实现这种转换的电路称为ADC (Analog-to-Digital Converter, 模-数转换器)。ADC 能够将连续变化的模拟电压转换成离散的数字量。Stellaris 系列ARM 集成有一个 10 位的ADC 模块,支持8个输入通道,以及一个内部温度传感器。ADC 模块含有一个可编程的序列发生器,可在无需控制器干涉的情况下对多个模拟输入源进行采样。每个采样序列均对完全可配置的输入源、触发事件、中断的产生和序列优先级提供灵活的编程。
AD 采样采用过采样方式,奈奎斯特定理表明要较好的还原一个信号,采样频率fs 不能低于被采样频率f 被的2倍,否则就会产生混叠效应,因此频率要求为:
f 过采样
4
n
f 被
过采样程序实现(例程):
unsigned long adcSample(void) // ADC 采样 {
unsigned long ulData_Ave,ulData_Sum; ulData_Ave = 0x00; for (i = 0; i
ulData_Sum = 0x00; for (j = 0; j
while((HWREG(ADC_BASE+ADC_O_SSFSTAT0)&ADC_SSFSTAT_FULL) == 0x00000000) LED_disp(); /* 等待FIFO 0为满 */ /* 即等待8个数据转换结束 */
for (k = 0; k
ulData_Sum+=*ulADC_10;/* 进行累加 */ } }
ulData_Sum >>= 2; /* 右移n 位得到过采样值,n 为增加位数*/ ulData_Ave += ulData_Sum; }
ulData_Ave = ulData_Ave / 20; return(ulData_Ave); }
4.3、软件流程图
AD 转换程序流程图如图17所示:首先初始化AD 模块,然后启动
AD 模块,采用过采样的方式将外部模拟量取进,进行模拟量数字量的转换,最后送到液晶显示。
图17 AD 转换程序流程图
数据显示流程图如图18所示:将AD 转换后的数字量取出,分别取出千位、百位、十位、个位后送往液晶显示。
图18 数值显示流程图
4.4、程序清单 见附录1
5. 系统测试结果
5.1、 测试仪器与设备
测试用仪器与设备如表4.1.1所示:
表4.1.1 测试用仪器与设备
5.2、 系统试验结果
5.2.2基波10KHz 、测量峰峰值6±0.01V 实测波形
图19 基波10KHz 、测量峰峰值6±0.01V 实测波形
5.2.3 三次波30KHz 、测量峰峰值2±0.01V 实测波形如图20
图20 三次波30KHz 、测量峰峰值2±0.01V 实测波形
5.2.4 五次波50KHz 、测量峰峰值1.2±0.03V 实测波形如图21
图21 五次波50KHz 、测量峰峰值1.2±0.03V 实测波形
加后实测波形如图22
图22 基波10KHz 、测量峰峰值6V 与三次波30KHz 、测量峰峰值2V
叠加后实测波形
5.2.5 基波10KHz 、测量峰峰值6V 与三次波30KHz 、测量峰峰值2V 及
五次波50KHz 、测量峰峰值1.2V 叠加后实测波形
图23 基波10KHz 、测量峰峰值6V 与三次波30KHz 、测量峰峰值2V 及五
次波50KHz 、测量峰峰值1.2V 叠加后实测波形
相减及五次波50KHz 、测量峰峰值0.24V 叠加后实测波形。
图24 基波10KHz 、测量峰峰值6V 与三次波30KHz 、测量峰峰值0.667V
相减及五次波50KHz 、测量峰峰值0.24V 叠加后实测波形。
参考文献:
1. 及力,张涛,王永成. Protel99SE 原理图与PCB 设计教程 .电子工业出版
社. 修订版
2. 华永平 模拟电路设计与制作. 北京:电子工业出版社,2007.7
3. 田淑清 全国计算机等级考试二级教程-C 语言程序设计(2008年版). 高等
教育出版社
4. 高吉祥,黄智伟,丁文霞. 数字电子技术[M]. 北京:电子工业出版社,2003
年,第1版
5. 邹其洪 黄智伟 高嵩. 电工电子实验与计算机仿真[M].北京:电子工业出版
社,2003年,第1版
附录【1】 测量显示程序
#include "hw_ints.h"
#include "hw_memmap.h"
#include "hw_types.h"
#include "gpio.h"
#include "sysctl.h"
#include "cpu.h"
#include "hw_adc.h"
#include "interrupt.h"
#include "systemInit.h"
#include
#include
#include "hw_gpio.h"
#define uint unsigned int
#define uchar unsigned char
#define ADCSequEnable ADCSequenceEnable
#define ADCSequDisable ADCSequenceDisable
#define ADCSequConfig ADCSequenceConfigure
#define ADCSequStepConfig ADCSequenceStepConfigure
#define ADCSequDataGet ADCSequenceDataGet
#define YJ_PERIPH SYSCTL_PERIPH_GPIOD |SYSCTL_PERIPH_GPIOB
#define YJ_RS_BASE GPIO_PORTB_BASE #define YJ_RS_PIN GPIO_PIN_0
#define YJ_RW_BASE GPIO_PORTB_BASE #define YJ_RW_PIN GPIO_PIN_1
#define YJ_EN_BASE GPIO_PORTB_BASE #define YJ_EN_PIN GPIO_PIN_2
#define DATA_PORT_BASE GPIO_PORTD_BASE // DA TA[7:0] - PD[7:0]
#define DATA_PORT_PIN 0xFF
#define YJ_RS_BASE_PIN YJ_RS_BASE,YJ_RS_PIN
#define YJ_RW_BASE_PIN YJ_RW_BASE,YJ_RW_PIN
#define YJ_EN_BASE_PIN YJ_EN_BASE,YJ_EN_PIN
#define DATA_PORT_BASE_PIN DA TA_PORT_BASE,DATA_PORT_PIN
#define YJ_RS HWREG(YJ_RS_BASE + (GPIO_O_DATA +
(YJ_RS_PIN
#define YJ_RW HWREG(YJ_RW_BASE + (GPIO_O_DATA +
(YJ_RW_PIN
#define YJ_EN HWREG(YJ_EN_BASE + (GPIO_O_DATA +
(YJ_EN_PIN
#define DATA_PORT HWREG(DATA_PORT_BASE + (GPIO_O_DATA +
(DATA_PORT_PIN
#define DATA_PROT_OUTPUT_SET() HWREG(DATA_PORT_BASE + GPIO_O_DIR) =
0xFF //设置数据口为输出方向
#define RS_L GPIOPinWrite(YJ_RS_BASE,YJ_RS_PIN ,0x00); //ser管脚为低
#define RW_L GPIOPinWrite(YJ_RW_BASE,YJ_RW_PIN ,0x00); //SRCLK1管脚为低
#define EN_L GPIOPinWrite(YJ_EN_BASE,YJ_EN_PIN ,0x00); //SRCLK1管脚为低
#define RS_H GPIOPinWrite(YJ_RS_BASE,YJ_RS_PIN ,0xff); //ser管脚为高
#define RW_H GPIOPinWrite(YJ_RW_BASE,YJ_RW_PIN ,0xff); //SRCLK1管脚为高
#define EN_H GPIOPinWrite(YJ_EN_BASE,YJ_EN_PIN ,0xff); //SRCLK1管脚为高
uchar LED[ ]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xfe,0xbf,0xff}; //共
阳极段码表说明
uint i,j,k,n=0; //
说明整数变量
uchar aa,ee[]={0,0,0,0,12,12,12,12},cc=0xc0,dd; //
8个数码管显示的数数组
unsigned char bb[]={0x30,0x30,':',0x30,0x30,':',0x30,0x30,':',0x30,0x30,':',0x30,0x30,':',0x30};
unsigned long ulADC_10[];
unsigned char LCDDISPLAY_ROW1[]={" "};
unsigned char LCDDISPLAY_ROW2[]={"shangyuan dianzi"};
unsigned long TheSysClock = 6000000UL; // 定义全局的系统时钟
变量
tBoolean ADC_EndFlag = false; // 定义ADC 转换结束的
标志
void delay (int a) //延时
{
for (; a > 0; a--);
void Delay(unsigned int t)
{
while(t)t--;
}
void lcd_delay(unsigned int delaytime)
{
while(delaytime)delaytime--;
}
void write_lcd_command(unsigned char write_command)
{
lcd_delay(40);
RS_L;
RW_L;
DATA_PORT=write_command;
EN_H;
EN_L;
}
void write_lcd_data(unsigned char write_data)
{
lcd_delay(40);
RS_H;
RW_L;
DATA_PORT=write_data;
EN_H;
EN_L;
}
void initize_lcd(void)
{
uchar i;
EN_L;
for(i=200;i>0;i--)lcd_delay(248);
write_lcd_command(0x3f);
for(i=4;i>0;i--)lcd_delay(248);
write_lcd_command(0x3f);
write_lcd_command(0x0f);
write_lcd_command(0x01);
for(i=4;i>0;i--)lcd_delay(248);
write_lcd_command(0x06);
//液晶写 //液晶初始化
void lcd_displaystr(unsigned char x,unsigned char y,const unsigned char *str)
{
switch(x)
{
case 0:
write_lcd_command(0x80+y);
break;
case 1:
write_lcd_command(0xc0+y);
break;
}
while(*str)
{
write_lcd_data(*str);
str++;
}
}
void clrpin()
{
write_lcd_command(0x80);
for(i=0;i
}
void adcInit(void) // ADC 初始化
{
SysCtlPeriEnable(SYSCTL_PERIPH_ADC); // 使能ADC 模块
SysCtlADCSpeedSet(SYSCTL_ADCSPEED_125KSPS); // 设置ADC 采样率
ADCSequDisable(ADC_BASE, 0); // 配置前先禁止采样序列
ADCSequConfig(ADC_BASE, 0, ADC_TRIGGER_ALWAYS, 0);// 采样序列配置:ADC
基址,采样序列编号,触发事件,采样优先级
ADCSequStepConfig(ADC_BASE, 0,7, ADC_CTL_CH0 | // ADC 采样序列步进
配置:ADC 基址,采样序列0,步值,采样通道
ADC_CTL_END );
ADCSequEnable(ADC_BASE, 0); // 使能采样序列
}
unsigned long adcSample(void) // ADC 采样
{
unsigned long ulData_Ave,ulData_Sum;
ulData_Ave = 0x00;
for (i = 0; i
ulData_Sum = 0x00; for (j = 0; j
0x00000000) delay(1);
// 等待FIFO 0为满, // 即等待8个数据转换结束 for (k = 0; k
*ulADC_10 = HWREG (ADC_BASE + ADC_O_SSFIFO0) & 0x000003ff; // 读取FIFO ulData_Sum += *ulADC_10; // 进行累加 }
}
ulData_Sum >>= 2; // 右移n 位得到过采样值,n 为
增加位数
ulData_Ave += ulData_Sum;
}
ulData_Ave = ulData_Ave / 40;
return(ulData_Ave);
}
int main(void)
{
unsigned long ulVal,temp;
adcInit();
SysCtlClockSet(SYSCTL_USE_OSC | // 系统时钟设置
SYSCTL_OSC_MAIN | // 采用主振荡器
SYSCTL_XTAL_6MHZ | // 外接6MHz 晶
振
SYSCTL_SYSDIV_1); // 不分频
SysCtlPeripheralEnable(YJ_PERIPH);
GPIOPinTypeGPIOOutput(YJ_RS_BASE_PIN);
//GPIO输出型的 (GPIO输出引脚:GPIO_PIN_0)
GPIOPinTypeGPIOOutput(YJ_RW_BASE_PIN);
//GPIO输出型的 (GPIO输出引脚:GPIO_PIN_1)
GPIOPinTypeGPIOOutput(YJ_EN_BASE_PIN);
//GPIO输出型的 (GPIO输出引脚:GPIO_PIN_2)
GPIOPinTypeGPIOOutput(DATA_PORT_BASE_PIN);
// 设置相应的数据管脚为输出
GPIOPadConfigSet(DATA_PORT_BASE, YJ_RS_PIN |
YJ_RW_PIN | YJ_EN_PIN |DATA_PORT_PIN ,
GPIO_STRENGTH_8MA_SC,GPIO_PIN_TYPE_STD_WPU);
// 配置数据端口为8mA ,若上拉输出
DA TA_PORT=0xFF;
initize_lcd();
TheSysClock = SysCtlClockGet();
clrpin();
for(;;) //死循环 {
adcInit();
ulVal = adcSample();
bb[0]=0x80;
bb[1]=0x80;
bb[2]=0x80;
bb[3]=0x41;
bb[4]=0x75;
bb[5]=0x3a;
bb[6]=(int)ulVal*10/3/1023+0x30;
temp = (ulVal*10/3)%1023;
temp = temp*10;
bb[7]=0x2e;
bb[8]= temp/1023+0x30;
temp = temp%1023;
temp = temp*10;
bb[9]= temp/1023+0x30;
bb[10]=0x28;
bb[11]=0x56;
bb[12]=0x29;
write_lcd_command(0x80);
for(i=0;i
{
write_lcd_data(bb[i]);
Delay(60000);
Delay(60000);
}
write_lcd_command(0xc0);
for(i=0;i
{
write_lcd_data(bb[i]);
Delay(60000);
Delay(60000);
lcd_displaystr(1,0,LCDDISPLAY_ROW2);
}
}
}
void ADC_Sequence_0_ISR(void)
// ADC 采样序列0的中断
{
unsigned long ulStatus;
ulStatus = ADCIntStatus(ADC_BASE, 0, true); // 读取中断状态 if (ulStatus != 0) // 如果中断状态有效 {
ADC_EndFlag = true; // 置位ADC 采样结束标志 }
ADCIntClear(ADC_BASE, 0); // 清除中断状态,重要
实物图片
30