根据MSP430F6638的信号采集与分析系统实验

合集下载

南理工王宏波MSP430F6638单片机实验报告

南理工王宏波MSP430F6638单片机实验报告

MSP430单片机应用技术实验报告学号:XXXXXXXX姓名:XXX分组:第X组同组同学1姓名:XXX同组同学2姓名:XXX南京理工大学2016年12月08日实验1一、实验题目:UCS实验二、实验目的设置DCO FLL reference =ACLK=LFXT1 = 32768Hz, MCLK = SMCLK = 8MHz,输出ACLK、SMCLK,用示波器观察并拍照。

UCS初始状态:XT1关闭,默认为LFXT1,ACLK选择XT1源(时钟错误时自动切换至),MCLK、SMCLK选择DCOCLKDIV源。

FLL参考时钟源为XT1CLK,DCOCLK/DCOCLKDIV =2,N=32。

因此程序需要进行的操作有,启动LFXT1,待XT1稳定工作后,设置锁频环将XT1分频为8MHz的DCOCLKDIV作为MCLK和SMCLK的时钟源,并分别通过P1.0和P3.4输出。

三、实验仪器和设备计算机、开发板、示波器、信号源、电源、Code Comeposer Studio v5四、实验步骤1、用电缆连接开发板USB2口和电脑USB口,打开电源开关SW1,电源指示灯D5点亮;2、运行CCSV5;3、新建工作空间workspace;4、新建工程project与源文件main.c;5、编写程序;6、编译、调试、下载程序到单片机;7、观察、分析、保存运行结果。

五、实验程序六、实验结果一、实验题目:FLL+应用实验二、实验目的检测P1.4 输入,遇上升沿进端口中断,在中断服务程序内翻转P4.1 状态。

三、实验仪器和设备计算机、开发板、示波器、信号源、电源、Code Comeposer Studio v5四、实验步骤1、用电缆连接开发板USB2口和电脑USB口,打开电源开关SW1,电源指示灯D5点亮;2、运行CCSV5;3、新建工作空间workspace;4、新建工程project与源文件main.C;5、编写程序;6、编译、调试、下载程序到单片机;7、观察、分析、保存运行结果。

msp430实验报告

msp430实验报告

msp430实验报告msp430实验报告引言:msp430是一种低功耗、高性能的微控制器,被广泛应用于嵌入式系统和物联网设备中。

本实验报告将介绍我对msp430微控制器进行的一系列实验,包括实验目的、实验过程、实验结果以及对实验的总结和展望。

实验目的:本次实验的主要目的是熟悉msp430微控制器的基本功能和使用方法,以及学习如何进行简单的控制程序设计。

通过实验,我希望能够掌握msp430的基本操作和编程技巧,并且能够运用所学知识解决实际问题。

实验过程:在实验开始之前,我首先对msp430微控制器进行了一些基本的了解。

我了解到,msp430具有低功耗、高性能和丰富的外设接口等特点,可以满足各种嵌入式系统的需求。

接着,我根据实验指导书的要求,准备好实验所需的硬件设备和软件工具。

第一部分实验是关于GPIO口的实验。

我按照实验指导书上的步骤,将msp430与LED灯连接起来,并编写了一个简单的程序,实现了对LED灯的控制。

通过这个实验,我学会了如何配置GPIO口和编写简单的控制程序。

第二部分实验是关于定时器的实验。

我学习了如何配置msp430的定时器,并编写了一个简单的程序,实现了定时闪烁LED灯的功能。

通过这个实验,我深入了解了定时器的工作原理和编程方法。

第三部分实验是关于ADC的实验。

我学习了如何配置msp430的ADC模块,并编写了一个简单的程序,实现了对外部模拟信号的采样和转换。

通过这个实验,我了解了ADC的基本原理和使用方法。

实验结果:通过一系列实验,我成功地掌握了msp430微控制器的基本功能和使用方法。

我能够独立完成GPIO口的配置和控制、定时器的配置和编程、ADC的配置和采样等任务。

实验结果表明,msp430具有强大的功能和灵活的编程能力,可以满足各种嵌入式系统的需求。

总结和展望:通过本次实验,我对msp430微控制器有了更深入的了解,并且掌握了一些基本的操作和编程技巧。

然而,由于实验时间和条件的限制,我还没有完全发挥出msp430的潜力。

第六章 MSP430F6638开发实验系统

第六章 MSP430F6638开发实验系统

1、MSP430介绍
MSP430架构
1、MSP430介绍
特点总结
● 集成度: 可以在一个单芯片上可以实现一整套设计; ● 成本: 通常是低成本设备
● 时钟频率: 和其他设备(如微处理器和DSP)比起来,微控制 器(MCUs)采用更低的时钟频率:MCUs通常可以跑到100 MHz/100 MIPS (每秒百万条指令数)
● 功耗:低功耗 (电池供电); ● 位数:4位(老设备)到32位设备; ● 内存: 有限的可用内存,通常小于1M字节; ● 输入/输出(I/O):8到150个输出引脚
1、MSP430介绍
特点总结
●低功耗; ●低操作电压(从1.8V到3.6V);
● < 1 s的时钟启动时间;
● < 50 nA的端口漏电流; ●零功耗的掉电复位(BOR);
MSP430F6638平台硬件设计
版本管理
修改记录
版本号. V01 V02
作者
描述
修改日期 2012-11-4 2013-2-18
审核记录
版本号.
职务
签名
修改日期
轮廓
MSP430介绍 MSP430F6638介绍 FFTB全功能板卡硬件设计

1、MSP430介绍

什么是MSP430?
3、硬件设计
串行异步通讯设计(232&485&IrDA)
3、硬件设计
串行外设接口设计(LCD&SD&无线模块)
3、硬件设计
通讯串行IIC设计(数字温度传感器)
3、硬件设计

BP模块示例-步进电机与直流电机
3、硬件设计

BP模块示例-温湿度测量
3、硬件设计

msp430ADDA实验

msp430ADDA实验
caltmp = number; caltmp = (caltmp << 5) + number; //caltmp = Hex_Val * 33 // caltmp = (caltmp << 3) + (caltmp << 1); //caltmp = caltmp * 10 caltmp = (caltmp << 6) + (caltmp << 5) + (caltmp << 1); //caltmp = caltmp * 100 Curr_Volt = caltmp >> 12; //Curr_Volt = caltmp / 2^n=4096
P7SEL (BIT2+BIT3)
// LCD segment definitions. #define d 0x01 #define c 0x20 #define b 0x40 #define a 0x80 #define dp 0x10 #define g 0x04 #define f 0x08 #define e 0x02 uint8_t con[10] , trans_v[10]; const char char_gen[] = {
const char char_gen_dp[] = { board
a+b+c+d+e+f+dp, b+c+dp, a+b+d+e+g+dp, a+b+c+d+g+dp, b+c+f+g+dp, a+c+d+f+g+dp, a+c+d+e+f+g+dp, a+b+c+dp, a+b+c+d+e+f+g+dp, a+b+c+d+f+g+dp, a+b+c+e+f+g, c+d+e+f+g, a+d+e+f, b+c+d+e+g, a+d+e+f+g, a+e+f+g, a+b+c+d+f+g, c+e+f+g, b+c, b+c+d, b+c+e+f+g, d+e+f, a+b+c+e+f,

基于MSP430F6638的无线智能组网的传感器采集系统的硬件研究

基于MSP430F6638的无线智能组网的传感器采集系统的硬件研究
关键词 :MSP430F6638单 片机 ;传 感器 lzigbee;智能组 网 中图分类号 :TP311.1 文献标识码 :B 文章编号 :l003—7241(2016)03—0088—04
MSP430F6638.Based l ntelligent W ireless Sensor
Networking Acquisition System
3IANG Hai-be,GUO Jian-qiang,CAO Ji-cheng,M o Jing-jie,W U Rui,LIU Yan
(College of Physical Science and Technology,Southwest Jiaotong University,Chengdu 6 1 1 756 China)
·基金 项 目 :2014年 国家大学生创新时监 测 、感 知和 采集各种环 境或 监测对象 的信 息 , 这 些信息通 过无线方 式被发送 ,并以 自组多跳 的 网络方 式传送到用 户终端 ,从 而实现物理 世界 、计算 世界 以及 人类 社会三元世界的连通 。
Key words:M SP430F6638 M CU ;random passw ord keyboar d;electronic lock;lock netw orking
1 引言
无线传感 网络 (WSN,wireless sensor networks)是 当前在 国际上备受 关注 的、涉及 多学科高度 交叉 、知 识 高度集成 的前沿 热点研 究领域 。它综合 了传感器 技术、 嵌入 式计算 技术 、现 代网络及无 线通信 技术、分布 式信 息处理 技术等 ,能够通 过各类集 成化的微 型传感器协 作
自动化技术与应用》 2016年第35卷第3期

基于MSP430F6638的直流调速系统设计

基于MSP430F6638的直流调速系统设计

南 京 理 工 大 学毕业设计说明书(论文)作 者:姜泽飞 学 号: 1010190425 学院(系):自 动 化 学 院 专 业:电气工程及其自动化 题 目:基于MSP430F6638的直流调速系统设计指导者:评阅者:2014年5月徐志良 教授 讲师 朱建良毕业设计说明书(论文)中文摘要毕业设计说明书(论文)外文摘要本科毕业设计说明书(论文)第Ⅰ页共Ⅰ页目次1 绪论 (1)1.1 引言 (1)1.2 MSP430F6638直流调速系统的应用及意义 (1)1.3 课题目的 (2)1.4 MSP430F6638直流调速系统的国内外研究现状和发展趋势 (2)1.5 课题要求 (3)2 MSP430F6638直流调速系统的设计 (4)2.1 段式液晶显示器 (6)2.2 拨盘电位器 (9)2.3 直流电机 (11)2.4 光耦测速模块 (13)3 系统软件设计 (14)3.1 段式液晶显示器关键程序设计与实现 (15)3.2 直流电机关键程序设计与实现 (15)3.3 ADC12与电位器关键程序设计与实现 (16)3.4 直流电机调速主程序设计与实现 (17)4 系统调试 (19)总结和展望 (22)致谢 (24)参考文献 (25)附录 (26)1 绪论1.1 引言当今社会[1],随着科技的创新与进步,以及人们对电的更多依赖,电机控制系统人们的日常生活与工作起着举足轻重的作用,上至航空航天,下至工业农业,无处不见电机控制系统。

因此,就目前看来,人们对电机控制系统的不断完善和开发,有着十分重要的作用。

自从19世纪以来,直流电动机调速系统就已经被广泛的应用到各个角落,而且在电机调速领域中占据着半壁江山,它不仅方便可靠,而且在磁场恒定不变的情况下,转速和电压成正比,相对而言更容易控制转矩;他的启动性能相比较而言非常好,可以更平缓和经济的调整转速。

因此,在大多数情况下,我们如果想得到更好的动态特性的话,就可以用直流电机调速。

msp430f6638单片机实验程序

msp430f6638单片机实验程序
while(1)
{if((P4IN&BIT0)==0)
{__delay_cycles(160000);
if((P4IN&BIT0)==0)
{P1OUT |=BIT0;
P1OUT |=BIT6;
P1OUT &=~BIT7;
}
}
if((P4IN&BIT4)==0)
{__delay_cycles(160000);
while (SFRIFG1 & OFIFG) //等待XT1、XT2与DCO稳定
{
UCSCTL7 &= ~(DCOFFG+XT1LFOFFG+XT2OFFG);
SFRIFG1 &= ~OFIFG;
}
UCSCTL5 = DIVA__1 + DIVS__1 + DIVM__1; //设定几个CLK的分频
P4REN |=BIT0+BIT1+BIT2+BIT3+BIT4; //上下拉电阻使能
P4OUT |=BIT0+BIT1+BIT2+BIT3+BIT4; //设置为上拉电阻
P4DIR |=BIT5+BIT6+BIT7; //LED管脚设置
P5DIR |=BIT7;
P8DIR |=BIT0;
P1DIR |= BIT0+BIT6+BIT7;
while (SFRIFG1 & OFIFG) //等待XT1、XT2与DCO稳定
{
UCSCTL7 &= ~(DCOFFG+XT1LFOFFG+XT2OFFG);
SFRIFG1 &= ~OFIFG;

实验二 AD转换实验

实验二 AD转换实验

实验二 AD转换实验实验预习要求1、学习 MSP430F6638 单片机中ADC12的配置方法。

2、了解ADC转换原理。

一、实验目的1、了解AD转换原理及LED灯的控制方法。

2、掌握MSP430F6638 中ADC12的配置使用方法。

3、结合电位器与ADC12模块实现对LED灯的控制。

二、实验器材PC 机,MSP430F6638 EVM,USB数据线,万用表,信号发生器。

三、实验内容1、验证性实验:利用MSP430F6638开发板上的拨盘电位器,控制改变AD转换的输入电压值,转换后的数字量显示在段式液晶上面。

使用万用表测得当前输入电压,通过计算得到转换后的理想的数字量与液晶显示的数字量进行比较。

2、设计性实验:AD转换结束会产生中断,编写AD中断服务程序。

利用信号发生器输出信号(例如正弦波、三角波信号)作为AD转换的输入,根据输入电压的大小控制LED灯的亮灭(例如随着输入电压值的增大,LED1到LED5按顺序点亮;随着输入电压值减小,LED灯按顺序熄灭),LED和单片机IO口连接如下图所示。

图2.1 LED灯电路原理图四、实验原理模数转换器(ADC)是指将连续的模拟信号转换为离散的数字信号的器件。

真实世界 的模拟信号,例如温度、压力、声音或者图像等,需要转换成更容易储存、处理和发射的数 字形式。

在A/D 转换中,因为输入的模拟信号在时间上是连续的,而输出的数字信号是离 散量,所以进行转换时只能按一定的时间间隔对输入的模拟信号进行采样,然后再把采样值 转换为输出的数字量。

通常A/D 转换需要经过采样、保持量化、编码几个步骤。

ADC12 电 路如下图所示。

图2.2 ADC12 模块结构框图ADC12 模块中由以下部分组成:输入的16 路模拟开关,ADC 内部电压参考源,ADC12 内核,ADC 时钟源部分,采集与保持/触发源部分,ADC 数据输出部分,ADC 控制寄存器等组成。

ADC12 的模块内核是共用的,通过前端的模拟开关来分别完成采集输入。

msp430 实验报告

msp430 实验报告

msp430 实验报告MSP430 实验报告引言:MSP430是一款低功耗、高性能的微控制器,广泛应用于嵌入式系统开发领域。

本实验报告将介绍我对MSP430进行的一系列实验,包括基本的GPIO控制、定时器应用、模拟信号采集和通信接口应用等。

实验一:GPIO控制在本实验中,我使用MSP430的GPIO引脚控制LED灯的亮灭。

通过配置引脚的输入/输出模式以及设置引脚电平,我成功地实现了对LED灯的控制。

这为后续实验奠定了基础,也让我更加熟悉了MSP430的寄存器配置。

实验二:定时器应用在本实验中,我探索了MSP430的定时器功能。

通过配置定时器的时钟源和计数模式,我实现了定时器中断功能,并利用定时器中断实现了LED灯的闪烁。

这个实验让我更加深入地了解了MSP430的定时器模块,并学会了如何利用定时器进行时间控制。

实验三:模拟信号采集在本实验中,我使用MSP430的模拟信号输入引脚和模数转换模块,成功地将外部的模拟信号转换为数字信号。

通过配置ADC模块的采样速率和精度,我实现了对模拟信号的准确采集,并将采集到的数据通过串口输出。

这个实验让我对MSP430的模拟信号处理有了更深入的了解。

实验四:通信接口应用在本实验中,我使用MSP430的串口通信模块,实现了与外部设备的数据传输。

通过配置串口的波特率和数据格式,我成功地实现了与计算机的串口通信,并通过串口发送和接收数据。

这个实验让我掌握了MSP430与外部设备进行数据交互的方法。

结论:通过一系列的实验,我对MSP430的基本功能和应用有了更深入的了解。

MSP430作为一款低功耗、高性能的微控制器,具备丰富的外设和强大的处理能力,适用于各种嵌入式系统的开发。

通过学习和实践,我掌握了MSP430的GPIO控制、定时器应用、模拟信号采集和通信接口应用等基本技能,为以后的嵌入式系统开发打下了坚实的基础。

未来展望:MSP430作为一款成熟的微控制器,具备广阔的应用前景。

MSP430F6638_FFTB一体化功能演示_说明书

MSP430F6638_FFTB一体化功能演示_说明书
03.LCD_TFT
04.Matrix Key 05.Touch Pads 06.INA21x--Current 07.TMP006 08.Volt Meter--ADC 09.DC--Motor 10.Step--Motor 11.NTC and HR202 12.IrDA - UART 13.RS232 - UART 14.RS485 - UART 1101 - 433MHz
2、“具体按键”使用说明-----------------------------------------------------------------2 2.1 “复位键”------------------------------------------------------------------------ 2 2.2 “菜单选择键”------------------------------------------------------------------ 2 2.3 “测试键”(矩阵键)------------------------------------------------------------- 2
电容触摸 按键
2、“具体按键”使用说明 (如图 2-1-1 所示) 2.1 “复位键” ( 普通 IO 按键):用于“系统复位重启”。 2.2 “菜单选择键”( 普通 IO 按键): 用于选择要测试的“模块测试菜单”。 2.3 “测试键”(矩阵键):用于选择模块的“具体测试操作”。
菜单键 2 菜单键 1 复位键
第 - 1 - 页,共 15 页
2013-09-29 V3.1
彩屏 LCD
MSP430F6638_FFTB 一体化功能演示 说明书
段式 LCD
红、绿、黄 3 个 LED 灯

东南大学MCU第七次实验

东南大学MCU第七次实验

东南大学自动化学院实验报告课程名称: MCU技术及课程设计第四次实验实验七:DAC 数模转换院(系):自动化专业:自动化姓名:学号:实验室:实验组别:同组人员:实验时间:2015年5月21日评定成绩:审阅教师:实验七DAC 数模转换一.实验目的和要求1. 实验目的(1) 了解D/A 转换的基本原理。

(2) 学习D/A 转换的编程方法。

2. 实验要求通过实验板主控芯片MSP430F6638 的DAC12 模数输出正弦波、锯齿波和三角波。

程序默认输出正弦波,当按下KEY1 时输出锯齿波,当继续按下KEY1时输出三角波,然后按下KEY1 显示正弦波,如此循环下去。

二.实验原理(1)DA转换即把数字信号转换为模拟信号输出。

简单的说,就是把数字信号按照一定的参考电压转换成电压值输出。

例如,12位分辨率时,数据0XFFF值对应满程参考电压,那么0x7FF就会输出半程参考电压。

(2)MSP430F6638的DAC12_A模块是12位分辨率的电压输出DAC,包含DAC12_0和DAC12_1两个DAC转换通道,它们在操作上完全相同,DAC12_A的操作由软件进行设置。

(3)参考电压控制位DAC12SREFx有{0,1,2,3}四种模式用于选择DAC12_A模块的参考电压,分别对应2.5V、2.0V或1.5V的内部参考电压、AVcc电压和外部参考电压。

(4)数字数据存储在DAC12_0DAT中,DAC12LSELx用于锁存数据,控制更新电压的更新输出。

DAC12RES控制选择输出数据8位和12位的分辨率,DAC12IR和DAC12OG控制输出电压的倍率。

(5)DAC12_A支持二进制数或2的补码的数据格式。

在12位分辨率时,采用二进制数时,输出数据范围是0000h--0FFFh(8位分辨率的是000h--0FFh),满程电压输出为0FFFh。

采用2的补码时,输出数据范围是0800h--07FFh(8位分辨率的080h--7FFh)。

MSP430F6638开发实验系统

MSP430F6638开发实验系统

MSP430F6638平台框图说明●MSP430F663x 是微控制器系列产品,配置有一个高性能12位模数(A/D )转换器,比较器,2个通用串行通信接口(USCI),USB 2.0,硬件乘法器,DMA,4个16位计时器,具有报警功能的实时时钟模块,LCD驱动器和多达74 I/O引脚。

●这款设备的典型应用包括模拟和数字传感器系统,数字电机控制,遥控,恒温器,数字时钟,手持仪表等特性●低电源电压范围: 1.8 V 至3.6 V●超低功耗–激活模式(AM):所有系统时钟处于激活状态:270 µA/MHz ,在8 MHz, 3.0 V, 闪存程序执行(典型值)–待机模式(LPM3):采用晶体的安全装置, 和电源监控器操作, 完全RAM保持, 快速唤醒:1.8 µA 在2.2 V, 2.1 µA 在3.0 V (典型值)–关机RTC 模式(LPM3.5):关机模式, 含晶体的运行实时时钟:1.1 µA 在3.0 V (典型值)–关机模式(LPM4.5):0.3 µA 在3.0 V (典型值)特性●在3 µs (典型值) 内从待机模式唤醒●16 位RISC 架构, 扩展内存,高达20-MHz 系统时钟●灵活电源管理系统–含有可编程管理核心电源电压的完全集成LDO –电源电压管理、监控和暂时限电●单一时钟系统–FLL 控制环路用于频率稳定–低功耗/低频内部时钟源(VLO)–低频修整内部参照源(REFO)–32-kHz 晶体(XT1)–高达32 MHz (XT2)的高频晶体●四个具有3,5,或者7个捕捉/ 比较寄存器的16位定时器特性●2个通用串行通信接口–USCI_A0 和USCI_A1 各支持–增强型UART 支持自动波特率检测–IrDA 编码器和解码器–同步SPI–USCI_B0 和USCI_B1各支持–I IC–同步SPI●全速通用串行总线(USB)–集成USB-PHY–集成3.3-V/1.8-V USB 电源系统–集成USB-PLL–8 个输入,8 个输出端点特性●具有内部共享基准、采样与保持以及自动扫描特性的12位模数(A/D)转换器●具有同步功能的双通道12 位数模(D/A) 转换器●电压比较器●具有对多达160图块进行对比度控制的集成LCD驱●硬件乘法器支持32 位运算●串行板上编程,无需从外部进行电压编程●6 通道内部DMA●具有电源电压备份开关的实时时钟模块功能列表电源模拟开关模拟开关LED用户独立按键8位数码管与矩阵键盘段式LCDTFT LCD电容式触摸ADDA示例-电位器麦克风喇叭设计串行异步通讯设计(232&485&IrDA)串行外设接口设计(LCD&SD&无线模块)通讯串行IIC设计(数字温度传感器)BP模块示例-步进电机与直流电机BP模块示例-温湿度测量调试仿真接口及USB接口。

基于MSP430F6638的信号采集与分析系统实验

基于MSP430F6638的信号采集与分析系统实验

信号采集与分析系统实验一、实验目的本实验目的是利用实验箱构建一个信号采集和分析系统。

二、实验内容三、实验步骤1、键盘及LED的设计与制作–编写单片机程序,控制按键,控制灯的亮灭,测试所有能控制的按键和LED2、液晶屏显示的设计与制作–测试在液晶屏上显示波形和数据3、以信号发生器输入单频正弦波,以16个指示灯代表16个单频点,频点在200Hz ~ 10kHz任选,信号发生器每次产生一种频点正弦波,AD采集,对应频点的指示灯会亮;4、把指示灯显示频点改成用液晶显示5、液晶屏同时显示频谱和时域波形四、实验原理1、AD采样模块在这个模块中,每过一段时间,AD采样器采集一个数据存入数组中,并将存储的二进制数转换成对应的电压值,通过代码:collect0[t].real= ADC12MEM0*3.0 / 0x03ff;实现。

采集满N个值之后,令标志变量flag=1,表示一组数据采集完毕,进入下一模块,即FFT变换。

我们将信号发生器输出的模拟电压范围设定为0V~2V ,这是因为:若电压值太大,会导致结果波形失真;若出现负电压,则因为AD模块不支持负电压的采集,结果可能会出现错误。

2、FFT处理模块该模块将采集进来的数据进行FFT变换,变换后的实部即为频谱,用于LCD 的频谱绘制。

绘制时,以各频点的幅频值与最大幅频值的相对大小进行绘制;变换后模值最大的频点对应的频率即为待测频率,用fre表示,便于屏幕及LED频率显示;根据求得的fre,可求得若干函数值,用于LCD的时域波形绘制。

3、LCD液晶屏显示模块该模块用于显示时域波形、频谱、学号、所测频率等内容。

关键语句:清屏:etft_AreaSet(0,0,239,319,0);//清屏显示:sprintf(buffer, "Frequency: %5d Hz",fre);etft_DisplayString(buffer, 0, 32, 0xFFFF, 0x0000);//显示频率同时,在模块中加入了延时语句,使得波形可以保持一定的时间。

一款基于MSP430F6638的时钟及温度检测数据显示电路

一款基于MSP430F6638的时钟及温度检测数据显示电路

一款基于MSP430F6638的时钟及温度检测数据显示电路作者:谢海武严桂林魏学刚马俊来源:《物联网技术》2019年第01期摘要:环境质量监测的重点是实现对空气质量的温湿度检测。

目前,温湿度检测有许多专用设备,其侧重点是实现检测过程,文中基于MSP430F6638微控制器通过段式液晶实现对检测温度的实时显示,并辅以高精度的时钟显示。

温度采集通过远程温度传感器实现,段式液晶的数据显示通过微控制器的外围设备和液晶驱动模块完成。

仿真与测试结果表明,与传统的显示电路相比,该显示电路的时钟精度高,误差小,能够实现对检测数据和时钟的实时显示。

关键词:环境质量;MSP430F6638;温度检测;显示电路;高精度;低功耗中图分类号:TP368.1 文献标识码:A 文章编号:2095-1302(2019)01-00-020 引言工业的快速发展带来了经济的高速增长,与此同时,环境问题日益突出。

如今,许多工业生产现场需要空气质量的实时检测,这些检测通常使用各类传感器完成,譬如温度传感器、湿度传感器、有害气体检测传感器等。

由传感器输出结果,而结果的显示是此类检测中必须考虑的一个重要技术问题。

本文利用微控制器设计了一款时钟及温度检测数据的实时显示电路,该电路的设计基于TI公司设计生产的MSP430系列芯片[1-3],实现可靠的结果显示,并保证数据的高速处理和电路的低功耗。

1 MSP430微控制器时钟及温度检测数据显示电路1.1 温度检测电路通过TMP421远程温度传感器实现温度信息的采集,采集的信息与微控制器通过I2C总线进行数据交换。

TMP421是TI公司设计的一款内置本地温度传感器的远程控制器芯片,与I2C 总线模式兼容。

实际使用中,该芯片的DXP,DXN与一个二极管或者与连接成二极管形式的三极管及两个电阻和一个电容组成远程温度传感单元,二极管连接形式的三极管可以选用NPN管或PNP 管,它们往往集成在微控制器中。

TMP421误差为±1 ℃,本地温度传感器误差为±1.5 ℃。

东南大学MSP430LCD+ADC实验报告

东南大学MSP430LCD+ADC实验报告
#define delay_ms(x) __delay_cycles((long)(CPU_F*(double)x/1000.0))
// LCD segment definitions.
#define d 0x01
#define c 0x20
#define b 0x40
#define a 0x80
#define dp 0x10
#define f 0x08
#define e 0x02
int sin_table[100];
int *sin_data_pr;
uint fre_term_pr;
int j;
double i=0;
#define CPU_F ((double)1000000)
#define delay_us(x) __delay_cycles((long)(CPU_F*(double)x/1000000.0))
#define uint unsigned int
#define uchar unsigned char
#define PI 3.1416
#define d 0x01
#define c 0x20
#define b 0x40
#define a 0x80
#define dp 0x10
#define g 0x04
// changed is n x 32 x 32 x f_MCLK / f_FLL_reference. See UCS chapter in 5xx UG for
// optimization , 32 x 32 x 8 MHz / 32,768 Hz = 250000 = MCLK cycles for DCO to settle

msp430f6638单片机实验程序

msp430f6638单片机实验程序

msp430f6638单片机实验程序实验一验证性试验#includeint flag;void DCmotor(int p){ switch(p){case 0: {P1OUT &=~ BIT0; //停转P1OUT &=~ BIT6;P1OUT &=~ BIT7;break;}case 1: {P1OUT |= BIT0; //正转P1OUT |= BIT6;P1OUT &=~ BIT7;break; }case 2: { P1OUT |= BIT0;P1OUT &=~ BIT6;P1OUT |= BIT7;break;}}}int main(void) {WDTCTL = WDTPW | WDTHOLD; // Stop watchdog timerP4REN |=BIT0+BIT1+BIT2+BIT3+BIT4; // 上下拉电阻使能P4OUT |=BIT0+BIT1+BIT2+BIT3+BIT4; //设置为上拉电阻P4DIR|=BIT5+BIT6+BIT7; //LED管脚设置P5DIR |=BIT7;P8DIR |=BIT0;P1DIR |= BIT0+BIT6+BIT7;while(1){if((P4IN&BIT0)==0){ //按键S7__delay_cycles(160000);if((P4IN&BIT0)==0) {flag=2;}}if((P4IN&BIT4)==0){ //按键S3__delay_cycles(160000);i f((P4IN&BIT4)==0) {flag=1;}}DCmotor(flag);}}设计性试验#includeint main(void){ WDTCTL = WDTPW +WDTHOLD;P4REN |=BIT0+BIT2+BIT4;P4OUT |=BIT0+BIT2+BIT4;P1DIR |=BIT0+BIT6+BIT7;while(1){ if((P4IN&BIT0)==0){ __delay_cycles(160000);if((P4IN&BIT0)==0){ P1OUT |=BIT0;P1OUT |=BIT6;P1OUT &=~BIT7;}}if((P4IN&BIT4)==0){ __delay_cycles(160000);if((P4IN&BIT4)==0){ P1OUT |=BIT0;P1OUT &=~BIT6;P1OUT |=BIT7;}}if((P4IN&BIT2)==0){ __delay_cycles(160000);if((P4IN&BIT2)==0){ P1OUT &=~BIT0;}}}}1、验证性实验:利用MSP430F6638 开发板上的拨盘电位器,控制改变AD 转换的输入电压值,转换后的数字量显示在段式液晶上面。

南理工王宏波MSP430F6638单片机实验报告

南理工王宏波MSP430F6638单片机实验报告

MSP430 单片机应用技术实验报告学号: XXXXXXXX姓名: XXX分组:第X 组同组同学 1 姓名: XXX同组同学 2 姓名: XXX南京理工大学2016年 12月 08日实验 1一、实验题目: UCS实验二、实验目的设置 DCO FLL reference =ACLK=LFXT1 = 32768Hz, MCLK = SMCLK = 8MHz,输出 ACLK、SMCLK,用示波器观察并拍照。

UCS初始状态: XT1关闭,默认为 LFXT1,ACLK选择 XT1源(时钟错误时自动切换至), MCLK、SMCLK选择 DCOCLKDIV源。

FLL 参考时钟源为XT1CLK,DCOCLK/DCOCLKDIV,=2N=32。

因此程序需要进行的操作有,启动LFXT1,待 XT1稳定工作后,设置锁频环将XT1分频为 8MHz的 DCOCLKDIV作为 MCLK和 SMCLK的时钟源,并分别通过 P1.0和P3.4 输出。

三、实验仪器和设备计算机、开发板、示波器、信号源、电源、Code Comeposer Studio v5四、实验步骤1 、用电缆连接开发板 USB2口和电脑 USB口,打开电源开关 SW1,电源指示灯 D5 点亮;2、运行CCSV5;3、新建工作空间workspace;4、新建工程project与源文件main.c;5、编写程序;6、编译、调试、下载程序到单片机;7、观察、分析、保存运行结果。

五、实验程序六、实验结果一、实验题目:FLL+应用实验二、实验目的检测P1.4输入,遇上升沿进端口中断,在中断服务程序内翻转P4.1状态。

三、实验仪器和设备计算机、开发板、示波器、信号源、电源、Code Comeposer Studio v5四、实验步骤1、用电缆连接开发板 USB2口和电脑 USB口,打开电源开关 SW1,电源指示灯 D5 点亮;2、运行CCSV5;3、新建工作空间workspace;4、新建工程project与源文件main.C;5、编写程序;6、编译、调试、下载程序到单片机;7、观察、分析、保存运行结果。

基于MSP430单片机的多路数据采集系统的设计

基于MSP430单片机的多路数据采集系统的设计

2、软件设计
(1)ADC中断服务程序:在MSP430单片机中,我们利用ADC中断服务程序来实 现对多路模拟量的实时采集。在每次ADC转换完成时,中断服务程序会被触发, 同时读取ADC寄存器中的转换结果。
(2)串口通信程序:我们使用MSP430单片机的UART模块实现与上位机的串口 通信。通过编写串口通信程序,设置通信速率、数据位、停止位和校验位等参 数,实现对采集数据的传输。
3、丰富的外设:MSP430单片机 具有丰富的外设接口
1、数据采集:通过传感器模块采集气象数据,包括温度、湿度、气压、风速、 风向等。
2、数据处理:对采集到的数据进行处理和分析,例如数据滤波、标度变换等。
3、数据存储:将处理后的数据存储到数据存储模块中。 4、数据传输:通过通信模块将气象数据传输到主控计算机或远程服务器。
2、硬件设计:硬件部分主要包括传感器电路、电源电路、时钟电路和通信接 口电路等。传感器电路应选择与所需采集信号相匹配的传感器,并考虑信号调 理电路以适应微控制器的输入要求。电源电路应提供稳定的电压以保证微控制 器的正常运行。
时钟电路为系统提供时钟信号以进行时间同步。通信接口电路应根据需要选择 UART、SPI或I2C等通信方式。
三、结论
基于MSP430的数据采集系统具有高效、稳定和低功耗等特点,适用于各种需 要长时间待机和电池供电的应用场景。通过合理的设计和测试,可以满足各种 数据采集的需求,为各种嵌入式系统的发展提供了有力的支持。
谢谢观看
பைடு நூலகம்
参考内容
引言
随着科技的发展,单片机技术已经广泛应用于各种领域,包括气象数据采集。 MSP430单片机作为一种低功耗、高性能的微控制器,特别适合用于设计高效、 低功耗的气象数据采集系统。本次演示将介绍一种基于MSP430单片机的气象 数据采集系统。

东南大学_单片机_第十讲温度采集

东南大学_单片机_第十讲温度采集

第十讲 MSP430单片机片的模数转换器(ADC)实验04011003 杨阳一、实验目标:(1) 掌握ADC 的工作原理;(2) 熟练应用MSP430F6638 的ADC12 模块及其4 种工作模式。

(3) 掌握控制MSP430F6638 的定时器捕获方法。

二、实验内容:课堂验收实验:实验内容:采集温度信号,将实测温度值以摄氏度数值显示在段码LCD上。

实验原理:实验板主控芯片MSP430F6638 的ADC12 模数转换模块支持12 位精度模数转换,主要由具有采样与保持功能的12 位转换器内核、采样选择控制、参考电压发生器以及16 个字转换控制缓冲区组成。

ADC12 模块的主要特性:12 位转换精度,1 位非线形误差,1 位非线形积分误差;多种时钟源给ADC12 模块,切本身自带时钟发生器;内置温度传感器;8 路外部通道和4 路内部通道;TimerA/TimerB 硬件触发器;内置参考电压源和6 种参考电压组合;4 种模式的模数转换;16bit 的转换缓存;ADC12 关闭支持超低功耗;采用速度快,最高200Kbps;自动扫描;DMA 使能。

ADC12 提供4 种转换模式,分别是单通道单次转换、序列通道多次转换、单通道多次转换、序列通道多次转换。

这4 种方式可以根据需求灵活应用。

ADC12_A 结构原理图NTC 热敏电阻温度采集原理:当热敏电阻所处的环境温度变化时,它的阻值也会发生相应变化,导致如下图中的P7.4 分压也会发生相应变化,从而P7.4 / ADC 采集到的数据也会变化,从而测温。

P2.5 为高电平,3.3V。

低功耗设计的时候,P2.5 输出为低电平。

实验现象:分析:实际摄氏温度值与我们的采集的数据值呈线性关系关键原理公式为temperatureDegC = (float)(((long)temp - CALADC12_15V_30C) * (85 - 30)) / (CALADC12_15V_85C - CALADC12_15V_30C) + 30;上式可看做是一次线性函数,已知两组函数值,求出斜率后将横坐标代入,求纵坐标的值。

基于MSP430F6638的信号采集与分析系统试验

基于MSP430F6638的信号采集与分析系统试验

信号采集与分析系统实验一、实验目的本实验目的是利用实验箱构建一个信号采集和分析系统。

二、实验内容放大模块(备选扩展)信号发生器(器产生单频模DD号,测试根据按键,生不同单频采集模A寸液晶3.单片机核心(也可用单片显示频FPG核心代替内A显示按键LE显块,不LE代表输入为不频点正弦信三、实验步骤–编写单片机程序,控制按键,控制灯的亮、键盘及LED的设计与制作1 LED 灭,测试所有能控制的按键和–测试在液晶屏上显示波形和数据2、液晶屏显示的设计与制作16个指示灯代表以16个单频点,频点3、以信号发生器输入单频正弦波,在200Hz ~ 10kHz任选,信号发生器每次产生一种频点正弦波,AD采集,对应频点的指示灯会亮;4、把指示灯显示频点改成用液晶显示5、液晶屏同时显示频谱和时域波形四、实验原理1、AD采样模块在这个模块中,每过一段时间,AD采样器采集一个数据存入数组中,并将存储的二进制数转换成对应的电压值,通过代码:collect0[t].real =实现。

采集满N个值之后,令标志变量flag=1,表示ADC12MEM0*3.0 / 0x03ff;变换。

我们将信号发生器输出的模FFT一组数据采集完毕,进入下一模块,即.,这是因为:若电压值太大,会导致结果波形失真;0V~2V 拟电压范围设定为若出现负电压,则因为AD模块不支持负电压的采集,结果可能会出现错误。

2、FFT处理模块LCD该模块将采集进来的数据进行FFT变换,变换后的实部即为频谱,用于变的频谱绘制。

绘制时,以各频点的幅频值与最大幅频值的相对大小进行绘制;频fre表示,便于屏幕及LED换后模值最大的频点对应的频率即为待测频率,用fre,可求得若干函数值,用于LCD的时域波形绘制。

率显示;根据求得的液晶屏显示模块LCD3、该模块用于显示时域波形、频谱、学号、所测频率等内容。

关键语句:清屏:清屏etft_AreaSet(0,0,239,319,0);//显示:,fre);(buffer, ?敲畱湥祣???穈sprintf etft_DisplayString(buffer, 0, 32, 0xFFFF,0x0000);//显示频率同时,在模块中加入了延时语句,使得波形可以保持一定的时间。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

信号采集与分析系统实验一、实验目的本实验目的是利用实验箱构建一个信号采集和分析系统。

二、实验内容三、实验步骤1、键盘及LED的设计与制作–编写单片机程序,控制按键,控制灯的亮灭,测试所有能控制的按键和LED2、液晶屏显示的设计与制作–测试在液晶屏上显示波形和数据3、以信号发生器输入单频正弦波,以16个指示灯代表16个单频点,频点在200Hz ~ 10kHz任选,信号发生器每次产生一种频点正弦波,AD采集,对应频点的指示灯会亮;4、把指示灯显示频点改成用液晶显示5、液晶屏同时显示频谱和时域波形四、实验原理1、AD采样模块在这个模块中,每过一段时间,AD采样器采集一个数据存入数组中,并将存储的二进制数转换成对应的电压值,通过代码:collect0[t].real= ADC12MEM0*3.0 / 0x03ff;实现。

采集满N个值之后,令标志变量flag=1,表示一组数据采集完毕,进入下一模块,即FFT变换。

我们将信号发生器输出的模拟电压范围设定为0V~2V ,这是因为:若电压值太大,会导致结果波形失真;若出现负电压,则因为AD模块不支持负电压的采集,结果可能会出现错误。

2、FFT处理模块该模块将采集进来的数据进行FFT变换,变换后的实部即为频谱,用于LCD 的频谱绘制。

绘制时,以各频点的幅频值与最大幅频值的相对大小进行绘制;变换后模值最大的频点对应的频率即为待测频率,用fre表示,便于屏幕及LED频率显示;根据求得的fre,可求得若干函数值,用于LCD的时域波形绘制。

3、LCD液晶屏显示模块该模块用于显示时域波形、频谱、学号、所测频率等内容。

关键语句:清屏:etft_AreaSet(0,0,239,319,0);//清屏显示:sprintf(buffer, "Frequency: %5d Hz",fre);etft_DisplayString(buffer, 0, 32, 0xFFFF, 0x0000);//显示频率同时,在模块中加入了延时语句,使得波形可以保持一定的时间。

时间到后,LCD会进行刷新,重新显示波形和数据。

4、LED灯显示模块LED1作为采样指示灯,ADC模块每采一次样闪烁一次,由于采样频率极高,但中断调用间隔较长,实际显示为每次进入ADC采样中断LED1闪烁一下。

使用LED2、LED3、LED4、LED5显示频率,标号分别为5.7、4.7、4.6、4.5。

受LED灯数目的限制,当用LED显示频率时(二进制表示),只能精确到1kHz。

如当1500<=fre<2500时,用2kHz表示,灯显示为0010;当5500<=fre<6500时,用6kHz表示,灯显示为0110,其余类似。

通过以上模块,可以实现以下功能:AD模块采集N个数据后,FFT模块对数据进行处理,FFT变换后,实部为频谱,用于LCD的频谱绘制;模值最大的频点为所求频率,在LED和LCD上显示;再求得一些采样点的函数值,在LCD 上绘制时域波形。

最终,频率显示在LED灯和LCD上,波形和频谱显示在LCD 上。

图像保持一段时间后,LCD会进行刷新,重新显示波形和数据。

附录:1、键盘及LED的设计与制作#include <msp430.h>#include <stdint.h>#include <stdio.h>#include "dr_i2c.h"#include "dr_tft.h"#define TEMP_ADDR 0x2A#define TEMP_LOCAL 0x00#define TEMP_REMOTE 0x01#define TEMP_CONFIG1 0x09#define TEMP_CONFIG2 0x0A#define TEMP_NCORR 0x21#define BATT_ADDR 0x55#define BATT_VOLTAGE 0x04#define BATT_CURRENT 0x10#define BATT_SOC 0x1C#define BATT_CAPA 0x0C#define BATT_FLAG 0x06int TEMP_LOCAL_INDEX;int TEMP_REMOTE_INDEX;int BATT_VOLTAGE_INDEX;int BATT_CURRENT_INDEX;int BATT_SOC_INDEX;int BATT_CAPA_INDEX;int BATT_FLAG_INDEX;typedef struct{const volatile uint8_t* PxIN;volatile uint8_t* PxOUT;volatile uint8_t* PxDIR;volatile uint8_t* PxREN;volatile uint8_t* PxSEL;} GPIO_TypeDef;const GPIO_TypeDef GPIO4 ={&P4IN, &P4OUT, &P4DIR, &P4REN, &P4SEL};const GPIO_TypeDef GPIO5 ={&P5IN, &P5OUT, &P5DIR, &P5REN, &P5SEL};const GPIO_TypeDef GPIO8 ={&P8IN, &P8OUT, &P8DIR, &P8REN, &P8SEL};const GPIO_TypeDef* LED_GPIO[5] = {&GPIO4, &GPIO4, &GPIO4, &GPIO5, &GPIO8};const uint8_t LED_PORT[5] = {BIT5, BIT6, BIT7, BIT7, BIT0};void initClock(){while(BAKCTL & LOCKIO) // Unlock XT1 pins for operationBAKCTL &= ~(LOCKIO);UCSCTL6 &= ~XT1OFF; //启动XT1P7SEL |= BIT2 + BIT3; //XT2引脚功能选择UCSCTL6 &= ~XT2OFF; //启动XT2while (SFRIFG1 & OFIFG) { //等待XT1、XT2与DCO稳定UCSCTL7 &= ~(DCOFFG+XT1LFOFFG+XT2OF FG);SFRIFG1 &= ~OFIFG;}UCSCTL4 =.\SELA__XT1CLK +SELS__XT2CLK + SELM__XT2CLK; //避免DCO调整中跑飞UCSCTL1 = DCORSEL_5; //6000kHz~23.7MHzUCSCTL2 = 20000000 / (4000000 / 16); //XT2频率较高,分频后作为基准可获得更高的精度UCSCTL3 = SELREF__XT2CLK + FLLREFDIV__16; //XT2进行16分频后作为基准while (SFRIFG1 & OFIFG) { //等待XT1、XT2与DCO稳定UCSCTL7 &= ~(DCOFFG+XT1LFOFFG+XT2OF FG);SFRIFG1 &= ~OFIFG;}UCSCTL5 = DIV A__1 + DIVS__1 + DIVM__1; //设定几个CLK的分频UCSCTL4 = SELA__XT1CLK + SELS__DCOCLK + SELM__DCOCLK; //设定几个CLK的时钟源}int main( void ){// Stop watchdog timer to prevent time out resetWDTCTL = WDTPW + WDTHOLD;initClock();initI2C();initTFT();etft_AreaSet(0,0,319,239,0);int i;for(i=0;i<5;++i)*LED_GPIO[i]->PxDIR |= LED_PORT[i]; //设置各LED灯所在端口为输出方向P4REN |= 0x1F; //使能按键端口上的上下拉电阻P4OUT |= 0x1F; //上拉状态uint8_t last_btn = 0x1F, cur_btn, temp;while(1){int temp1, temp2;char buffer[41];cur_btn = P4IN & 0x1F;temp = (cur_btn ^ last_btn) & last_btn; //找出刚向下跳变的按键last_btn = cur_btn;int i;for(i=0;i<5;++i){if(temp & (1 << i)){*LED_GPIO[i]->PxOUT ^= LED_PORT[i]; //翻转对应的LED__delay_cycles(3276); //延时大约100mstemp1=7-i;temp2=5-i;sprintf(buffer, "Switch %d LED %d", temp1, temp2);etft_DisplayString(buffer, 0, 0, 0xFFFF, 0x0000);sprintf(buffer,"temp %d", temp);etft_DisplayString(buffer, 0, 16, 0xFFFF, 0x0000);}}__delay_cycles(2000000);}}2、信号采集与显示#include <msp430f6638.h>#include <stdint.h>#include <stdio.h>#include "math.h"#include "dr_tft.h"#define N 256 //FFT点数#define PI 3.14159265327volatile long IntDegF;volatile long IntDegC;void initClock(){while(BAKCTL & LOCKIO) // Unlock XT1 pins for operationBAKCTL &= ~(LOCKIO); UCSCTL6 &= ~XT1OFF; //启动XT1P7SEL |= BIT2 + BIT3; //XT2引脚功能选择UCSCTL6 &= ~XT2OFF; //启动XT2while (SFRIFG1 & OFIFG){ //等待XT1、XT2与DCO稳定UCSCTL7 &= ~(DCOFFG+XT1LFOFFG+XT2OFFG) ;SFRIFG1 &= ~OFIFG;}UCSCTL4 = SELA__XT1CLK + SELS__XT2CLK + SELM__XT2CLK; //避免DCO调整中跑飞UCSCTL1 = DCORSEL_5; //6000kHz~23.7MHzUCSCTL2 = 20000000 / (4000000 / 16); //XT2频率较高,分频后作为基准可获得更高的精度UCSCTL3 = SELREF__XT2CLK + FLLREFDIV__16; //XT2进行16分频后作为基准while (SFRIFG1 & OFIFG){ //等待XT1、XT2与DCO稳定UCSCTL7 &= ~(DCOFFG+XT1LFOFFG+XT2OFFG) ;SFRIFG1 &= ~OFIFG;}UCSCTL5 = DIV A__1 + DIVS__1 + DIVM__1; //设定几个CLK的分频UCSCTL4 = SELA__XT1CLK + SELS__DCOCLK + SELM__DCOCLK; //设定几个CLK的时钟源}struct compx{float real,imag;};struct compx collect[N],collect0[N]; //AD采集到的值unsigned long fs = 28500; //采样频率int i,j,fre;float temp_frc,z;unsigned int t=0,k=0,flag=0,n=0,c=0;/*函数原型:struct compx EE(struct compx b1,struct compx b2)函数功能:对两个复数进行乘法运算输入参数:两个以联合体定义的复数a,b输出参数:a和b的乘积,以联合体的形式输出*/struct compx EE(struct compx a,structcompx b){struct compx c;c.real=a.real*b.real-a.imag*b.imag;c.imag=a.real*b.imag+a.imag*b.rea l;return(c);}/*函数原型:void FFT(struct compx *xin) 函数功能:对输入的复数组进行快速傅里叶变换(FFT)输入参数:*xin复数结构体组的首地址指针,struct型*/void FFT(struct compx *xin){int f,m,nv2,nm1,i,k,l,j=0;struct compx u,w,t;int le,lei,ip; //FFT运算核,使用蝶形运算完成FFT运算nv2=N/2; //变址运算,即把自然顺序变成倒位序,采用雷德算法nm1=N-1;for(i=0;i<nm1;i++){if(i<j) //如果i<j,即进行变址{t=xin[j];xin[j]=xin[i];xin[i]=t;}k=nv2; //求j的下一个倒位序while(k<=j)//如果k<=j,表示j的最高位为1{j=j-k;//把最高位变成0k=k/2; //k/2,比较次高位,依次类推,逐个比较,直到某个位为0}j=j+k; //把0改为1}f=N;for(l=1;(f=f/2)!=1;l++) //计算l的值,即计算蝶形级数;for(m=1;m<=l;m++) // 控制蝶形结级数{ //m表示第m级蝶形,l 为蝶形级总数l=log(2)Nle=2<<(m-1); //le蝶形结距离,即第m级蝶形的蝶形结相距le点lei=le/2; //同一蝶形结中参加运算的两点的距离u.real=1.0; //u为蝶形结运算系数,初始值为1u.imag=0.0;w.real=cos(PI/lei); //w为系数商,即当前系数与前一个系数的商w.imag=-sin(PI/lei);for(j=0;j<=lei-1;j++) //控制计算不同种蝶形结,即计算系数不同的蝶形结{for(i=j;i<=N-1;i=i+le) //控制同一蝶形结运算,即计算系数相同蝶形结{ip=i+lei; //i,ip 分别表示参加蝶形运算的两个节点t=EE(xin[ip],u);//蝶形运算,详见公式xin[ip].real=xin[i].real-t.real;xin[ip].imag=xin[i].imag-t.imag;xin[i].real=xin[i].real+t.real;xin[i].imag=xin[i].imag+t.imag;}u=EE(u,w); //改变系数,进行下一个蝶形运算}}}void main( void ){float y[N];// Stop watchdog timer to prevent time out resetWDTCTL = WDTPW + WDTHOLD;initClock();initTFT();REFCTL0 &= ~REFMSTR; // Reset REFMSTR to hand over control to// ADC12_A ref control registersADC12CTL0 = 0x0050 ; // Internal ref = 1.5VADC12CTL1 = ADC12SHP; // enable sample timerADC12MCTL0 = ADC12INCH_13; // ADC i/p ch A10 = temp sense i/pADC12IE = 0x001; // ADC_IFG upon conv result-ADCMEMO__delay_cycles(75);// 75us delay to allow Ref to settleADC12CTL0 |= ADC12ENC;P8DIR |= BIT0;P5DIR |= BIT7;P4DIR |= BIT5+BIT6+BIT7;char buffer[81];etft_AreaSet(0,0,239,319,0);//清屏sprintf(buffer, "Name:Zhao Zhenqi");etft_DisplayString(buffer, 0, 0, 0xFFFF, 0x0000);sprintf(buffer, "Student Number:22920132203719");etft_DisplayString(buffer, 0, 16, 0xFFFF, 0x0000);while(1){ADC12CTL0 |= ADC12SC; // Sampling and conversion start__bis_SR_register(LPM4_bits + GIE); // LPM0 with interrupts enabled__no_operation();if(flag==1){ //FFT处理模块FFT(collect);for(i=0;i<N;i++) //求变换后结果的模值,存入复数的实部部分collect[i].real=sqrt(collect[i].real*collect [i].real+collect[i].imag*collect[i].imag);temp_frc=collect[1].real; fre=1;for(i=2;i<N/2;i++){if(collect[i].real>temp_frc)//求出最大幅值对应的频点{temp_frc=collect[i].real;fre=i;}}fre=fre*fs/N;//所测频率for(i=0;i<80;i++){y[i]=sin((float)i*PI*fre/2/fs);}//LCD液晶屏显示模块etft_AreaSet(32,0,239,319,0);//清屏sprintf(buffer, "Frequency: %5d Hz",fre);etft_DisplayString(buffer, 0, 32, 0xFFFF, 0x0000);sprintf(buffer,".");for(i=0;i<80;i++){etft_DisplayString(buffer,(i)*4,(int)((y[i] +1)*10+90),0xFFFF,0x0000);//绘制波形}sprintf(buffer,"*");for(j=1;j<319;j++){i=14-(int)(collect[j].real/(temp_frc/1 0)*14);//扫频,频谱高度由该频点与中心频点的相对值决定etft_DisplayString(buffer,j,200+i,0x FFFF,0x0000);//绘制频谱}//LED灯显示模块if(fre>=500&&fre<1500){P4OUT |= BIT5;//点亮灯P4OUT &= ~BIT6;//熄灭灯P4OUT &= ~BIT7;P5OUT &= ~BIT7;}else if(fre>=1500&&fre<2500){P4OUT &= ~BIT5;P4OUT |= BIT6;P4OUT &= ~BIT7;P5OUT &= ~BIT7;}else if(fre>=2500&&fre<3500) {P4OUT |= BIT5;P4OUT |= BIT6;P4OUT &= ~BIT7;P5OUT &= ~BIT7;}else if(fre>=3500&&fre<4500) {P4OUT &= ~BIT5;P4OUT &= ~BIT6;P4OUT |= BIT7;P5OUT &= ~BIT7;}else if(fre>=4500&&fre<5500) {P4OUT |= BIT5;P4OUT &= ~BIT6;P4OUT |= BIT7;P5OUT &= ~BIT7;}else if(fre>=5500&&fre<6500) {P4OUT &= ~BIT5;P4OUT |= BIT6;P4OUT |= BIT7;P5OUT &= ~BIT7;}else if(fre>=6500&&fre<7500) {P4OUT |= BIT7;P4OUT |= BIT6;P4OUT |= BIT5;P5OUT &= ~BIT7;}else if(fre>=7500&&fre<8500) {P4OUT &= ~BIT7;P4OUT &= ~BIT6;P4OUT &= ~BIT5;P5OUT |= BIT7;}else if(fre>=8500&&fre<9500){P4OUT |= BIT7;P4OUT &= ~BIT6;P4OUT &= ~BIT5;P5OUT |= BIT7;}else if(fre>=9500&&fre<10500){P4OUT &= ~BIT7;P4OUT |= BIT6;P4OUT &= ~BIT5;P5OUT |= BIT7;}flag=0;__delay_cycles(2*MCLK_FREQ);//延时}}}//AD采样模块#pragma vector = ADC12_VECTOR__interrupt void ACD12_ISR(void){switch(__even_in_range(ADC12IV, 34)){case 0: break; //Vector 0: 无中断case 2: break; //Vector 2: ADC溢出中断case 4: break; //Vector 4: ADC转换时间溢出中断case 6:collect0[t].imag = 0;collect0[t].real = ADC12MEM0*3.0 / 0x03ff;t++;if(t==N)//采满N个值{t=0;flag=1;for(k=0;k<N;k++){collect[k]=collect0[k];}}P8OUT ^=BIT0;__bic_SR_register_on_exit(LPM0_bits); break; //退出低功耗模式0case 8: break;case 10: break;case 12: break;case 14: break;case 16: break;case 18: break;case 20: break;case 22: break;case 24: break;case 26: break;case 28: break;case 30: break;case 32: break;case 34: break;default: break;}}。

相关文档
最新文档