基于MSP430实现的简易信号发生器及源程序

基于MSP430实现的简易信号发生器及源程序
基于MSP430实现的简易信号发生器及源程序

MSP430G2系列Launchpad开发板应用实例作品

基于MSP430G2211实现的简易信号发生器

第二章作品硬件系统设计

第一节MSP430G2系列Launchpad开发板介绍

TI的MSP430G2系列Launchpad开发板是一款适用于TI 最新MSP430G2xx 系列产品的完整开发解决方案。其基于USB 的集成型仿真器可提供为全系列MSP430G2xx 器件开发应用所必需的所有软、硬件。LaunchPad 具有集成的DIP目标插座,可支持多达20 个引脚,从而使MSP430 Value Line器件能够简便地插入LaunchPad电路板中。此外,其还可提供板上Flash 仿真工具,以直接连接至PC 轻松进行编程、调试和评估。此外,它还提供了从MSP430G2xx 器件到主机PC 或相连目标板的9600 波特UART 串行连接。其实物图如图2.1所示。

图2.1 MSP430G2系列Launchpad开发板实物图

MSP430G2系列Launchpad开发板的特性:

●USB 调试与编程接口无需驱动即可安装使用,且具备高达9600 波特的UART 串

行通信速度

●支持所有采用PDIP14 或PDIP20 封装的MSP430G2xx 和MSP430F20xx 器件

●分别连接至绿光和红光LED 的两个通用数字I/O 引脚可提供视觉反馈

●两个按钮可实现用户反馈和芯片复位

●器件引脚可通过插座引出,既可以方便的用于调试,也可用来添加定制的扩展板

●高质量的20引脚DIP插座,可轻松简便地插入目标器件或将其移除

本作品中所使用的MSP430G2211单片机的资源和功能:

◆16位RISC指令集处理器

◆128字节RAM(数据)+2K字节Flash存储器(代码)

◆一个16位TA定时器

◆内置数控振荡器(DCO),最高频率可达21MHz

◆9个双向I/O口,每个I/O口都可以作为中断源

◆自带BOR检测电路,能自动避开上电瞬间的毛刺并产生可靠的复位信号

◆内置低功耗低频振荡器(VLO)

◆可通过软件配置的8通道比较器

第二节方案论证、比较与选择

方案一:

控制部分由MSP430G2211实现,波形产生采用低温漂、低失真、高线性单片压控函数发生器(如ICL8038、MAX038等)。它们可同时产生频率可控可变的三角波、正弦波、脉冲波等。用D/A转换器的输出来改变调节电压,也可以实现频率的数控调整。

优缺点:方法简单易行,采用单片专用芯片,系统体积大大减小。但由于压控的非线性,频率步进的步长控制困难。而且整个设计中MSP430G2211仅仅完成简单的控制功能,资源得不到充分的利用。

方案二:

控制部分由MSP430G2211实现,波形产生部分使用FPGA或CPLD芯片采用波形查找表结合高速的DAC产生。

优缺点:此方案自由度大,符合现在的发展趋势。但是,FPGA或CPLD芯片价格相对比较高,加上高速的DAC芯片,使设计成本大大提高。而且整个设计中MSP430G2211仅仅完成简单的控制功能,资源得不到充分的利用。

方案三:

由MSP430G2211实现对专门的DDS芯片(如AD9850、AD9833)的控制,来产生各种波形。

优缺点:利用此方案产生波形的频率稳定度高,易于程控。但是,专门的DDS芯片价格高,系统成本高。

方案四:

由MSP430G2211结合低通滤波器电路来模拟实现DDS芯片的功能,进而产生各种波形。

优缺点:利用此方案可以充分利用MSP430G2211上资源,使系统成本大大降低。但是此方案只能产生低频率的波形。

综上,方案四可以充分利用MSP430G2211的资源,外围电路简单、系统成本低,可以满足简易信号发生器的要求。所以本作品最终采用方案四。

第三节主要模块电路

(1)电源模块

本作品中总共使用了三种电源:5V、3.6V、-5V。其中3.6V的产生是在1117-3.3的参考端加了一个二极管1N5819。由于1N5819的导通电压大约为0.3V,可将1117-3.3的输出电压太高0.3V,变为3.6V。-5V由负压产生芯片ICL7660产生。电源模块电路如图2.2所示。

图2.2 电源模块电路

(2)滤波电路模块

滤波电路模块主要有低通滤波器和高通滤波器(隔直电路)组成。前面的R15、R16、R17、C10、C11和C12组成三阶低通滤波器。3dB点为600Hz,可以有效的将信号中的高频成分滤除。

高通滤波器电路。C9和R19组成高通滤波电路,3dB点为362mHz,可以将信号中的直流成分有效的滤除。滤波电路如图2.3所示。

图2.3 滤波电路模块

(3)幅度调节及信号输出模块

幅度调节电路是由运算放大器LM358和一些电阻电容组成的反相放大电路。其中R10是精密可调电位器,方便用户对信号的幅度进行调节。

信号输出电路有一个50Ω的电阻和SMA头组成。50Ω的电阻可以保证整个信号发生器

的输出阻抗为50Ω。信号幅度调节和输出部分电路如图2.4所示。

图2.4 信号幅度调节和输出电路

(4)菜单按键和指示模块

作品设计了四个菜单按键,如下图所示。各自的功能见表2.1。

表2.1 菜单按键功能

系统开机启动后,默认输出的波形是10Hz的正弦波。通过点按S5和S4可以实现频率的加1减1,长按可以实现频率的快速加减。通过点按S6,可以切换波形,同时相应的LED 灯会亮(各LED灯代表的波形见表二)。切换波形时,为了保护用户电路,禁止信号输出。当用户切换到需要的波形时,可以点按S3,使能信号输出。

灯亮代表输出波形如表2.2所示。

表2.2 LED指示灯代表波形

菜单按键和LED信号指示灯的电路见图2.5。

图2.5 菜单按键和信号指示灯电路

第四节系统组成原理图及元器件清单系统组成的原理图请见图2.6。

图2.6 系统原理图元器件清单列表见表2.3。

第五节PCB板的设计

PCB设计的注意事项:

●电源线尽量粗一点。比如主电源线可以选30mil,分支电源线可以选用15mil。

●芯片的退耦电容应尽量靠近芯片。并且退耦电容的连接线尽量粗一点。

●由于本作品是信号发生器,所以尽量保证地平面的完整性。

●注意大型元器件的安装位置,不要影响LaunchPad的安装。比如本作品中的精密电位器

体积比较大,应注意安装位置。

●与用户交互功能的器件应注意安装位置。比如,四个菜单按键的位置,应该便于用户操

作;信号指示灯的位置,应便于用户观察;精密电位器的位置,应便于用户调节;SMA 信号输出头的位置,应便于用户连线。

第六节硬件的安装调试

本作品的硬件系统是由信号产生模块、低通滤波器模块、高通滤波器模块、增益控制模块、菜单按键及指示模块和电源模块组成。

用户在安装调试的过程中,应该按照模块的先后顺序逐个调试。确保整个系统安装完成后,各个模块工作正常,整个系统板可以正常工作。避免没有调试各个模块的情况下,直接安装完整个系统,而系统不能正常工作,却不知道是哪个模块出现了故障。

安装调试的顺序:

1.安装电源模块。安装完成后测试各个电压输出是否正常。整个系统的电压有:+5V,

+3.6V,-5V。

2.安装低通滤波器模块。可以先在LaunchPad板子上先写一个简单的信号测试程序,

当低通滤波器安装完成后,测试输出波形是否正常。

3.安装高通滤波器模块。安装完成后测试波形中的低频(直流)成分是否滤除。

4.安装增益控制模块。安装完成后测试精密电位器是否能控制信号的增益。如果正常,

说明信号处理电路部分已经可以正常工作。

5.安装菜单按键和指示模块。安装完成后写一个简单的程序进行调试,测试各个器件

都可以正常工作。

如果以上步骤都正确完成,那么整个硬件电路已经成功安装完成。接下来就可以对系统的软件进行调试了。

整个系统安装完毕后实物图如2.9所示。

图2.9 系统实物图

注意:本系统采用自己设计的电源模块。为使LaunchPad正常工作,需将LaunchPad 中J3的跳线帽全部去掉。

第三章 作品软件系统设计

第一节 DDS 原理及在作品中的实现

(1) D DS 原理

DDS 是直接数字式频率合成器(Direct Digital Synthesizer )的缩写。与传统的频率合成

器相比,DDS 具有低成本、低功耗、高分辨率和快速转换时间等优点,广泛使用在电信与电子仪器领域,是实现设备全数字化的一个关键技术。下面对DDS 的原理进行介绍。 对于一个频率为out f 的正弦信号out S ,可以用下式来描述:

)π2(sin sin out out t f A t A S ==ω (1)

其相位为:t f out π2=θ (2)

现将正弦信号的相位和幅值均进行数字化,使用频率为clk f 的基准时钟对正弦信号进行

抽样 clk

out

clk out π2π2f f T f =

=?θ.......................................................................................3 将2π切割成2N 等份作为最小量化单位,从而得到θ?的数字量M 为:

clk

OUT 222f f M N N

?=?=θπ (4)

M f f N

?=

2clk

out ............................................................................................................5 当M 取1时,可以得到输出信号的最小频率步进为

N f f 2

clk

=

?……………………………………………………………………….……6 ()()M M Af M M A A S k k N +=??

?

???+=?+=---1sin 11k out 22sin )(sin πθθ (7)

由于正弦函数为非线性函数,很难实时计算,一般通过查表的方法来快速获得函数值。

(2) D DS 在作品中的实现

下面以正弦波为例对DDS 在作品中是如何实现的进行介绍,三角波和锯齿波同理。

首先,对正弦波的幅值进行量化,公式1中的A 为256。之所以选择256,是由于本作

品中生成的1024个点的正弦波相位和幅值量化表中的数值使用的是8位的char 型。1024

个点占用1K 字节的存储空间。在正弦波相位和幅值量化表中存储的数值相对于是以256个时钟为总周期的PWM 调制波的高电平值。

PWM 调制的本质是改变波形中高电平的比例,实际是波形在一个周期内的“面积”。

如果将PWM 调制波进行低通滤波,取出其直流成分(平均值),滤除后的输出电压将线性正比于PWM 的占空比。根据这个原理可以利用PWM 输出作为低速DAC 使用。

在软件中,DCO 的时钟被配置为15.25MHz ,但实际测试为15.802368MHz 。SMCLK

的时钟源为DCOCLK 。定时器TA 的时钟源为SMCLK 。定时器TA 的CCR0为256,而且为了得到稳定的幅值,让正弦波的一个点持续输出占空比相同的60个PWM 波形。相当于采样频率为:()Hz f clk 102960*256/15802368== 则由公式6得:Hz Hz

f f N 121029210

clk ≈==?

当M=2时,相当于在1029Hz 的采样率下,一个波形只取了512个点,输出波形为2Hz 。

所以可得M f out =。利用此原理本作品实现了1到100Hz 正弦波的产生。

以上对DDS 原理和如何在软件中实现进行了介绍,下面软件具体内容进行介绍。

第二节 程序流程图进行介绍

(1) 主程序流程图

开机后,主程序首先关闭看门狗,接着对相应的I/O 口、系统时钟、定时器TA 进行初始化,完成后开总中断。然后,执行main 函数。主程序流程图如图3.1所示。

图3.1 主程序流程图

(2) 定时器中断服务程序流程图

定时器TA 的中断服务程序中主要处理将相应频率的波转化成对应的PWM 波输出。定时器中断服务程序流程图如图3.2所示。

图3.2 定时器中断服务程序流程图

(3)按键中断服务程序流程图

按键中断服务程序中主要处理波形的选择、频率的加减、信号输出使能等功能。按键中断服务程序流程图见图3.3。

图3.3 按键中断服务程序流程图

第三节子程序API介绍

(1)函数名:void Port_init(void)

输入输出变量:无

功能:IO口初始化

void Port_init(void)

{

P1SEL|=BIT2;//TA0.1

P1DIR|=BIT2;

P1DIR|=(BIT3+BIT4+BIT5);

P1OUT|=BIT5;//初始为Sine,点亮相应指示灯

P1OUT&=~(BIT3+BIT4);

//四个按键

P1DIR&=~(BIT6+BIT7);

P1IES|=BIT6+BIT7;

P1IE|=BIT6+BIT7;

P2DIR&=~(BIT6+BIT7);//设为输入

P2SEL&=~(BIT6+BIT7);//关闭第二功能

P2IES|=BIT6+BIT7;//下降沿触发

P2IE|=BIT6+BIT7;//开中断

}

(2)函数名:void Sys_clock_init(void)

输入输出变量:无

功能:系统时钟配置

void Sys_clock_init(void)

{

DCOCTL = 0x60;//DC0=3

BCSCTL1= 0x8F;//0X88-RSEL=8 DCOCLK=1.6MHz 0X8F-RSEL=15 DCOCLK=15.25MHz for(unsigned int i=0;i<65535;i++);//延时,使系统时钟稳定

}

(3)函数名:void TA_init(void)

输入输出变量:无

功能:定时器TA初始化

void TA_init(void)

{

TACTL|=TASSEL_2+MC_1;//TA时钟源选择SMCLK,增计数模式 TACCTL1=OUTMOD_7;//模式7,PWM输出模式

TACCR0=255;

TACCTL0|=CCIE;//打开中断

}

(4)函数名:__interrupt void TA_ISR (void)

输入输出变量:无

功能:定时器TA中断服务程序

#pragma vector=TIMERA0_VECTOR

__interrupt void TA_ISR (void)

{

if(WaveSelect==5)//Sine

{

Count_line++;

if(Count_line>Sin_line)

{

TACCR1=sin[M];

M+=Delt_M;

if(M>=1024) M=M-1024;

Count_line=0;

}

}

if(WaveSelect==10)//Triangle

{

Count_line++;

{

if((Count<=1405)&&(Rise==1))//三角波上升 {

Count+=f_out;

if(Count>1405)

{

Count=2810-Count;

Rise=0;

TACCR1=Count;

Count_line=0;

return;

}

}

if(Rise==0)//三角波下降

{

if(Count>=f_out)Count-=f_out;

else

{

Count=f_out-Count;

Rise=1;

}

}

TACCR1=Count;

Count_line=0;

}

}

if(WaveSelect==15)//Sawtooth

{

Count_line++;

{

Count+=f_out;

if(Count>=1405)Count-=1405;

TACCR1=Count;

Count_line=0;

}

}

}

(5)函数名:__interrupt void P1_ISR_KEYS(void)

输入输出变量:无

功能:P1口按键中断服务程序

#pragma vector=PORT1_VECTOR

__interrupt void P1_ISR_KEYS(void)

{

unsigned int i,Keytime1=0,Keytime2=0;

unsigned char PushKey;

PushKey=P1IFG&(BIT6+BIT7);

for(i=0;i<1000;i++);

if((P1IN&PushKey)==PushKey)

{

P1IFG=0;return;

}

if(PushKey&BIT6)//对应电路板上的S3 S3:Disable Output {

TACCTL0|=CCIE;//开TA中断,允许输出信号

}

if(PushKey&BIT7)//对应电路板上的S4 S4:Sub

{

while((P1IN&BIT7)==0)//判断按键是否是长按

{

Keytime1++;

if(Keytime1>60000)

{

Keytime2++;

Keytime1=0;

if(Keytime2>10)

{

if(f_out) f_out-=5;

Keytime2=0;

}

}

}

if(f_out) f_out-=1;

}

P1IFG=0;

return;

}

(6)函数名:__interrupt void P2_ISR_KEYS(void) 输入输出变量:无

功能:P2口按键中断服务程序

#pragma vector=PORT2_VECTOR

__interrupt void P2_ISR_KEYS(void)

{

unsigned int i,Keytime1=0,Keytime2=0;

unsigned char PushKey;

PushKey=P2IFG&(BIT6+BIT7);

for(i=0;i<1000;i++);

if((P2IN&PushKey)==PushKey)

{

UML课程设计-源代码

(object Petal version 47 _written "Rose 8.0.0303.1400" charSet 134) (object Design "Logical View" is_unit TRUE is_loaded TRUE attributes (list Attribute_Set (object Attribute tool "Java" name "IDE" value "Internal Editor") (object Attribute tool "Java" name "UserDefineTagName1" value "") (object Attribute tool "Java" name "UserDefineTagText1" value "") (object Attribute tool "Java" name "UserDefineTagApply1" value "") (object Attribute tool "Java" name "UserDefineTagName2" value "") (object Attribute tool "Java" name "UserDefineTagText2" value "") (object Attribute tool "Java" name "UserDefineTagApply2" value "") (object Attribute tool "Java" name "UserDefineTagName3" value "") (object Attribute tool "Java"

MSP430单片机实验报告v3.0

MSP430单片机课程设计 一.设计要求 数字温度计 (1)用数码管(或LCD)显示温度和提示信息; (2)通过内部温度传感器芯片测量环境温度; (3)有手动测量(按测量键单次测量)和自动测量(实时测量)两种工作模式; (4)通过按键设置工作模式和自动测量的采样时间(1秒~1小时); (5)具备温度报警功能,温度过高或过低报警。 二.系统组成 系统由G2Launch Pad及其拓展板构成,单片机为MSP430G2553。 I2的通信方式对IO进行拓展,芯片为TCA6416A; 使用C 使用HT1621控制LCD; 三.系统流程 拓展的四个按键key1、key2、key3、key4分别对应单次测量、定时测量、定时时间的增、减。定时时间分别为1s,5s,15s,30s,60s。在自动测量模式下,当温度超过设定温度上限

即报警,报警时在LCD屏幕显示ERROR同时LED2闪烁,在5s后显示0℃。此时可重新开始手动或自动测量温度。 系统示意图: 四.演示 a)手动测量温度 b)自动测量温度 c)报警

显示ERROR同时LED闪烁d)设置时间界面 五.代码部分 #include "MSP430G2553.h" #include "TCA6416A.h" #include "LCD_128.h" #include "HT1621.h" #include "DAC8411.h" #define CPU_F ((double)8000000) #define delay_us(x) __delay_cycles((long)(CPU_F*(double)x/1000000.0)) #define delay_ms(x) __delay_cycles((long)(CPU_F*(double)x/1000.0)) static int t=0; long temp; long IntDeg; void ADC10_ISR(void); void ADC10_init(void); void LCD_Init(); void LCD_Display(); void GPIO_init(); void I2C_IODect(); void Error_Display(); void WDT_Ontime(void); void LCD_Init_AUTO(); void LCD1S_Display();

单片机实验报告

院系:计算机科学学院专业:智能科学与技术年级: 2012 学号:2012213865 姓名:冉靖 指导教师:王文涛 2014年 6月1日

一. 以下是端口的各个寄存器的使用方式: 1.方向寄存器:PxDIR:Bit=1,输出模式;Bit=0,输入模式。 2.输入寄存器:PxIN,Bit=1,输入高电平;Bit=0,输入低电平。 3.输出寄存器:PxOUT,Bit=1,输出高电平;Bit=0,输出低电平。 4.上下拉电阻使能寄存器:PxREN,Bit=1,使能;Bit=0,禁用。 5.功能选择寄存器:PxSEL,Bit=0,选择为I/O端口;Bit=1,选择为外设功能。6.驱动强度寄存器:PxDS,Bit=0,低驱动强度;Bit=1,高驱动强度。 7.中断使能寄存器:PxIE,Bit=1,允许中断;Bit=0,禁止中断。 8.中断触发沿寄存器:PxIES,Bit=1,下降沿置位,Bit=0:上升沿置位。 9.中断标志寄存器:PxIFG,Bit=0:没有中断请求;Bit=1:有中断请求。 二.实验相关电路图: 1 MSP430F6638 P4 口功能框图: 主板上右下角S1~S5按键与MSP430F6638 P4.0~P4.4口连接: 2按键模块原理图: 我们需要设置两个相关的寄存器:P4OUT和P4DIR。其中P4DIR为方向寄存器,P4OUT 为数据输出寄存器。 主板上右下角LED1~LED5指示灯与MSP430F6638 P4.5~P4.7、P5.7、P8.0连接:

3 LED指示灯模块原理图: P4IN和P4OUT分别是输入数据和输出数据寄存器,PDIR为方向寄存器,P4REN 为使能寄存器: #define P4IN (PBIN_H) /* Port 4 Input */ #define P4OUT (PBOUT_H) /* Port 4 Output */ #define P4DIR(PBDIR_H) /* Port 4 Direction */ #define P4REN (PBREN_H) /* Port 4 Resistor Enable */ 三实验分析 1 编程思路: 关闭看门狗定时器后,对P4.0 的输出方式、输出模式和使能方式初始化,然后进行查询判断,最后对P4.0 的电平高低分别作处理来控制LED 灯。 程序流程图: 2 关键代码分析: #include void main(void) { WDTCTL = WDTPW + WDTHOLD; // 关闭看门狗 P4DIR |= BIT5; // 设置4.5口为输出模式 P4OUT |= BIT0; // 选中P4.0为输出方式 P4REN |= BIT0; // P4.0使能 while (1) // Test P1.4 { if (P4IN & BIT0) //如果P4.0为1则执行,这是查询方式按下去后是低,否则为高

5_Java课程设计源代码

package zhouchuan; import java.applet.*; import java.awt.*; import java.awt.event.*; import https://www.360docs.net/doc/c210106936.html,.*; public class zhouchuan extends Applet implements ActionListener { AudioClip clip; Button buttonPlay, buttonLoop, buttonStop; public void init(){ try{ URL url=new URL("file:"+"F://ding.wav"); clip=getAudioClip(url);}catch(Exception e){ } buttonPlay=new Button("开始播放"); buttonLoop=new Button("循环播放"); buttonStop=new Button("停止播放"); buttonPlay.addActionListener(this); buttonStop.addActionListener(this); buttonLoop.addActionListener(this); add(buttonPlay); add(buttonLoop); add(buttonStop); } public void stop(){ clip.stop(); } public void actionPerformed(ActionEvent e){ if(e.getSource()==buttonPlay) clip.play(); else if(e.getSource()==buttonLoop) clip.loop();

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

MSP430单片机应用技术 实验报告 学号:XXXXXXXX

实验1 一、实验题目:UCS实验 二、实验目的 设置DCO FLL reference =ACLK=LFXT1 = 32768Hz, MCLK = SMCLK = 8MHz,输出ACLK、SMCLK,用示波器观察并拍照。 UCS,MCLK、 SMCLK 8MHz 的 1 2 六、实验结果 实验2 一、实验题目:FLL+应用实验 二、实验目的

检测P1.4 输入,遇上升沿进端口中断,在中断服务程序内翻转P4.1 状态。 三、实验仪器和设备 计算机、开发板、示波器、信号源、电源、Code Comeposer Studio v5 四、实验步骤 1、用电缆连接开发板USB2口和电脑USB口,打开电源开关SW1,电源指示灯D5点亮; 2、运行CCSV5; WDT 1、用电缆连接开发板USB2口和电脑USB口,打开电源开关SW1,电源指示灯D5点亮; 2、运行CCSV5; 3、新建工作空间workspace; 4、新建工程project与源文件main.C; 5、编写程序; 6、编译、调试、下载程序到单片机;

7、观察、分析、保存运行结果。 五、实验程序 实验4 一、实验题目:WDT_A实验 二、实验目的 定时模式 1 2 六、实验结果 实验5一、实验题目:Timer_A实验

二、实验目的 比较模式-Timer_A0,两路PWM 输出,增减计数模式,时钟源SMCLK,输出模式7 TACLK = SMCLK = default DCOCLKDIV。PWM周期CCR0 = 512-1,P1.6 输出PWM占空比CCR1 = 37.5%,P1.7输出PWM占空比CCR1 =12.5%。 要求: (1)用示波器观察两路PWM 输出的波形并拍照,测量周期、正脉宽等参数,与理论值进行对比分析。 (2 (3 1 2 实验6 一、实验题目:ADC12实验 二、实验目的 ADC12 单次采样A0 端口,根据转换结果控制LED 状态。

数据库课程设计源代码

use kjq111007307 /*创建一个部门信息表 包含“部门号,部门名,部门经理,人数”属性列*/ create table department (depart_no char(2)primary key, depart_name char(30)not null, depart_manage char(6)not null, depart_people int not null ) /*创建一个职位信息表 包含“职位,基本薪资,福利,失业保险,住房公积金”属性列*/ create table position (pos char(30)primary key, basesalary float not null, benefits float not null, insurances float not null, housing_funds float not null ) /*创建一个职工信息表 包含"职工号,职工名,性别,年龄,学历,部门号,职位"属性列*/ create table staff_message (staff_no char(4)primary key, staff_name char(10)not null, staff_sex char(2)check(staff_sex in('男','女')), staff_age int not null, staff_edu char(10)not null, staff_dep char(2)not null, staff_job char(30)not null, foreign key(staff_dep)references department(depart_no), foreign key(staff_job)references position(pos) ) /*创建一个员工考勤表 包含“职工号,年月,迟到,缺勤,加班”属性列*/ create table staff_days (staff_no char(4), month_date char(6), staff_late int not null, staff_absent int not null, workoverdays int not null, primary key(staff_no,month_date) ) /*创建一个薪资表 包含“职工号,年月,奖金,罚金,真实薪资”属性列*/ create table salary (staff_no char(4),

430单片机点亮LED实验报告

430单片机点亮LED实验报告 一.安装实验软件IAR 二.编写点亮LED灯程序 1.使P1.0口LED灯会不停的闪烁着,程序 #include typedef unsigned int uint; typedef unsigned char uchar; /*延时函数*/ void Delay_Ms(uint x) { uint i; while(x--)for(i=0;i<250;i++); } /*主函数*/ int main( void ) { WDTCTL = WDTPW + WDTHOLD;// Stop watchdog timer to prevent time out reset P2DIR|=BIT0;//定义P1口为输出 while(1)//死循环 { P2OUT^=BIT0;//P1.0口输出取反

Delay_Ms(600);//稍作延时 } } 下载进去看到了P1.0口LED灯会不停的闪烁着。 2.实验目的让两盏灯交换闪烁程序 #include"msp430g2553.h" void main(void) { void Blink_LED(); WDTCTL=WDTPW+WDTHOLD; //关闭看门狗 P1DIR=BIT6; P2DIR=BIT0; while(1) { Blink_LED(); } } void Blink_LED() { _delay_cycles(1000000); //控制第二个LED P1OUT^=BIT6; _delay_cycles(1000000); //控制第一个LED P2OUT^=BIT0;

教师课程管理系统(c++课程设计源代码)

#include #include #include #include #include #include using namespace std; using std::string; class ke; ostream&operator<<(ostream&dist,ke&k); istream&operator>>(istream&sour,ke&k); class teacher; ostream&operator<<(ostream&dist,teacher&t); istream&operator>>(istream&sour,teacher&t); class ke { protected: static int keID; string keName; char keJB; int keXS; int keJC; int keBH; public: ke(string name="未命名的课程",char jb='0',int xs=0,int jc=0,int bh=0); void show(); friend ostream&operator<<(ostream&dist,ke&k); friend istream&operator>>(istream&sour,ke&k); int getkeJC(){return keJC;} string getkeName(){return keName;} }; int ke::keID=0; ke::ke(string name,char jb,int xs,int jc,int bh) { keID++; bh=keID; keName=name; keJB=jb; keXS=xs; keJC=jc; keBH=bh; } void ke::show() {

MSP430单片机实验报告

MSP430单片机实验报告 专业: 姓名: 学号:

MSP430单片机实验报告 设计目标:使8位数码管显示“5201314.”,深入了解串行数据接口。 实现过程:主要分为主函数、驱动8位数码管函数、驱动1位数码管函数及延时函数。 延时函数:采用for循环。 驱动1位数码管子函数:设置74HC164的时钟传输和数传输,声明变量,使数据表中每一个要表示的字符的每一位都与shift做与运算从而进行传输,上升沿将传输数据传送出去。驱动1位数码管子函数的流程图如图1所示。 图1 驱动1位数码管子函数流程图 驱动8位数码管子函数:调用8次驱动1位数码管子函数。驱动8位数码管子函数流程图如图2所示。 图2 驱动8位数码管流程图

while 图3 主函数流程图 实验结果:供电后,数码管显示“5201314.”字样。 源程序: /************* 程序名称:5201314.*************/ /***程序功能:通过模拟同步串口控制8个共阳数码管***/ /*******P5.1 数据管脚,P5.3 同步时钟管脚*******/ #include // 头文件 void delay(void); // 声明延迟函数void seg7_1 (unsigned char seg7_data); // 声明驱动1 位数码管函数void seg7_8 ( unsigned char seg7_data7, unsigned char seg7_data6, unsigned char seg7_data5, unsigned char seg7_data4, unsigned char seg7_data3, unsigned char seg7_data2,

c语言课程设计源代码

c语言课程设计源代码标准化管理处编码[BBX968T-XBB8968-NNJ668-MM9N]

学校运动会管理系统问题描述: (1) 初始化输入:N-参赛院系总数,M-男子竞赛项目数,W-女子竞赛项目数; (2) 各项目名次取法有如下几种: 取前5名:第1名得分 7,第2名得分 5,第3名得分3,第4名得分2,第5名得分 1; (3) 由程序提醒用户填写比赛结果,输入各项目获奖运动员的信息。 (4) 所有信息记录完毕后,用户可以查询各个院系或个人的比赛成绩,生成团体总分报表,查看参赛院系信息、获奖运动员、比赛项目信息等。 程序代码: #include<> #include<> #define N 3 #define M 3 #define W 3 char* n_number[3]={"1","院系2","院系3"}; char* m_number[3]={"1","男项2","男项3"};

char* w_number[3]={"女项1","女项2","女项3"}; int size=2; struct student { char num[10]; char name[20]; char xiangmu[20]; int score; char ximing[20]; }stu[100],temp; void input() um,&stu[i].name,&stu[i].xiangmu,&stu[i].score,&stu[i].ximing); iming,n_number[0])==0) iming); iming,n_number[h])==0) for(int s=0;s

小型公司管理系统C++课程设计(含源代码)

C++程序设计课程设计报告 课题: 小型公司工资管理系统 专业班级: 学号: 姓名: 指导教师: 评阅意见: 评定成绩: 指导老师签名:

目录 1.设计系统的目的意义 (1) 2.系统需求、功能分析 (2) 3. 数据结构表 (3) 4. 数据测试表 (5) 5. 运行和调试 (7) 6. 课程心得体会 (16) 参考书目 (17) 附录 (18)

课程设计报告内容: 1、设计系统的目的意义 本次课程设计所编辑的C++程序是为了建立“小型公司工资管理系统”。 通过对该系统的建立进一步掌握面向过程和面面相对象程序的设计的几本方法和编程技巧,巩固所学理论知识,是理论与实践相结合,提高分析问题、 解决问题的能力。 具体一点主要是为了进一步熟悉C++中类的概念、类的继承、抽象类、虚函数、虚基类、多态和文件的输入/输出等内容的实现方式。了解系统开发的需求分析、类层次设计、模块分析、编码测试、模块组装与整体调试的全过程;逐 步熟悉程序设计的方法,并养成良好的编程习惯。

2、系统需求、功能分析 A、公司主要有四类雇员:经理、技术人员、销售人员、销售经理。要求储存雇 员的编号、姓名、性别、所在部门、级别等信息,并进行工资计算。 B、工资的计算方法 (1)经理:领取固定月薪,固定月薪5000元; (2)技术人员:按小时领取月薪,工作时间*小时工资(80元/小时); (3)销售人员:按巩固销售额领取月薪,0.33*销售额; (4)销售经理:既拿固定月薪也领取销售提成,0.33*销售额+固定月薪(5000元)。 C、功能分析 (1)添加功能:程序能够任意添加上述四类人员的记录,可提供选择界面供用户选择所要添加的人员类别,要求员工的编号要唯一,如果添加了重复编号的记录时,则提示数据添加重复并取消添加。 (2)查询功能:可根据编号、姓名等信息对已添加的记录进行查询,如果未找到,给出相应的提示信息,如果找到,则显示相应的记录信息; (3)显示功能:可显示当前系统中所有记录,每条记录占据一行。 (4)编辑功能:可根据查询结果对相应的记录进行修改,修改时注意编号的唯一性。 (5)删除功能:主要实现对已添加的人员记录进行删除。如果当前系统中没有相应的人员记录,则提示“记录为空!”并返回操作;否则,输入要删除的人员的编号或姓名,根据所输入的信息删除该人员记录,如果没有找到该人员信息,则提示相应的记录不存。 (6)统计功能:能根据多种参数进行人员的统计。例如,统计四类人员数量以及总数,或者统计男、女员工的数量,或者统计平均工资、最高工资、最低工资等信息。 (7)读取功能:可将保存在文件中的人员信息读入到当前系统中,供用户进行使用。 (8) 退出功能:退出程序。

MSP430 按键程序范例(附原理图)

#i nclude void Init_Port(void) { //将P1口所有的管脚在初始化的时候设置为输入方式 P1DIR = 0; //将P1口所有的管脚设置为一般I/O口 P1SEL = 0; // 将P1.4 P1.5 P1.6 P1.7设置为输出方向 P1DIR |= BIT4; P1DIR |= BIT5; P1DIR |= BIT6; P1DIR |= BIT7; //先输出低电平 P1OUT = 0x00; // 将中断寄存器清零 P1IE = 0; P1IES = 0; P1IFG = 0; //打开管脚的中断功能 //对应的管脚由高到低电平跳变使相应的标志置位 P1IE |= BIT0; P1IES |= BIT0; P1IE |= BIT1; P1IES |= BIT1; P1IE |= BIT2; P1IES |= BIT2; P1IE |= BIT3; P1IES |= BIT3; _EINT();//打开中断 return; } void Delay(void) { int i; for(i = 100;i--;i > 0) ;//延时一点时间 } int KeyProcess(void) { int nP10,nP11,nP12,nP13; int nRes = 0;

//P1.4输出低电平 P1OUT &= ~(BIT4); nP10 = P1IN & BIT0; if (nP10 == 0) nRes = 13; nP11 = P1IN & BIT1; if (nP11 == 0) nRes = 14; nP12 = P1IN & BIT2; if (nP12 == 0) nRes = 15; nP13 = P1IN & BIT3; if (nP13 == 0) nRes = 16; //P1.5输出低电平 P1OUT &= ~(BIT4); nP10 = P1IN & BIT0; if (nP10 == 0) nRes = 9; nP11 = P1IN & BIT1; if (nP11 == 0) nRes = 10; nP12 = P1IN & BIT2; if (nP12 == 0) nRes = 11; nP13 = P1IN & BIT3; if (nP13 == 0) nRes = 12; //P1.6输出低电平 P1OUT &= ~(BIT4); nP10 = P1IN & BIT0; if (nP10 == 0) nRes = 5; nP11 = P1IN & BIT1; if (nP11 == 0) nRes = 6; nP12 = P1IN & BIT2; if (nP12 == 0) nRes = 7; nP13 = P1IN & BIT3; if (nP13 == 0) nRes = 8; //P1.7输出低电平 P1OUT &= ~(BIT4); nP10 = P1IN & BIT0; if (nP10 == 0) nRes = 1; nP11 = P1IN & BIT1; if (nP11 == 0) nRes = 2; nP12 = P1IN & BIT2; if (nP12 == 0) nRes = 3; nP13 = P1IN & BIT3; if (nP13 == 0) nRes = 4; P1OUT = 0x00;//恢复以前值。

SP课程设计QQ登陆系统含源代码

目录 1 前言 ........................................................................................................................... 页码 1.1 问题提出 ..................................................... 页码 1.2 研究意义 ..................................................... 页码 2 系统需求分析 ............................................................................................................. 页码 2.1 系统功能分析........................................................................................................ 页码 2.2 系统功能模块设计................................................................................................ 页码 3 数据库的概念结构设计............................................ 页码 3.1数据抽象...................................................... 页码 3.2设计全局概念模式.............................................. 页码 4 数据库的逻辑设计................................................. 页码 4.1形成初始的关系模式............................................ 页码 4.2关系模式的规范化处理.......................................... 页码5系统的实现与调试 ................................................. 页码6 总结............................................................... 页码参考文献 .......................................................................................................................... 页码

MSP430单片机定时器实验报告

实验四定时器实验 实验目的: MPS430F5529片内集成的定时器A的使用,学习计数器的补捕获比较模块的使用。实验内容: 定时器采用辅助时钟ACLK作为计数脉冲,fACLK=32768Hz,实现以下功能: 1.定时器TA0延时1s,点亮或熄灭LED6,即灯亮1s灭1s,如此循环,采用中断服务程序实现。 2.定时器TA0延时1s,点亮或熄灭LED4,采用捕获比较器CCR0的比较模式,设定输出方式,输出方波,不用中断服务程序 3.采用捕获比较器CCR1的比较模式LED5,设定输出方式,输出PWM波形,使LED 亮2s,灭1s。 4.用定时器实现30s倒计时,在液晶模块上显示,每过一秒显示数字变化一次。 5.使用TA1的捕获比较器CCR0捕获按键的间隔时间,在液晶模块上显示。 程序代码: 程序1: #include void main() {WDTCTL = WDTPW + WDTHOLD; //关看门狗 P1DIR |= BIT3; //设置P1.0口方向为输出。 TA0CCTL0 = CCIE; //设置捕获/比较控制寄存器中CCIE位为1, //CCR0捕获/比较功能中断为允许。 TA0CCR0 = 32767; //捕获/比较控制寄存器CCR0初值为32767 TA0CTL = TASSEL_1 + MC_1+TACLR; //设置定时器A控制寄存器TACTL, //使时钟源选择为SMCLK辅助时钟。 //进入低功耗模式LPM0和开总中断 _BIS_SR(LPM0_bits +GIE); } //定时器A 中断服务程序区 #pragma vector=TIMER0_A0_VECTOR __interrupt void Timer_A (void) {

软件课程设计源代码

1. 自定义一个示意性的复数类型complex,其中含有若干个成员函数,使用该类可以完成复数的加法以及对复数的输出。请完成类定义,并编制主函数,说明complex类对象,对定义的各成员函数进行调用。 class complex{ double real; //复数实部 double imag; //复数虚部 public: complex(); //无参构造函数 complex(double r, double i); //2参构造函数 complex addCom(complex c2); //调用者对象与对象c2相加,返回complex类对象 void outCom (); //输出调用者对象的有关数据(各分量) }; 进一步,在类中添加对复数进行其他基本运算(如,复数减、乘、除、取模等)的相应成员函数,并通过主函数处的调用来验证各函数的使用正确性。 #include #include using namespace std; class complex { private: double real; double imag; public: complex(){real=0;imag=0.0;} ~complex(){}; complex(double r,double i) { real=r; imag=i; } complex operator+(complex &c2); complex operator-(complex &c2);

complex operator*(complex &c2); complex operator/(complex &c2); double x(complex &c); void display(); void set(); }; double complex::x(complex &c) { return sqrt(c.real*c.real+c.imag*c.imag); } void complex::set() { cout<<"请输入实部"<>real; cout<<"请输入虚部"<>imag; } void complex::display() { cout<<"("<

单片机原理及应用_第十讲_MSP430单片机的ADC实验报告

单片机原理及应用 第十讲 MSP430单片机的ADC 实验报告 报告人:学号:同组人员: 实验内容 实验1 AD采集输入电压并比较 实验2 AD内部温度采集实验 实验3 验收实验:温度采集与显示 把实验2中的实测温度值以摄氏度数值显示在段码LCD上。 实验步骤 步骤: (1) 将PC 和板载仿真器通过USB 线相连; (2) 打开CCS 集成开发工具,选择样例工程或自己新建一个工程,修改代码; (3) 选择对该工程进行编译链接,生成.out 文件。然后选择,将程序下载到实验板中。程序下载完毕之后,可以选择全速运行程序,也可以选择

单步调试程序,选择F3 查看具体函数。也可以程序下载之后,按下,软件界面恢复到原编辑程序的画面。再按下实验板的复位键,运 行程序。(调试方式下的全速运行和直接上电运行程序在时序有少许差别,建议 上电运行程序)。 关键代码: 实验1 AD采集输入电压并比较 #include int main(void) { WDTCTL = WDTPW + WDTHOLD; // Stop WDT ADC12CTL0 = ADC12SHT02 + ADC12ON; // Sampling time, ADC12 on ADC12CTL1 = ADC12SHP; // Use sampling timer ADC12IE = 0x01; // Enable interrupt ADC12CTL0 |= ADC12ENC; P6SEL |= 0x01; // P6.0 ADC option select P4DIR |= BIT1; // P4.1 output while (1) { ADC12CTL0 |= ADC12SC; // Start sampling/conversion __bis_SR_register(LPM0_bits + GIE); // LPM0, ADC12_ISR will force exit __no_operation(); // For debugger } } #pragma vector = ADC12_VECTOR __interrupt void ADC12_ISR(void) { switch(__even_in_range(ADC12IV,34)) { case 0: break; // Vector 0: No interrupt case 2: break; // Vector 2: ADC overflow case 4: break; // Vector 4: ADC timing overflow

MSP430单片机AD转换实验

A/D转换实验 一、转换原理 MSP430F149的A/D转换器原理请参考相关书籍。 实验板上与AD相关的硬件电路 : 编程工作实际就就是对以下寄存器的操作: 寄存器类型寄存器缩写寄存器的含义 转换控制寄存器ADC12CTL0 转换控制寄存器0 ADC12CTL1 转换控制寄存器1 中断控制寄存器ADC12IFG 中断标志寄存器ADC12IE 中断使能寄存器ADC12IV 中断向量寄存器 存储及其 控制寄存器ADC12MCTL0 ~ ADC12MCTL15 存储控制寄存器0~15 ADC12MEM0 ~ ADC12MEM15 存储寄存器0~15 设计主程序与中断服务程序。 二、转换程序 1、程序1:转换结果发送到PC 主程序中进行A/D初始化,中断服务程序读A/D转换结果,主程序中通过串口发送结果。

“main、c”主程序与中断程序: /********************************************************* 程序功能:将ADC对P6、0端口电压的转换结果按转换数据与对应的模拟电压的形式通过串口发送到PC机屏幕上显示 ----------------------------------------------------------- 通信格式:N、8、1, 9600 ----------------------------------------------------------- 测试说明:打开串口调试精灵,正确设置通信格式,观察接收数据 **********************************************************/ #include #include "allfunc、h" #include "UART0_Func、c" #include "ADC_Func、c" #define Num_of_Results 32 uint results[Num_of_Results]; //保存ADC转换结果的数组 uint average; uchar tcnt = 0; /***********************主函数***********************/ void main( void ) { uchar i; uchar buffer[5]; WDTCTL = WDTPW + WDTHOLD; //关狗 /*下面六行程序关闭所有的IO口*/ P1DIR = 0XFF;P1OUT = 0XFF; P2DIR = 0XFF;P2OUT = 0XFF; P3DIR = 0XFF;P3OUT = 0XFF; P4DIR = 0XFF;P4OUT = 0XFF; P5DIR = 0XFF;P5OUT = 0XFF; P6DIR = 0XFF;P6OUT = 0XFF; P6DIR |= BIT2;P6OUT |= BIT2; //关闭电平转换 P6DIR|=BIT6;P6OUT&=~BIT6; //关闭数码管显示 InitUART(); Init_ADC(); _EINT(); buffer[4] = '\0';

MSP430单片机实验指导书

试验一 一、实验目的 进一步熟悉IAR for MSP430编程软件和PROTEUS仿真软件的使用。了解并熟悉单片机I/O口和LED灯的电路结构,学会构建简单的流水灯电路。掌握MSP430单片机I/O口的编程方法和使用I/O口进行输入输出的注意事项。掌握PROTEUS仿真软件仿真MSP430单片机过程中的注意事项。 二、实验内容 1、运用PROTEUS仿真软件绘制LED流水灯电路; 2、运用IAR for MSP430编程软件编辑led流水灯程序,并且生成.hex 或.d90文件,并且将生成的文件加载到单片机中,程序使用P1或其它端口来演示跑马灯,输出低电平驱动。 三、实验器材 电脑一台 四、实验原理及介绍 LED流水灯实际上是一个带有发光二极管的单片机最小系统,即由led灯、电阻、电容器、电源等电路和必要的软件组成的单个的单片机;如果要让接在P1或其它端口的LED灯亮起来,那么只需要将P1或其它端口的电平变为低电平就可以了。同理,将该端口电平变为高电平,LED灯就会熄灭。 五、程序流程图 开始 端口初始化 LED顺序点亮 结束 六、实验步骤 1、运用PROTEUS仿真软件绘制电路图; 2、运用IAR for MSP430编写流水灯程序,并且生成‘’.hex’’或“.d90”文件

3、将‘’.hex’’或“.d90”文件软件加载到PROTEUS仿真软件中; 4、换一种流水灯的亮灭顺序,改变延时时间的大小,多次实验,灵活使用 七、参考程序 #include "msp430f249.h" #define uint unsigned int /******************** 主函数 **************************/ void main(void) { Uint I; WDTCTL = WDTPW + WDTHOLD; P1DIR = ox0ff; while(1) { PIOUT = 0x00; For(I = 0;I < 65565;I ++); PIOUT = 0x0ff; For(I = 0;I < 65565;I ++); } } 八、心得体会(二页以上)

相关文档
最新文档