单片机MSP4305299实验程序_第1页
单片机MSP4305299实验程序_第2页
单片机MSP4305299实验程序_第3页
单片机MSP4305299实验程序_第4页
单片机MSP4305299实验程序_第5页
已阅读5页,还剩8页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、.实验一 熟悉 CCS 编译环境实验目的:熟悉 CCS 编译环境,学习CCS 中新建工程,编译调试程序,观察变量窗口,设置断点等实验内容与步骤:1. 在 CCSv5 中新建工程,指定MSP430F5529 芯片;2. 在 main.c 中键入以下程序段3.#include void main(void)volatile unsigned int i;WDTCTL = WDTPW+WDTHOLD; / Stop WDTP1DIR |= BIT0; / P1.0 set as outputwhile(1) / continuous loopP1OUT = BIT0; / XOR P1.0for(i

2、=50000;i0;i-); / Delay4. 编译 Build 工程;5. 下载调试 Debug 工程;6. 在调试环境下选择全部运行,观察记录实验板上的现象;7. 选择单步运行,观察记录每条指令执行时的现象;8. 选择单步运行,观察寄存器 P1DIR,P1OUT 中数据的变化;9. 停止调试,返回到编辑环境,在程序中设置断点运行;实验二 简单输入输出实验实验目的:学习MPS430 通用输入输出端口GPIO 的操作,掌握CCS 中建立工程编辑调试的过程。实验内容与步骤:1. 端口输出点亮指定 LED 或闪烁(软件延时),按键控制交替点亮或熄灭LED编写程序指定端口输出方向,控制指示灯LED

3、1 或LED2 或LED3 闪烁#include void main(void) volatile unsigned int i; WDTCTL = WDTPW+WDTHOLD; / Stop WDT P8DIR |= BIT2; / P8.2 set as output while(1) / continuous loop P8OUT = BIT2; / XOR P8.2 for(i=50000;i0;i-); / Delay 2. 编写程序指定端口输出方向,控制指示灯LED4 或LED5 或LED6 交替点亮,如:LED4 亮,LED5和LED6 灭,然后LED5 亮,LED4 和LED6

4、 灭,然后LED6 亮,LED4 和LED5 灭,按此顺序循#include void main(void) volatile unsigned int i; WDTCTL = WDTPW+WDTHOLD; / Stop WDT P1DIR |= BIT1; / P1.1 set as output P1DIR |= BIT2; / P1.2 set as output P1DIR |= BIT3; / P1.3 set as output while(1) / continuous loop P1OUT &= BIT1; / XOR P1.1 P1OUT = BIT1; / OR P1.1

5、for(i=50000;i0;i-); / Delay P1OUT &= BIT2; / XOR P1.2 P1OUT = BIT2; / OR P1.2 for(i=50000;i0;i-); / Delay P1OUT &= BIT3; / XOR P1.3 P1OUT = BIT3; / OR P1.3 for(i=50000;i0;i-); / Delay 333333333333333333333333333333333333#include void main(void) WDTCTL = WDTPW + WDTHOLD; P1DIR |= BIT1; P1OUT &= BIT1;

6、 P1REN |= BIT7; P1OUT |= BIT7; P1IES |= BIT7; P1IFG &= BIT7; P1IE |= BIT7; while(1) _EINT(); / P1.0 = toggle / Toggle between H-L and L-H transition triggers P1IE |= BIT7; / Enable port interrupt / Port 1 interrupt service routine#pragma vector=PORT1_VECTOR_interrupt void Port_1(void)P1OUT = BIT1; P

7、1IFG &= BIT7; / Clear P1.4 IFG3. 检测按键 S1,按键按下时产生输入中断,设置变量NUM 记录按键次数。单步调试,观察变量NUM 数值的变化。4. 检测按键 S1,按键按下时中断,按键控制LED4 交替点亮或熄灭,即按键按一下LED4,按键再按一下LED4 灭,如此循环。#include unsigned int NUM=0;void main(void) WDTCTL = WDTPW + WDTHOLD; P1DIR |= BIT1; P1OUT &= BIT1; P1REN |= BIT7; P1OUT |= BIT7; P1IES |= BIT7; P1I

8、FG &= BIT7; P1IE |= BIT7; while(1) _EINT(); / P1.0 = toggle / Toggle between H-L and L-H transition triggers P1IE |= BIT7; / Enable port interrupt / Port 1 interrupt service routine#pragma vector=PORT1_VECTOR_interrupt void Port_1(void)P1OUT = BIT1;NUM+; P1IFG &= BIT7; / Clear P1.4 IFG实验三 液晶显示3. 显示变

9、量值,运算下面的程序段,Int a=1,b=2,sum=0;Sum=a+b;在液晶屏上显示下面的文字,并要求变量值修改时文字对应变化,“a=1B=2Sum=a+b=3”4. 绘制简单图形,在屏幕中央绘制水平线、垂直线和指定起止坐标的直线;绘制一个直角三角形、一个矩形、一个等边梯形和一个圆形;尝试将绘制的图形在屏幕上上移或下移;5. 调整液晶屏的对比度和亮度#include msp430f5529.h#include stdint.h#include HAL_Dogs102x6.hvoid calculate_display();void picture_display();int number

10、1=2; /定义a的值int number2=5; /定义b的值void main(void)WDTCTL = WDTPW + WDTHOLD;/关闭看门狗定时器Dogs102x6_init(); /LCD初始化Dogs102x6_backlightInit(); /背光初始化Dogs102x6_setBacklight(10); /设置LCD背光亮度Dogs102x6_clearScreen(); /清屏calculate_display(); /结果显示picture_display(); /图形显示while(1);/显示运算结果/void calculate_display()char

11、 s1=a=;char s2=b=;char s3=Sum=a+b=;Dogs102x6_clearScreen();Dogs102x6_stringDraw(1,4,s1,0); /显示“a=”Dogs102x6_charDraw(1,14,48+number1,0); /显示a的值,48为0的ASCII码值Dogs102x6_stringDraw(2,4,s2,0); /显示“b=”Dogs102x6_charDraw(2,14,48+number2,0); /显示b的值Dogs102x6_stringDraw(3,4,s3,0); /显示“Sum=a+b=”Dogs102x6_charD

12、raw(3,54,48+number2+number1,0); /显示Sum的值void picture_display()Dogs102x6_lineDraw(0,32,102,32,0); /画垂直水平线 Dogs102x6_lineDraw(51,0,51,64,0);Dogs102x6_circleDraw(40,20,10,0); /画圆Dogs102x6_lineDraw(20,40,30,40,0); /画矩形Dogs102x6_lineDraw(30,40,30,60,0);Dogs102x6_lineDraw(30,60,20,60,0);Dogs102x6_lineDraw

13、(20,60,20,40,0);Dogs102x6_lineDraw(80,10,80,30,0); /画直角三角形Dogs102x6_lineDraw(80,30,95,30,0);Dogs102x6_lineDraw(95,30,80,10,0);Dogs102x6_lineDraw(70,40,80,40,0); /画等腰梯形Dogs102x6_lineDraw(80,40,90,60,0);Dogs102x6_lineDraw(90,60,60,60,0);Dogs102x6_lineDraw(60,60,70,40,0);实验四 定时器1. 定时器 TA0 延时1s,点亮或熄灭LED

14、6,即灯亮1s 灭1s,如此循环,采用中断服务程序实现#include void main()WDTCTL = WDTPW + WDTHOLD; /停止看门狗P1DIR |= BIT3; /设置P1.0口方向为输出。TA0CCTL0 = CCIE; /设置捕获/比较控制寄存器中CCIE位为1,/CCR0捕获/比较功能中断为允许。TA0CCR0 = 30000; /捕获/比较控制寄存器CCR0初值为50000。TA0CTL = TASSEL_1 + MC_1+TACLR; /设置定时器A控制寄存器TACTL,/使时钟源选择为SMCLK辅助时钟。_BIS_SR(LPM0_bits +GIE); /

15、进入低功耗模式LPM0和开总中断/定时器A 中断服务程序区#pragma vector=TIMER0_A0_VECTOR_interrupt void Timer_A (void)P1OUT = BIT3; /P1.0取反输出TA0CCR0 = 30000; /重新载入CCR0捕获/比较数据寄存器数据,也可不用2. 定时器 TA0 延时1s,点亮或熄灭LED4,采用捕获比较器CCR0 的比较模式,设定输出方式,输出方波,不用中断服务程序#includemsp430f5529.h#include #include HAL_Board.hvoid main(void) WDTCTL = WDTPW

16、 + WDTHOLD; / Stop WDT TA0CCR0 = 32767; / PWM Period TA0CCTL0 = OUTMOD_4; / CCR1 reset/set P1DIR |= BIT1; / P1.1 output P1SEL |= BIT1; / P1.1 options select TA0CTL = TASSEL_1 + MC_1 + TACLR; / SMCLK, up mode, clear TAR _bis_SR_register(LPM0_bits); / Enter LPM0 _no_operation(); / For debugger3. 采用捕获比

17、较器 CCR1 的比较模式LED5,设定输出方式,输出PWM 波形,使LED 亮2s,灭1s。#include void main(void) WDTCTL = WDTPW + WDTHOLD; / Stop WDTTA0CCTL0=0x00;/comparator mode TA0CCR0 = 49151; / PWM Period TA0CCTL1 = OUTMOD_6; / CCR1 reset/set TA0CCR1 = 16384; / CCR1 PWM duty cycle P1DIR |= BIT2; / P1.2 output P1SEL |= BIT2; / P1.2 opt

18、ions select TA0CTL = TASSEL_1 + MC_1 + TACLR; / SMCLK, up mode, clear TAR _bis_SR_register(LPM0_bits); / Enter LPM0 _no_operation(); / For debugger4. 用定时器实现 30s 倒计时,在液晶模块上显示,每过一秒显示数字变化一次。#include #includeHAL_Dogs102x6.h volatile unsigned int flag=30;volatile unsigned int j;volatile unsigned int a;vo

19、latile unsigned int b;volatile unsigned int *f;void main(void) WDTCTL = WDTPW + WDTHOLD; TA0CTL = TASSEL_1 + MC_1 + TACLR + TAIE; / ACLK, contmode, clear TAR*const TA0CCR0 = 32767; / enable interrupt Dogs102x6_init(); Dogs102x6_backlightInit(); Dogs102x6_setBacklight(6); Dogs102x6_setContrast(15); D

20、ogs102x6_clearScreen(); _EINT(); while(1) a=flag/10+48;f=&a;Dogs102x6_charDraw(1,54,*f,0);b=flag%10+48;f=&b;Dogs102x6_charDraw(1,60,*f,0); #pragma vector=TIMER0_A1_VECTOR_interrupt void TIMER0_A1_ISR(void) switch(_even_in_range(TA0IV,14) case 0: break; / No interrupt case 2: break; / CCR1 not used c

21、ase 4: break; / CCR2 not used case 6: break; / reserved case 8: break; / reserved case 10: break; / reserved case 12: break; / reserved case 14: if(flag=0) flag=31; flag=flag-1; break; default: break; 实验五 A/D转换实验1.检测温度传感器电压MPS430F5529 片内集成有一温度传感器,它的输出送到ADC12 的A10 通道进行转换。编写程序读取AD 转换结果,并计算转换为温度值(可选择在液

22、晶屏上显示)。计算温度值,扩大10 倍,单片机在28.6下ADC12 采样值为746,选择此点进行校准。同时要将ADC12 采样值转换为电压值,1V 电压时,采样值为678。TEMP= (ADC12_Result-746)/(0.000355*678)+286;#include #includeHAL_Dogs102x6.hlong TEMP1=0,TEMP2=0;long y=60;int i;#define Num_of_Results 8volatile unsigned int resultsNum_of_Results; / Needs to be global in this /

23、example. Otherwise, the / compiler removes it because it / is not used for anything.void main(void) WDTCTL = WDTPW+WDTHOLD; / Stop watchdog timer /*/lcd Dogs102x6_init(); Dogs102x6_backlightInit(); Dogs102x6_setBacklight(6); Dogs102x6_setContrast(15); Dogs102x6_clearScreen(); /Dogs102x6_circleDraw(5

24、0,y,5,0);/画圆 Dogs102x6_stringDraw(7,0, made by scy, 0);/我的签名 /*/ P8DIR|=BIT0; P8OUT|=BIT0; P6DIR &= BIT5; P6SEL |= BIT5; / Enable A/D channel A5 ADC12CTL0 = ADC12ON+ADC12SHT00+ADC12MSC; / Turn on ADC12, set sampling time / set multiple sample conversion ADC12CTL1 = ADC12SHP+ADC12CONSEQ_2; / Use samp

25、ling timer, set mode ADC12MCTL0 = ADC12INCH_5; ADC12IE = 0x01; / Enable ADC12IFG.0 ADC12CTL0 |= ADC12ENC; / Enable conversions ADC12CTL0 |= ADC12SC; / Start conversion while (1) ADC12CTL0 |= ADC12SC; / Start sampling/conversion / Dogs102x6_clearScreen(); Dogs102x6_circleDraw(y,50,5,0);/画圆 / for(i=50

26、000;i0;i-); _bis_SR_register(LPM0_bits + GIE); / LPM0, ADC12_ISR will force exit _no_operation(); / For debugger #pragma vector=ADC12_VECTOR_interrupt void ADC12ISR (void) switch(_even_in_range(ADC12IV,34) case 0: break; / Vector 0: No interrupt case 2: break; / Vector 2: ADC overflow case 4: break;

27、 / Vector 4: ADC timing overflow case 6: / Vector 6: ADC12IFG0 TEMP2=TEMP1; TEMP1 = ADC12MEM0; / P1.0 = 0 if(TEMP1(TEMP2+8) y=y-10; Dogs102x6_clearScreen(); Dogs102x6_circleDraw(y,50,5,0); else if(TEMP1(TEMP2-8) y=y+10; Dogs102x6_clearScreen(); Dogs102x6_circleDraw(y,50,5,0); if(y=90)y=90; _bic_SR_r

28、egister_on_exit(LPM0_bits); case 8: break; / Vector 8: ADC12IFG1 case 10: break; / Vector 10: ADC12IFG2 case 12: break; / Vector 12: ADC12IFG3 case 14: break; / Vector 14: ADC12IFG4 case 16: break; / Vector 16: ADC12IFG5 case 18: break; / Vector 18: ADC12IFG6 case 20: break; / Vector 20: ADC12IFG7 c

29、ase 22: break; / Vector 22: ADC12IFG8 case 24: break; / Vector 24: ADC12IFG9 case 26: break; / Vector 26: ADC12IFG10 case 28: break; / Vector 28: ADC12IFG11 case 30: break; / Vector 30: ADC12IFG12 case 32: break; / Vector 32: ADC12IFG13 case 34: break; / Vector 34: ADC12IFG14 default: break; 2.检测齿轮电

30、位计电压开发板上的齿轮电位计连线如图所示,由 P8.0 输出高电平,齿轮转动带动滑片移动,触电2 处的电压变化,该电压送到ADC12 的A5 通道,读取ADC 结果,判断齿轮转动方向,使液晶屏上的一个圆左移或者右移。#include #includeHAL_Dogs102x6.hlong TEMP1=0,TEMP2=0;long y=60;int i;#define Num_of_Results 8volatile unsigned int resultsNum_of_Results; / Needs to be global in this / example. Otherwise, the

31、 / compiler removes it because it / is not used for anything.void main(void) WDTCTL = WDTPW+WDTHOLD; / Stop watchdog timer /*/lcd Dogs102x6_init(); Dogs102x6_backlightInit(); Dogs102x6_setBacklight(6); Dogs102x6_setContrast(15); Dogs102x6_clearScreen(); /Dogs102x6_circleDraw(50,y,5,0);/画圆 Dogs102x6_

32、stringDraw(7,0, made by scy, 0);/我的签名 /*/ P8DIR|=BIT0; P8OUT|=BIT0; P6DIR &= BIT5; P6SEL |= BIT5; / Enable A/D channel A5 ADC12CTL0 = ADC12ON+ADC12SHT00+ADC12MSC; / Turn on ADC12, set sampling time / set multiple sample conversion ADC12CTL1 = ADC12SHP+ADC12CONSEQ_2; / Use sampling timer, set mode AD

33、C12MCTL0 = ADC12INCH_5; ADC12IE = 0x01; / Enable ADC12IFG.0 ADC12CTL0 |= ADC12ENC; / Enable conversions ADC12CTL0 |= ADC12SC; / Start conversion while (1) ADC12CTL0 |= ADC12SC; / Start sampling/conversion / Dogs102x6_clearScreen(); Dogs102x6_circleDraw(y,50,5,0);/画圆 / for(i=50000;i0;i-); _bis_SR_register(LPM0_bits + GIE); / LPM0, ADC12_ISR will force exit _no_op

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论