最新消息: USBMI致力于为网友们分享Windows、安卓、IOS等主流手机系统相关的资讯以及评测、同时提供相关教程、应用、软件下载等服务。

电子设计竞赛msp430f5438程序技术

IT圈 admin 21浏览 0评论

2024年5月25日发(作者:殳胜)

1 目录 第一章msp430f5438初始化模块 ................................................ 2 1.1

msp430f5438初始化模块介绍 ............................................ 2 1.2 msp430f5438初始化模

块子程序 .......................................... 2 第二章 液晶模

块 ............................................................. 5 2.1液晶模块功能介

绍 .................................................... 5 2.2液晶模块控制口定

义 .................................................... 5 2.3液晶模块控制程

序 ...................................................... 5 2.3液晶模块功能实现子程

序 ................................................ 7 第三章 4X4按键模

块 ........................................................ 10 3.1 按键模块功能介

绍 .................................................... 10 3.2 按键模块接口定

义 .................................................... 10 3.3 按键模块控制子程

序 .................................................. 10 第四章AD9851DDS模

块 ....................................................... 12 4.1 AD9851DDS模块功能介

绍 ............................................... 12 4.2 AD9851DDS模块接口 定

义 .............................................. 12 4.3 AD9851模块控制子程

序 ................................................ 12 第五章DAC7611模

块 ......................................................... 14 5.1 DAC7611模块功能介

绍 ................................................. 14 5.3 DAC7611模块控制子程

序 ............................................... 14 第六章FPGA测频模

块 ........................................................ 16 6.1 FPGA测频模块功能介

绍 ................................................ 16 6.2 FPGA测频模块接口定

义 ................................................ 16 6.3 FPGA模块控制子程

序 .................................................. 16 第七章DAC8811模

块 ......................................................... 18 7.1 DAC8811模块功能介

绍 ................................................. 18 7.2 DAC8811模块接口定

义 ................................................. 18 7.3 DAC8811模块控制子程

序 ............................................... 18 第八章 简易频谱仪程序解

析 .................................................. 20 8.1简易频谱仪程序模块功能介

绍 ............................................. 20 8.2简易频谱仪程序模块流程图介

绍 ........................................... 21 8.3简易频谱仪程序主功能模块介

绍 ........................................... 22 2 第一章msp430f5438初始化模块 1.1 msp430f5438

初始化模块介绍 本模块主要完成msp430f5438的各个基础模块的初始化配置使5438

工作在所需要的工作条件下通过配置内部的各个寄存器来进行设置。主要完成了的

基础配置包括时钟模块I/O口模块定时器模块ADC12模块SPI口模块。 1.2

msp430f5438初始化模块子程序 定时器模块初始化子程序 void CLK_Initvoid //时

钟初始化配置 uint i P5SELBIT2BIT3 //P5.2.3口选择连接XT2 P7SELBIT0BIT1

//P7.0.1口选择连接XT1 UCSCTL00x0000 //方便自带调节 UCSCTL1DCORSEL_5 //

选择DC0工作范围 UCSCTL2FLLD_1374 //DCOCLK分频

D2N1375DCOCLkDN1DCOREFCLk/n UCSCTL3FLLREFDIV_1 //选择DCO参

考频率为n2 UCSCTL6ampXT1OFFXT2OFF // 开XT1XT2 UCSCTL6XCAP_3 //配置

XT1内部电容12Pf UCSCTL6XT2DRIVE_2 //增大XT2的驱动能力

whileSFRIFG1ampOFIFG0 SFRIFG1ampOFIFG //清除振荡器错误标志位

UCSCTL7ampXT2OFFGXT1LFOFFGXT1HFOFFG DCOFFG //清除XT1XT2DCO 错

误标志位 fori0xffigt0i-- UCSCTL4SELA_0SELS_5SELM_5 //ACLK选择

XT132768HzSMCLKXT2MCLKXT2 为16MHz UCSCTL5DIVS_0DIVM_0 本模块

主要完成对MCLKSMCLKACLK。即系统时钟子系统时钟辅助时钟的配置通过设定

相应的寄存器位来使msp430f5438工作在硬件所需要的条件下。 I/0口初始化配置子

程序 3 void PORT_Initvoid //I/O口初始化配置 P1SELBIT2 P1DIRampBIT2 //P1.2

设置为TA0的CCI1A输入测脉宽 P2DIR0x0f //P2低四位设置为输出 P2REN0xf0 //P2

口电阻上拉 P2OUT0xf0 //P2高位拉高 P2IES0xf0 //P2高四位下降沿中断

P2IFG0x00 //P2中断标志清零 P2IE0xf0 //P2口高四位中断使能 P4DIR0xff //P4口用

于AD9851并行数据输出口 P5DIRBIT6BIT5BIT4 //用于AD9851的控制线

P6SELBIT1 //P6.1设置为DAC12转换数字量输入 P7SELBIT3 P7DIRampBIT3 //P7.3

用于TA1的TA1CCR2捕获输入端CCI2B测量低频段的频率 P7DIRBIT4BIT5

//P7.4.p7.5作为FPGA的控制端LDCLK P7DIRampBIT7 //P7.7设置为输入读取FPGA

所测的频率值 P8DIR0xe0 //P8.7.6.5设置为输出用于控制12864的读写片选

P9DIR0xff //P9口设置成输出用于12864的数据口 P10DIR0x0f //P10.0.1.2用于控制

DAC7611P10.3用于输出串行数据 P11SEL0xff P11DIR0xff P7DIRBIT6 本程序主

要进行I/O口的初始化配置对于端口复用的口必须进行相应的设置包括输入输出复

用功能等相应的寄存器为后续控制外部电路打好硬件条件。 定时器初始化子程序

void TimerA0_Init //定时器A0初始化测脉宽 TA0CTLID_1TASSEL_2TACLR //定

时器时钟SMCLK 2分频清定时器 TA0CCTL1CM_3CCIS_0SCSCAP //TA0CCR2选

择捕获模式输入上升沿捕获同步捕获捕获输入口P1.2的CCI1A允许捕获中断

TA0EX0TAIDEX_7 //定时器时钟进一步8分频 为16MHz/161MHz TA0CTLMC_2 //

连续计数模式 void TimerA1_Init //定时器A1初始化测频率 4

TA1CTLID_0TASSEL_1TACLR //定时器时钟ACLK 清定时器

TA1CCTL2CM_1CCIS_1SCSCAP //TA1CCR2选择捕获模式输入上升沿捕获同步捕

获捕获输入口P7.3的CCI2B TA1EX0TAIDEX_7 //定时器时钟进一步8分频 为

32768/84096Hz TA1CTLMC_2 //连续计数模式 定时器分为A0A1两个需要使用时

必须对以上的寄存器进行相应的配置完成相应的模块功能包括定时中断PWM信号

产生。 DAC12初始化子程序 void ADC12_Initvoid ADC12CTL0ampADC12ENC

//ADC12初始化在ENC0下修改

DC12CTL0ADC12ONADC12REFONADC12REF2_5VADC12SHT0_0ADC12MSC //

开ADC12内核内部参考电压开启2.5开启采样定时器分频系数n4

ADC12CTL1ADC12CONSEQ_2ADC12SHP //ADC12内核时钟源MCLK选择单通道

多次转换模式SMAPCON由采样输入信号的上升沿触发采样定时器

ADC12MCTL0ADC12SREF_1ADC12INCH_1 //VrVref2.5vA1通道输入信号

ADC12IEBIT0 //ADC12IFG.0允许中断使能 ADC12CTL0ADC12ENC //允许ADC12

转化 使用内部的100Kps的12位模数转换器完成对外部电压信号的采集。 SPI口初

始化子程序 void SPI0_Initvoid //SPI模式初始化 UCA0CTL1UCSWRST //初始化

SPI0 UCA0CTL0UCMSTUCSYNCUCCKPHUCMSB //主机模式高位MSB先发 3线

同步模式 UCA0CTL1UCSSEL__ACLK //时钟源选择ACLK UCA0BR00x02 //

UCA0BR10x00 UCA0MCTL0x00 UCA0CTL1ampUCSWRST //SPI0使能 本程序初

始化实现SPI同步通信可以与外部带有SPI的器件进行通信。 5 要使msp430f5438正

常工作必须进行初始化配置一定要将5438_Init.h添加到main.c下即可。 第二章 液晶

模块 2.1液晶模块功能介绍 经过慎重的选择本来计划使用诺基亚5110作为显示设

备但是鉴于编程的容易性最终还是决定选上LCD12864作为液晶显示设备。本液晶自

带汉字库显示方便可以显示汉字数字可以进行任意的画点画坐标轴进行曲线波形频

谱坐标的显示等等。所以使用这款液晶来作为以后的显示模块。现将整个模块的控

制程序整理如下。 2.2液晶模块控制口定义 /12864液晶控制接口定义/ define lcddata

P9OUT //P9口作为数据口 define EH P8OUTBIT7 //P871 define EL P8OUTampBIT7

//P870 define RWH P8OUTBIT6 //P861 define RWL P8OUTampBIT6 //P860 define

RSH P8OUTBIT5 //P851 define RSL P8OUTampBIT5 //P850 以上各个口定义的是

LCD12864的控制线通过这些线控制12864的正常工作。 2.3液晶模块控制程序 液晶

模块的控制程序包括液晶初始化液晶读写数据写指令读取忙信号。 液晶写数据指令

子程序 void wr_lcduchar DATAuchar flog busy_lcd //10写数据 ifflog0RSL //flog0

为指令1为数据 else RSH RWL EH lcddataDATA //写入一个字节的数据或者指令 6

EL 本子程序主要完成对液晶进行数据的写入指令的写入完成和12864的正常通

信。 液晶读取数据指令 void wr_lcduchar DATAuchar flog busy_lcd //10写数据

ifflog0RSL //0为指令1为数据 else RSH RWL EH lcddataDATA EL 本子程序主要

完成读取液晶内部数据完成与单片机的通信。 液晶初始化子程序 void lcd_Initvoid

//12864液晶初始化 wr_lcd0x300 //功能设定为基本指令集 wr_lcd0x0c0 //开显示关

游标 0x08关显示 wr_lcd0x010 //清除显示 wr_lcd0x060 //设定游标移动方向 主要

完成对液晶的初始化设置使12864处于正常的工作模式。 液晶忙信号检测子程序

void busy_lcdvoid //检测液晶忙信号 P9DIRampBIT7 //数据口的P9.7设置为输入读

取忙信号 RSL RWH //01读忙信号 EH whileP9INamp0x80 //e高电平读入 EL

P9DIRBIT7 主要完成对液晶的忙信号读取最高位为1为忙直到信号为0即可正常工

作。 液晶清屏子程序 void clc_lcdvoid //12864清屏 wr_lcd0x300 7 wr_lcd0x010 //

清DDRAM 主要完成对液晶的清屏使液晶可以再次正常显示 2.3液晶模块功能实

现子程序 一下程序主要是通过以上的基础控制程序完成液晶模块的显示功能包括

显示字符串打点显示画图显示画波形。 指定汉字显示位置子程序 void

gotoxyunsigned char y unsigned char x //指定显示位置 ify1 wr_lcd0x80x0 //第一行

ify2 wr_lcd0x90x0 //第二行 ify3 wr_lcd0x80x80 //第三行 ify4 wr_lcd0x90x80 //第四

行 本程序主要完成对需要写入的字符串指定显示的具体位置。 字符串显示子程序

void showstruchar str //显示字符串程序 whilestr0 wr_lcdstr1 //写入数据 str 本

程序主要显示需要显示的字符串数组包括汉字字母数字等。 void displayszuchar

nuchar a //显示一个数组 uchar i fori0iltniwr_lcdai1 本程序主要对一个数字的各个

位上的量取出来之后送与液晶显示。 LCD12864液晶屏幕任意位置打点子程序 void

showpotuchar xuchar yuchar clor //打点x:0到127y:0到63 uchar LXLYLX_BIT 8

uchar DATAHDATAL LXx/16 LX_BITx16 //确定x坐标的具体位置 ifylt31 //在下半

平面 LY31-y LXLX8 else LY63-y wr_lcd0x360 //开扩展指令读取GDRAM数据

wr_lcdLY0x800 wr_lcdLX0x800 read_lcd DATAHread_lcd DATALread_lcd

wr_lcdLY0x800 wr_lcdLX0x800 ifclor1 ifLX_BITlt8

wr_lcdDATAH0x01ltlt7-LX_BIT1 //坐标在16数据的高位 wr_lcdDATAL1 else

wr_lcdDATAH1 wr_lcdDATAL0x01ltlt15-LX_BIT1 //坐标在16数据的低位 else

ifLX_BITlt8 wr_lcdDATAHamp0x01ltlt7-LX_BIT1 //坐标在16数据的高位

wr_lcdDATAL1 else wr_lcdDATAH1 wr_lcdDATALamp0x01ltlt15-LX_BIT1 //坐

标在16数据的低位 wr_lcd0x300 9 本程序主要辅助后面的画线画波形等子程

序。 水平垂直画线子程序 void showlinexuchar x0uchar x1uchar y0 //画水平线X

uchar i forix0iltx1i showpotiy01 void showlineyuchar x0uchar y0uchar y1 //画水平线

Y uchar i foriy0ilty1i showpotx0i1 本子程序主要完成12864的画线功能可以任意

画出坐标轴方便波形的显示 图像显示子程序 void showpictureuchar bmp //显示图像

uchar ij wr_lcd0x340 //开扩展指令 forj0jlt32j //上半平面 wr_lcd0x80j0 //写垂直坐

标 wr_lcd0x800 fori0ilt16i wr_lcdbmp1 //依次写入高低字节数据 forj0jlt32j //下半

平面 wr_lcd0x80j0 //写垂直坐标 wr_lcd0x880 fori0ilt16i wr_lcdbmp1 //依次写入高

低字节数据 wr_lcd0x360 //开画图显示 wr_lcd0x300 //基本指令 本程序主要用

于图像的显示像素为12864。 使用LCD12864模块只需添加LDD12864.h到main.c下即

可。 10 第三章 4X4按键模块 3.1 按键模块功能介绍 本键盘为4X4矩阵键盘模块

通过8根数据线进行按键的处理本按键主要通过5438单片机的P2口作为数据口通过

中断读取键值处理相应的程序。 3.2 按键模块接口定义 本键盘的数据口为P2口P2

的高4位接上拉电阻接行线。低4位接列线。采用中断触发的方式来进行键盘的扫描

减少了CPU的运行负担。 3.3 按键模块控制子程序 键盘中断处理子程序 pragma

vectorPORT2_VECTOR //P2口按键中断处理 __interrupt void PORT2_INTvoid

ifP2INamp0xf00xf0 delay1ms10 //延时去抖动 ifP2INamp0xf00xf0scankey

P2IFG0x00 //清楚中断标志 本程序主要是处理P2口高4位的下降沿中断一旦发生

中断即出现按键通过延时确认按键后送按键扫描读取键值处理程序。 按键扫描处理

子程序 void scankeyvoid uchar key P2OUT0xfe //扫描第一行 keyP2IN switchkey

case 0xee:TA0CCR0499break case 0xde:TA0CCR1TA0CCR1TA0CCR010.02break

case 0xbe:TA0CCR1TA0CCR1-TA0CCR010.02break 11 case

0x7e:FreFre1000000wr_AD9851Frebreak P2OUT0xfd //扫描第二行 keyP2IN

switchkey case 0xed:break case 0xdd:break case 0xbd:break case 0x7d:break

P2OUT0xfb //扫描第三行 keyP2IN switchkey case 0xeb:break case 0xdb:break case

0xbb:break case 0x7b:break P2OUT0xf7 //扫描第四行 keyP2IN switchkey case

0xe7:break case 0xd7:break case 0xb7:break case 0x77:break P2OUT0xf0 //键盘复位

设置为等待下次按键 本程序主要完成按键的键值扫描确定K0到KF的键值编码可

以在对应的键码下面处理其他程序方便的实现按键的程序处理。 使用本按键模块只

需将scankey.h添加到main.c下即可 12 第四章AD9851DDS模块 4.1 AD9851DDS模

块功能介绍 AD9851为集成的DDS芯片可以通过串行并行进行通信工作频率可以倍

频到180MHz可以产生40MHz不失真正弦波5MHz不失真方波占空比可调。 4.2

AD9851DDS模块接口 定义 /AD9851接口定义并行/ define AD9851_DATA

P4OUT //P4口作为数据口 define FQ_UDH P5OUTBIT6 define FQ_UDL

P5OUTampBIT6 //频率刷新P5.6 define RESETH P5OUTBIT5 define RESETL

P5OUTampBIT5 //复位线P5.5 define W_CLKH P5OUTBIT4 define W_CLKL

P5OUTampBIT4 //W_CLK时钟线P5.4 //define D7H P3OUTBIT4 //P3.7输出高电平

//define D7L P3OUTampBIT4 //P3.7写入低电平 uchar W50 //用于存储5个频率字节

以上各个口以P4口作为并行数据的通信口控制线为CLKFD_UDRESET.主要完成频

率字的写入和频率的更新。 4.3 AD9851模块控制子程序 AD9851上电初始化程序

void AD9851_Init //AD9851初始化 RESETH //高电平复位 delay1ms10//延时10ms

进行清寄存器 RESETL W_CLKL FQ_UDL 13 主要完成AD9851的初始化设置使

它可以准确的接受频率字实现频率的输出。 AD9851频率输出控制函数 void

wr_AD9851ulong fre double zsxs ulong word //频率字 zsfre23 //算出整数部分 xs

fre0.86092942 //算出小数部分 系数232/CLK clk180MHz zsxszs //整数修正后的小

数 wordzs/1 //换成整型得到频率字 W00x01 //开六倍频 W1wordgtgt24

W2wordgtgt16amp0xff W3wordgtgt8amp0xff W4wordamp0xff W_CLKL FQ_UDL

AD9851_DATAW0 W_CLKH W_CLKL AD9851_DATAW1 W_CLKH W_CLKL

AD9851_DATAW2 W_CLKH W_CLKL AD9851_DATAW3 W_CLKH W_CLKL

AD9851_DATAW4 //写入5个频率字 W_CLKH W_CLKL FQ_UDH FQ_UDL 本程

序主要通过写入所需频率的大小函数参量fre之后就可以得到所需要的频率。

使用AD9851模块只需将AD9851.h添加到main.c下即可。 14 第五章DAC7611模块

5.1 DAC7611模块功能介绍 本模块主要是实现DA转换DAC7611是12位的串行控制

的数模转换器可以以1mv?浇涑瞿D饬渴迪质挚刂颇D馄骷?5.2 DAC7611模

块接口定义 /DAC7611控制线/ define DAC12_CSH P10OUTBIT3 define

DAC12_CSL P10OUTampBIT3 //片选信号P10.3低电平有.

2024年5月25日发(作者:殳胜)

1 目录 第一章msp430f5438初始化模块 ................................................ 2 1.1

msp430f5438初始化模块介绍 ............................................ 2 1.2 msp430f5438初始化模

块子程序 .......................................... 2 第二章 液晶模

块 ............................................................. 5 2.1液晶模块功能介

绍 .................................................... 5 2.2液晶模块控制口定

义 .................................................... 5 2.3液晶模块控制程

序 ...................................................... 5 2.3液晶模块功能实现子程

序 ................................................ 7 第三章 4X4按键模

块 ........................................................ 10 3.1 按键模块功能介

绍 .................................................... 10 3.2 按键模块接口定

义 .................................................... 10 3.3 按键模块控制子程

序 .................................................. 10 第四章AD9851DDS模

块 ....................................................... 12 4.1 AD9851DDS模块功能介

绍 ............................................... 12 4.2 AD9851DDS模块接口 定

义 .............................................. 12 4.3 AD9851模块控制子程

序 ................................................ 12 第五章DAC7611模

块 ......................................................... 14 5.1 DAC7611模块功能介

绍 ................................................. 14 5.3 DAC7611模块控制子程

序 ............................................... 14 第六章FPGA测频模

块 ........................................................ 16 6.1 FPGA测频模块功能介

绍 ................................................ 16 6.2 FPGA测频模块接口定

义 ................................................ 16 6.3 FPGA模块控制子程

序 .................................................. 16 第七章DAC8811模

块 ......................................................... 18 7.1 DAC8811模块功能介

绍 ................................................. 18 7.2 DAC8811模块接口定

义 ................................................. 18 7.3 DAC8811模块控制子程

序 ............................................... 18 第八章 简易频谱仪程序解

析 .................................................. 20 8.1简易频谱仪程序模块功能介

绍 ............................................. 20 8.2简易频谱仪程序模块流程图介

绍 ........................................... 21 8.3简易频谱仪程序主功能模块介

绍 ........................................... 22 2 第一章msp430f5438初始化模块 1.1 msp430f5438

初始化模块介绍 本模块主要完成msp430f5438的各个基础模块的初始化配置使5438

工作在所需要的工作条件下通过配置内部的各个寄存器来进行设置。主要完成了的

基础配置包括时钟模块I/O口模块定时器模块ADC12模块SPI口模块。 1.2

msp430f5438初始化模块子程序 定时器模块初始化子程序 void CLK_Initvoid //时

钟初始化配置 uint i P5SELBIT2BIT3 //P5.2.3口选择连接XT2 P7SELBIT0BIT1

//P7.0.1口选择连接XT1 UCSCTL00x0000 //方便自带调节 UCSCTL1DCORSEL_5 //

选择DC0工作范围 UCSCTL2FLLD_1374 //DCOCLK分频

D2N1375DCOCLkDN1DCOREFCLk/n UCSCTL3FLLREFDIV_1 //选择DCO参

考频率为n2 UCSCTL6ampXT1OFFXT2OFF // 开XT1XT2 UCSCTL6XCAP_3 //配置

XT1内部电容12Pf UCSCTL6XT2DRIVE_2 //增大XT2的驱动能力

whileSFRIFG1ampOFIFG0 SFRIFG1ampOFIFG //清除振荡器错误标志位

UCSCTL7ampXT2OFFGXT1LFOFFGXT1HFOFFG DCOFFG //清除XT1XT2DCO 错

误标志位 fori0xffigt0i-- UCSCTL4SELA_0SELS_5SELM_5 //ACLK选择

XT132768HzSMCLKXT2MCLKXT2 为16MHz UCSCTL5DIVS_0DIVM_0 本模块

主要完成对MCLKSMCLKACLK。即系统时钟子系统时钟辅助时钟的配置通过设定

相应的寄存器位来使msp430f5438工作在硬件所需要的条件下。 I/0口初始化配置子

程序 3 void PORT_Initvoid //I/O口初始化配置 P1SELBIT2 P1DIRampBIT2 //P1.2

设置为TA0的CCI1A输入测脉宽 P2DIR0x0f //P2低四位设置为输出 P2REN0xf0 //P2

口电阻上拉 P2OUT0xf0 //P2高位拉高 P2IES0xf0 //P2高四位下降沿中断

P2IFG0x00 //P2中断标志清零 P2IE0xf0 //P2口高四位中断使能 P4DIR0xff //P4口用

于AD9851并行数据输出口 P5DIRBIT6BIT5BIT4 //用于AD9851的控制线

P6SELBIT1 //P6.1设置为DAC12转换数字量输入 P7SELBIT3 P7DIRampBIT3 //P7.3

用于TA1的TA1CCR2捕获输入端CCI2B测量低频段的频率 P7DIRBIT4BIT5

//P7.4.p7.5作为FPGA的控制端LDCLK P7DIRampBIT7 //P7.7设置为输入读取FPGA

所测的频率值 P8DIR0xe0 //P8.7.6.5设置为输出用于控制12864的读写片选

P9DIR0xff //P9口设置成输出用于12864的数据口 P10DIR0x0f //P10.0.1.2用于控制

DAC7611P10.3用于输出串行数据 P11SEL0xff P11DIR0xff P7DIRBIT6 本程序主

要进行I/O口的初始化配置对于端口复用的口必须进行相应的设置包括输入输出复

用功能等相应的寄存器为后续控制外部电路打好硬件条件。 定时器初始化子程序

void TimerA0_Init //定时器A0初始化测脉宽 TA0CTLID_1TASSEL_2TACLR //定

时器时钟SMCLK 2分频清定时器 TA0CCTL1CM_3CCIS_0SCSCAP //TA0CCR2选

择捕获模式输入上升沿捕获同步捕获捕获输入口P1.2的CCI1A允许捕获中断

TA0EX0TAIDEX_7 //定时器时钟进一步8分频 为16MHz/161MHz TA0CTLMC_2 //

连续计数模式 void TimerA1_Init //定时器A1初始化测频率 4

TA1CTLID_0TASSEL_1TACLR //定时器时钟ACLK 清定时器

TA1CCTL2CM_1CCIS_1SCSCAP //TA1CCR2选择捕获模式输入上升沿捕获同步捕

获捕获输入口P7.3的CCI2B TA1EX0TAIDEX_7 //定时器时钟进一步8分频 为

32768/84096Hz TA1CTLMC_2 //连续计数模式 定时器分为A0A1两个需要使用时

必须对以上的寄存器进行相应的配置完成相应的模块功能包括定时中断PWM信号

产生。 DAC12初始化子程序 void ADC12_Initvoid ADC12CTL0ampADC12ENC

//ADC12初始化在ENC0下修改

DC12CTL0ADC12ONADC12REFONADC12REF2_5VADC12SHT0_0ADC12MSC //

开ADC12内核内部参考电压开启2.5开启采样定时器分频系数n4

ADC12CTL1ADC12CONSEQ_2ADC12SHP //ADC12内核时钟源MCLK选择单通道

多次转换模式SMAPCON由采样输入信号的上升沿触发采样定时器

ADC12MCTL0ADC12SREF_1ADC12INCH_1 //VrVref2.5vA1通道输入信号

ADC12IEBIT0 //ADC12IFG.0允许中断使能 ADC12CTL0ADC12ENC //允许ADC12

转化 使用内部的100Kps的12位模数转换器完成对外部电压信号的采集。 SPI口初

始化子程序 void SPI0_Initvoid //SPI模式初始化 UCA0CTL1UCSWRST //初始化

SPI0 UCA0CTL0UCMSTUCSYNCUCCKPHUCMSB //主机模式高位MSB先发 3线

同步模式 UCA0CTL1UCSSEL__ACLK //时钟源选择ACLK UCA0BR00x02 //

UCA0BR10x00 UCA0MCTL0x00 UCA0CTL1ampUCSWRST //SPI0使能 本程序初

始化实现SPI同步通信可以与外部带有SPI的器件进行通信。 5 要使msp430f5438正

常工作必须进行初始化配置一定要将5438_Init.h添加到main.c下即可。 第二章 液晶

模块 2.1液晶模块功能介绍 经过慎重的选择本来计划使用诺基亚5110作为显示设

备但是鉴于编程的容易性最终还是决定选上LCD12864作为液晶显示设备。本液晶自

带汉字库显示方便可以显示汉字数字可以进行任意的画点画坐标轴进行曲线波形频

谱坐标的显示等等。所以使用这款液晶来作为以后的显示模块。现将整个模块的控

制程序整理如下。 2.2液晶模块控制口定义 /12864液晶控制接口定义/ define lcddata

P9OUT //P9口作为数据口 define EH P8OUTBIT7 //P871 define EL P8OUTampBIT7

//P870 define RWH P8OUTBIT6 //P861 define RWL P8OUTampBIT6 //P860 define

RSH P8OUTBIT5 //P851 define RSL P8OUTampBIT5 //P850 以上各个口定义的是

LCD12864的控制线通过这些线控制12864的正常工作。 2.3液晶模块控制程序 液晶

模块的控制程序包括液晶初始化液晶读写数据写指令读取忙信号。 液晶写数据指令

子程序 void wr_lcduchar DATAuchar flog busy_lcd //10写数据 ifflog0RSL //flog0

为指令1为数据 else RSH RWL EH lcddataDATA //写入一个字节的数据或者指令 6

EL 本子程序主要完成对液晶进行数据的写入指令的写入完成和12864的正常通

信。 液晶读取数据指令 void wr_lcduchar DATAuchar flog busy_lcd //10写数据

ifflog0RSL //0为指令1为数据 else RSH RWL EH lcddataDATA EL 本子程序主要

完成读取液晶内部数据完成与单片机的通信。 液晶初始化子程序 void lcd_Initvoid

//12864液晶初始化 wr_lcd0x300 //功能设定为基本指令集 wr_lcd0x0c0 //开显示关

游标 0x08关显示 wr_lcd0x010 //清除显示 wr_lcd0x060 //设定游标移动方向 主要

完成对液晶的初始化设置使12864处于正常的工作模式。 液晶忙信号检测子程序

void busy_lcdvoid //检测液晶忙信号 P9DIRampBIT7 //数据口的P9.7设置为输入读

取忙信号 RSL RWH //01读忙信号 EH whileP9INamp0x80 //e高电平读入 EL

P9DIRBIT7 主要完成对液晶的忙信号读取最高位为1为忙直到信号为0即可正常工

作。 液晶清屏子程序 void clc_lcdvoid //12864清屏 wr_lcd0x300 7 wr_lcd0x010 //

清DDRAM 主要完成对液晶的清屏使液晶可以再次正常显示 2.3液晶模块功能实

现子程序 一下程序主要是通过以上的基础控制程序完成液晶模块的显示功能包括

显示字符串打点显示画图显示画波形。 指定汉字显示位置子程序 void

gotoxyunsigned char y unsigned char x //指定显示位置 ify1 wr_lcd0x80x0 //第一行

ify2 wr_lcd0x90x0 //第二行 ify3 wr_lcd0x80x80 //第三行 ify4 wr_lcd0x90x80 //第四

行 本程序主要完成对需要写入的字符串指定显示的具体位置。 字符串显示子程序

void showstruchar str //显示字符串程序 whilestr0 wr_lcdstr1 //写入数据 str 本

程序主要显示需要显示的字符串数组包括汉字字母数字等。 void displayszuchar

nuchar a //显示一个数组 uchar i fori0iltniwr_lcdai1 本程序主要对一个数字的各个

位上的量取出来之后送与液晶显示。 LCD12864液晶屏幕任意位置打点子程序 void

showpotuchar xuchar yuchar clor //打点x:0到127y:0到63 uchar LXLYLX_BIT 8

uchar DATAHDATAL LXx/16 LX_BITx16 //确定x坐标的具体位置 ifylt31 //在下半

平面 LY31-y LXLX8 else LY63-y wr_lcd0x360 //开扩展指令读取GDRAM数据

wr_lcdLY0x800 wr_lcdLX0x800 read_lcd DATAHread_lcd DATALread_lcd

wr_lcdLY0x800 wr_lcdLX0x800 ifclor1 ifLX_BITlt8

wr_lcdDATAH0x01ltlt7-LX_BIT1 //坐标在16数据的高位 wr_lcdDATAL1 else

wr_lcdDATAH1 wr_lcdDATAL0x01ltlt15-LX_BIT1 //坐标在16数据的低位 else

ifLX_BITlt8 wr_lcdDATAHamp0x01ltlt7-LX_BIT1 //坐标在16数据的高位

wr_lcdDATAL1 else wr_lcdDATAH1 wr_lcdDATALamp0x01ltlt15-LX_BIT1 //坐

标在16数据的低位 wr_lcd0x300 9 本程序主要辅助后面的画线画波形等子程

序。 水平垂直画线子程序 void showlinexuchar x0uchar x1uchar y0 //画水平线X

uchar i forix0iltx1i showpotiy01 void showlineyuchar x0uchar y0uchar y1 //画水平线

Y uchar i foriy0ilty1i showpotx0i1 本子程序主要完成12864的画线功能可以任意

画出坐标轴方便波形的显示 图像显示子程序 void showpictureuchar bmp //显示图像

uchar ij wr_lcd0x340 //开扩展指令 forj0jlt32j //上半平面 wr_lcd0x80j0 //写垂直坐

标 wr_lcd0x800 fori0ilt16i wr_lcdbmp1 //依次写入高低字节数据 forj0jlt32j //下半

平面 wr_lcd0x80j0 //写垂直坐标 wr_lcd0x880 fori0ilt16i wr_lcdbmp1 //依次写入高

低字节数据 wr_lcd0x360 //开画图显示 wr_lcd0x300 //基本指令 本程序主要用

于图像的显示像素为12864。 使用LCD12864模块只需添加LDD12864.h到main.c下即

可。 10 第三章 4X4按键模块 3.1 按键模块功能介绍 本键盘为4X4矩阵键盘模块

通过8根数据线进行按键的处理本按键主要通过5438单片机的P2口作为数据口通过

中断读取键值处理相应的程序。 3.2 按键模块接口定义 本键盘的数据口为P2口P2

的高4位接上拉电阻接行线。低4位接列线。采用中断触发的方式来进行键盘的扫描

减少了CPU的运行负担。 3.3 按键模块控制子程序 键盘中断处理子程序 pragma

vectorPORT2_VECTOR //P2口按键中断处理 __interrupt void PORT2_INTvoid

ifP2INamp0xf00xf0 delay1ms10 //延时去抖动 ifP2INamp0xf00xf0scankey

P2IFG0x00 //清楚中断标志 本程序主要是处理P2口高4位的下降沿中断一旦发生

中断即出现按键通过延时确认按键后送按键扫描读取键值处理程序。 按键扫描处理

子程序 void scankeyvoid uchar key P2OUT0xfe //扫描第一行 keyP2IN switchkey

case 0xee:TA0CCR0499break case 0xde:TA0CCR1TA0CCR1TA0CCR010.02break

case 0xbe:TA0CCR1TA0CCR1-TA0CCR010.02break 11 case

0x7e:FreFre1000000wr_AD9851Frebreak P2OUT0xfd //扫描第二行 keyP2IN

switchkey case 0xed:break case 0xdd:break case 0xbd:break case 0x7d:break

P2OUT0xfb //扫描第三行 keyP2IN switchkey case 0xeb:break case 0xdb:break case

0xbb:break case 0x7b:break P2OUT0xf7 //扫描第四行 keyP2IN switchkey case

0xe7:break case 0xd7:break case 0xb7:break case 0x77:break P2OUT0xf0 //键盘复位

设置为等待下次按键 本程序主要完成按键的键值扫描确定K0到KF的键值编码可

以在对应的键码下面处理其他程序方便的实现按键的程序处理。 使用本按键模块只

需将scankey.h添加到main.c下即可 12 第四章AD9851DDS模块 4.1 AD9851DDS模

块功能介绍 AD9851为集成的DDS芯片可以通过串行并行进行通信工作频率可以倍

频到180MHz可以产生40MHz不失真正弦波5MHz不失真方波占空比可调。 4.2

AD9851DDS模块接口 定义 /AD9851接口定义并行/ define AD9851_DATA

P4OUT //P4口作为数据口 define FQ_UDH P5OUTBIT6 define FQ_UDL

P5OUTampBIT6 //频率刷新P5.6 define RESETH P5OUTBIT5 define RESETL

P5OUTampBIT5 //复位线P5.5 define W_CLKH P5OUTBIT4 define W_CLKL

P5OUTampBIT4 //W_CLK时钟线P5.4 //define D7H P3OUTBIT4 //P3.7输出高电平

//define D7L P3OUTampBIT4 //P3.7写入低电平 uchar W50 //用于存储5个频率字节

以上各个口以P4口作为并行数据的通信口控制线为CLKFD_UDRESET.主要完成频

率字的写入和频率的更新。 4.3 AD9851模块控制子程序 AD9851上电初始化程序

void AD9851_Init //AD9851初始化 RESETH //高电平复位 delay1ms10//延时10ms

进行清寄存器 RESETL W_CLKL FQ_UDL 13 主要完成AD9851的初始化设置使

它可以准确的接受频率字实现频率的输出。 AD9851频率输出控制函数 void

wr_AD9851ulong fre double zsxs ulong word //频率字 zsfre23 //算出整数部分 xs

fre0.86092942 //算出小数部分 系数232/CLK clk180MHz zsxszs //整数修正后的小

数 wordzs/1 //换成整型得到频率字 W00x01 //开六倍频 W1wordgtgt24

W2wordgtgt16amp0xff W3wordgtgt8amp0xff W4wordamp0xff W_CLKL FQ_UDL

AD9851_DATAW0 W_CLKH W_CLKL AD9851_DATAW1 W_CLKH W_CLKL

AD9851_DATAW2 W_CLKH W_CLKL AD9851_DATAW3 W_CLKH W_CLKL

AD9851_DATAW4 //写入5个频率字 W_CLKH W_CLKL FQ_UDH FQ_UDL 本程

序主要通过写入所需频率的大小函数参量fre之后就可以得到所需要的频率。

使用AD9851模块只需将AD9851.h添加到main.c下即可。 14 第五章DAC7611模块

5.1 DAC7611模块功能介绍 本模块主要是实现DA转换DAC7611是12位的串行控制

的数模转换器可以以1mv?浇涑瞿D饬渴迪质挚刂颇D馄骷?5.2 DAC7611模

块接口定义 /DAC7611控制线/ define DAC12_CSH P10OUTBIT3 define

DAC12_CSL P10OUTampBIT3 //片选信号P10.3低电平有.

发布评论

评论列表 (0)

  1. 暂无评论