MSP430单片机实验指导书
MSP430第六讲实验报告

一、实验内容:1. MSP430单片机的复位中断和低功耗模式2. 中断方式的按键控制实现3. Lab8 按键中断方式控制led灯的亮灭4. Lab9 动动手,P4.1中断方式控制P4.6的LED二、实验步骤:Lab8 按键中断方式控制led灯的亮灭设置端口4.0为输入上拉电阻方式获取按键信号,端口4.5为输出方式,按键按下时开启一次中断,中断开启后修改4.5输出对应的LED灯状态,从而实现按键中断方式控制led 灯的亮灭。
实现代码:#include <msp430.h>int main(void){WDTCTL = WDTPW + WDTHOLD; // Stop watchdog timerP4DIR |= BIT5; // Set P4.5 to output directionP4REN |= BIT0; // Enable P2.6 internal resistanceP4OUT |= BIT0; // Set P2.6 as pull‐Up resistanceP4IES |= BIT0; // P4.0 Hi/Lo edgeP4IFG &= ~BIT0; // P4.0 IFG clearedP4IE |= BIT0; // P P4.0 interrupt enabled__bis_SR_register(LPM4_bits + GIE); // Enter LPM4 w/interrupt__no_operation(); // For debugger }#pragma vector=PORT4_VECTOR__interrupt void Port_4(void){P4OUT ^= BIT5; // P4.5 = toggleP4IFG &= ~BIT0; // P4.0 IFG cleared }思考题:1、Lab8和Lab2的执行结果有何不同?为什么?答:Lab2的结果是按下按键则灯灭,松开按键灯亮;Lab8是按下按键灯亮\灭,抬起按键不改变状态。
MSP430实验

1、 熟悉实验板和 EW430 开发环境 要求: 能够连接仿真器、电源到实验板 能够创建工程、文件,熟练进行 C 程序和汇编程序的编译、连接
2、I/0 端口实验 要求:通过口线 P5.1 控制 LED3
3、设置、观测时钟频率 要求:设置时钟,使得 P1.1,P1.4 输出时钟频率为 ACLK*10,P1.5 输出为 ACLK
3、连通 J2,进行 I/O 实验
4、置DIP开关P6的SW6、DIP开关P5的SW1、开关P5的SW2为ON,观测时钟频率
五、分析与思考
1、 修改程序,使 MCLK = 4MHZ。
2、 在不使用 XT2 的情况下,MCLK 的最大频率可为多少?
3、 ACLK 有没有可能比 MCLK 的频率还要低?请说明原因。
六、实验参考代码
1.时钟实验参考代码(C 语言)
/******************************************************************
* 文件名称:
*
clock.c
* 文件说明:
* 通过实验,熟悉如何设置系统主时钟(MCLK)、辅助时钟(ACLK)、
*
四、实验步骤
1、设置 JTAG 与晶振对应的开关
2
MSP430-TEST44X 开发实验板实验
置 DIP 开关 P6 的 SW1、SW2 以及 DIP 开关 P7 的 SW4、SW3、SW2 为 ON
置 DIP 开关 P10 的 SW1,SW2 为 ON
2、打开实验板电源对应的开关
置 DIP 开关 P8 的 SW2、SW3、SW4 和 P9 的 SW5 为 ON
5
MSP430-TEST44X 开发实验板实验
msp430实验与程序

[ 实验目的]学会使用ADC12,DMA,TIMERB模块了解语音采集,以及PWM-DA工作原理。
[ 实验要求]1、编程要求:IAR4.11B C语言。
2、实现功能:录/放音。
3、实验现象:可进行17秒左右录/放音。
[ 实验原理]该实验的基本原理是:利用MIC 将声音信号转换成模拟的电信号,通过功放将该信号放大,利用ADC12 进行采集、转换成数字量,并且通过DMA 直接将转换数据送入FLASH 中进行存放。
在存放过程中通过LCD进行一定的信息提示,这就完成了整个录音过程。
放音过程中,则是通过提取存放在FLASH中的数据,通过计算得出PWM波占空比,利用TIMERB 输出PWM 波,再通过1 阶带通滤波器进行滤波,模拟出采集进来的模拟电信号,通过语音输出功放TPA301进行放大送给耳机输出接口。
因此整个的过程的基本框图如图4-4:图 4-4 语音基本框图在该实验中最需要注意的是,采样频率的设置。
根据奈奎斯特采样定理,采样频率必须大于被采样信号中最大频率分量频率的两倍,否则不能从信号采样中回复原始信号。
由于人耳听觉范围通常为20Hz到20KHz,如果要将所有声音都做一个非常精确的记录以及播___________放,很显然MCU的速度上无法支持。
但是做一个相对清晰语音记录的话,则采样频率仅仅需要11KHz(电话音质)。
为了采样数据的存放的方便,也由于采样频率本身就被限制在了11KHz,因此ADC12 在进行转换的时候精度要求就不那么高了,通过设置我们将ADC12DC 的转换精度改成8 位。
则每次进行采样的数据仅仅就是8 位,一个字节而已。
在采样的时候进行处理将两次采样的数据整合成一个字,存入FLAH中。
而MSP430F5438系列有256K的FLASH ROM,扣去一些预留空间,则有192K的空间来进行语音数据的存取。
则总共可记录语音时间:T = 192Kbyte/(11K/S*1byte)=17S电信号电信ADC 号FLASHTIMEBPWM波电信号DMA TB 带通1第131页共179页如果采样 12 位精度的AD 转换,则时间会大大减少而音质并不会因此而有太大的提高。
MSP430G2系列单片机原理与实践教程

MSP430G2系列单片机原理与实践教程完整版30 MSP-EXP430Launchpad实验指南前言MSP430G2系列是德州仪器近期推出的一款产品,在秉承MSP430超低功耗,高集成度的优点的同时,具有高性价比的特点。
该系列被称为ValueLine,旨在以8位单片机的价格实现16位单片机的性能。
MSP-EXP430Launchpad是TI推出的又一套用于MSP430和电路实验的开发板。
在该套不到名片大小的开发板上集成了一片超低功耗16位MSP430单片机,USB口仿真器电路以及各引脚接口等。
利用LaunchPad开发板,仅需一台笔记本电脑,就可以在基于图形界面的编程软件CCS上进行嵌入式软硬件系统的开发和调试,真正做到将实验室装进口袋里,让使用者可以随时随地,不受场地和设备的限制进行430的开发工作。
除了学生自主创新实践外,LaunchPad开发板还可以用于本科低年级课程,如嵌入式C语言,电子技术基础,微机原理,单片机等课程的自主实验环节以及课程设计。
该套开发板为单片机热爱者提供了一个很好的学习平台。
该实验指导书在Launchpad的基础上进行了功能模块的扩展,以期更好地进行实验教学和学习。
本书共有六章,分为两大部分。
第一部分为第1章至第3章,对MSP430G2系列单片机的外设进行介绍,CCSv5.1的安装和使用,同时给出了几个基于Launchpad的实际开发案例。
第二部分为第4章至第6章,对一体化实验系统以及各扩展模块的硬件电路进行了详细的介绍,在此基础上通过六个基础实验以及六个综合实验帮助读者更好地理解和掌握430的开发和应用。
由于时间和篇幅的原因,本书中第三章关于微控制器外设寄存器的更为详细的描述没有在此书中涉及,但包含在随书光盘的电子文档中,供有需要的读者阅读和参考。
该实验指导书、程序和相关教学材料由西安电子科技大学MSP430联合实验室赵建老师和TI单片机大学计划黄争经理共同策划和审阅,在编写过程中,联合实验室老师和同学付出了辛勤的劳动,在此表示衷心的感谢。
MSP430单片机基础实验手册

1、MSP430单片机基础实验1.1、IO口实验实验目的:学会MSP430单片机IO口的常规操作。
实验原理开发板上的3个LED灯和IO口的对应关系如下:POWER——P1.7 ISO14443A——P1.6 ISO15693——P1.4根据原理图分析,只需要将对应IO输出为低电平即可使其对应三极管导通,达到点亮对应LED的目的。
关键代码分析#include <msp430.h>volatile unsigned int i; // volatile to prevent optimizationint main(void){WDTCTL = WDTPW + WDTHOLD; // Stop watchdog timerP1DIR |= 0x80; // Set P1.7 to output directionfor (;;){P1OUT ^= 0x80; // Toggle P1.7 using exclusive-ORi = 50000; // Delaydo (i--);while (i != 0);}}对应工程详见:\感知RF2实验光盘2013\RFID技术实验\1-MSP430单片机基础实验\io实验结果POWER对应的LED灯闪烁。
作业1、对其他连个灯进行对应操作;2、流水灯显示编程控制。
1.2、定时器实验实验目的:学会MSP430单片机定时器常规配置及中断操作。
实验原理采用定时器TA溢出中断对LED灯进行取反操作。
关键代码分析#include <msp430.h>int main(void){WDTCTL = WDTPW + WDTHOLD; // Stop WDTP1DIR |= 0x80; // P1.0 outputTACCTL0 = CCIE; // TACCR0 interrupt enabledTACCR0 = 50000;TACTL = TASSEL_2 + MC_2; // SMCLK, contmode__bis_SR_register(LPM0_bits + GIE); // Enter LPM0 w/ interrupt}// Timer A0 interrupt service routine#pragma vector=TIMERA0_VECTOR__interrupt void Timer_A (void){P1OUT ^= 0x80; // Toggle P1.7TACCR0 += 50000; // Add Offset to TACCR0}对应工程详见\感知RF2实验光盘2013\RFID技术实验\1-MSP430单片机基础实验\timer实验结果LED灯快速闪烁,改变TACCR0值,闪烁时间间隔改变。
MSP430单片机实验报告

MSP430单片机实验报告--段式LCD显示1.实验介绍:实验演示了将ADC结果用段式LCD显示,并且还原输入电压也采用段式LCD显示。
ADC的结果可以通过ADC12MEM0的值来显示。
当程序运行时,LCD屏幕采用10进制显示出ADC12MEM0的值。
2.实验目的:a.熟悉IAR5.0软件开发环境的使用b.了解MSP430段式LCD的工作方式c.掌握MSP430段式LCD的编程方法3.实验原理:驱动LCD需要在段电极和公共电极上施加交流电压。
若只在电极上施加直流电压,液晶本身发生劣化。
解决这个问题的一般方法是使用短时也就驱动器,如MSP430F4xx系列单片机就集成有段式液晶驱动。
如果要在没有液晶驱动器的情况下使用段式液晶显示器,就要用到如图1所示电路。
图1中,A为电极信号输入端,控制该段液晶是否被点亮;B为交流方波信号输入端,将有一个固定频率的方波信号从此端输入;com为公共背极信号。
工作原理为;固定的方波信号被直接加载到液晶公共背极,同时该信号通过一个异或门加载到液晶段极。
当A端为低电平时,液晶的段极与公共背极将得到一个同相、同频率、同幅度的方波信号,液晶的两端始终保持没有电压差;当A端为高电平时,液晶的段极也公共背极将得到一个反相、同幅度、同频率的方波信号,液晶两端将保持一个交流的电压差。
这样既能使液晶保持点亮状态,又不会发生劣化而损坏液晶显示器。
图一.段式液晶驱动电路4.实验步骤:(1)将PC 和板载仿真器通过USB 线相连;5.实验现象:段式LCD显示屏显示的数字为002031,ADC12MEM0的值为07EF,其值为16进制,将其转换后值为2031与屏幕显示一致。
6.关键代码分析:#include <msp430x26x.h>#include "General_File.h"#include "I2C_Define.h"void I2C_Start(void){DIR_OUT;SDA_1;I2C_Delay();SCL_1;I2C_Delay();SDA_0;I2C_Delay();SCL_0;}//End I2C_Start/*函数名:I2C_Stop 功能:遵循I2C总线协议定义的停止*/void I2C_Stop(void){DIR_OUT;SDA_0;I2C_Delay();SCL_1;I2C_Delay();SDA_1;}//End I2C_Stop/* 函数名:I2C_ReceiveACK 功能:待接受ACK 信号,完成一次操作*/void I2C_Write_ACK( void ){SDA_1;DIR_IN;SCL_1;I2C_Delay();while(SDA_IN );SCL_0;I2C_Delay();DIR_OUT;return;}//End I2C_ReceiveACK/* 函数名:2C_Read_Ack 功能:接受数据后发送一个ACK信号*/void I2C_Read_Ack(void){DIR_OUT;SCL_0;SDA_0;I2C_Delay();SCL_1;I2C_Delay();SCL_0;SDA_1;}//End I2C_Read_Ack/* 函数名:I2C_Read_NoAck 功能:最后接受数据后发送NoACK信号*/void I2C_Read_NoAck( void ){DIR_OUT;SCL_0;SDA_1;I2C_Delay();SCL_1;I2C_Delay();SCL_0;}//End I2C_Read_Ack/* 函数名:I2C_Receiveuchar 功能:接受一个字节的数据*/uchar I2C_Receiveuchar(void){uchar Read_Data = 0x00; //返回值uchar DataBit = 0x00; //每一个clk 接受到的数据SCL_0;I2C_Delay();SDA_1;DIR_IN;for( uchar i = 0;i < 8;i++ ){SCL_1;I2C_Delay();DataBit = SDA_IN;SCL_0;I2C_Delay();I2C_Delay();Read_Data = ( ( Read_Data << 1 ) | DataBit ); //将数据依次存入Read_Data }return( Read_Data );}//End I2C_Receiveuchar/* 函数名:I2C_Senduchar 功能:遵循I2C总线协议定义发送一字节数据*/void I2C_Senduchar( uchar Wr_Data ){DIR_OUT;SCL_0;SDA_1;for( uchar i = 0;i < 8;i++ ){if( Wr_Data & 0x80 ){SDA_1; //最高位是否为1,为1则SDA= 1 }else{SDA_0; //否则SDA=0}I2C_Delay();SCL_1;I2C_Delay();SCL_0;I2C_Delay();Wr_Data <<= 1; //数据左移一位,进入下一轮送数}SDA_1;return;}//End I2C_Senduchar/************ BU9796FS相关指令定义**********/#define Write_Com 0x80#define Write_Data 0x00#define Display_ON 0x48#define Half_Bias 0x44#define Set_Reset 0x6A#define Ext_Clock 0x69#define Blink_Mode0 0x70#define Blink_Mode1 0x71#define Blink_Mode2 0x72#define Blink_Mode3 0x73#define Pixel_ON 0x7E#define Pixel_OFF 0x7D#define BU9796_Addr 0x7C#define Base_Add 0x00/************** 引用的外部函数*********************/extern void I2C_Start(void);extern void I2C_Stop(void);extern void I2C_Write_ACK(void);extern void I2C_Senduchar( uchar Wr_Data );/************** 定义段式LCD的阿拉伯数字码*********************/const uchar Num_Code[] ={0xAF, // 00x06, // 10x6D, // 20x4F, // 30xC6, // 40xCB, // 50xEB, // 60x0E, // 70xEF, // 80xCF, // 90x10, //. 如果要显示小数点,必须要将此值与下一位值相加0x88 //: ,包括LCD上的两个":"};uchar Disp_Data[]={ 5,5,7,3,1,5 };/* 函数名:Segment_Display 功能:段式LCD数据包写入服务程序,负责将一串字符送到段式LCD 上去显示*/void Segment_Display( const uchar Addr,const uchar *P_Data, uchar Length ){uchar User_Addr = Addr;I2C_Start(); //启动BU9796I2C_Senduchar( BU9796_Addr ); //写BU9796的物理地址I2C_Write_ACK();I2C_Senduchar( Base_Add + User_Addr * 2 ); //发送起始地址,下一个紧跟的是数据I2C_Write_ACK();for( uchar i = Length ;i > 0;i-- ){if( *P_Data != 0x0A ) // 显存中是否有小数点?如果有,就将小数点码值与下一位码值相加{I2C_Senduchar( Num_Code[ *P_Data++ ] );}else{uchar Temp_Disp_Data = Num_Code[ *P_Data++ ];I2C_Senduchar( Temp_Disp_Data + Num_Code[ *P_Data++ ]);i--;}I2C_Write_ACK();}I2C_Stop(); //访问结束}/* 函数名:Init_BU9796FS 功能:初始化驱动芯片BU9796的相关参数*/void Init_BU9796FS( void ){I2C_Start(); //启动BU9796I2C_Senduchar( BU9796_Addr ); //写BU9796的物理地址I2C_Write_ACK(); //等待ackI2C_Senduchar( Write_Com + Set_Reset); //启动软复位I2C_Write_ACK(); //等待ackI2C_Senduchar( Write_Com + Blink_Mode2 );I2C_Write_ACK();I2C_Senduchar( Write_Com + Display_ON ); //开显示I2C_Write_ACK();I2C_Senduchar( Write_Data + Base_Add ); //发送起始地址,下一个紧跟的是数据I2C_Write_ACK();for( uchar i = 0;i<10;i++ ) //清LCD显示屏{I2C_Senduchar( 0x00 );I2C_Write_ACK();}I2C_Stop(); //访问结束}/* 函数名:Init_MCU 功能:初始化MSP430的相关参数*/void Init_MCU( void ){/* WDTCTL = WDTPW + WDTHOLD; */ // 关看门狗BCSCTL3 |= XT2S_2; // XT2频率范围设置BCSCTL1 &= ~XT2OFF; // 打开XT2振荡器do{IFG1 &= ~OFIFG; // 清振荡器失效标志BCSCTL3 &= ~XT2OF; // 清XT2失效标志for( uint i = 0x47FF; i > 0; i-- ); // 等待XT2频率稳定}while (IFG1 & OFIFG); // 外部时钟源正常起动了吗?BCSCTL2 |= SELM_2 + SELS ; // 设置MCLK、SMCLK为XT2P4OUT &= ~BIT4;P4DIR |= BIT4; // 打开LCD显示部分的电源//P8REN |= BIT3 + BIT4;P8DIR |= BIT3 + BIT4; // 配置MSP430与BU9796的数据数P8OUT |= BIT3 + BIT4;P5OUT &= ~BIT7; // 点亮外部LEDP5DIR |= BIT7;}/* 函数名:main 功能:系统入口主函数*/void main( void ){WDTCTL = WDTPW + WDTHOLD; // 停看门狗ADC12CTL0 = SHT0_2 + ADC12ON; // 设置采样时间,开ADC12,Vref = V ACC ADC12CTL1 = SHP; // 使用定时器采样ADC12MCTL0 = INCH_1; // 选用A1通道ADC12IE = 0x01; // 开ADC12MCTL0中断ADC12CTL0 |= ENC; // 启动转换ADC12MCTL0 = INCH_1;P5DIR |= BIT7; // P5.7输出-LED/*for (;;){ADC12CTL0 |= ADC12SC; // 软件启动转换_BIS_SR(CPUOFF + GIE); // LPM0模式,由ADC12中断唤醒}*//* 功能:将16进制转化为10进制*/int a,b;a=ADC12MEM0;Disp_Data[5]=a%10;b=a/10;Disp_Data[4]=b%10;a=b/10;Disp_Data[3]=a%10;b=a/10;Disp_Data[2]=b%10;a=b/10;Disp_Data[1]=a%10;b=a/10;Disp_Data[0]=b%10;Init_MCU();Init_BU9796FS();P5OUT |= BIT7;Segment_Display( 0,Disp_Data,6 );_BIS_SR( CPUOFF );}#pragma vector=ADC12_VECTOR__interrupt void ADC12_ISR (void){ _BIC_SR_IRQ(CPUOFF); }。
msp430 TIMER实验报告.

Msp430系列单片机的定时器实验1.看门狗定时器(WDT)1.1实验介绍计数单元WDTCNT:不能直接通过软件存取,必须通过WDTCTL来控制。
控制寄存器WDTCTL高8位为口令:写5AH,读69H低8位为WDT操作的控制命令HOLD:停止看门狗定时器工作。
0 :激活;1 :停止WDTSSEL:时钟源选择TMSEL:工作模式选择。
0:看门狗;1 :定时CNTCL:该位为1时,WDTCNT清除IS2、IS1、IS0:选择看门狗定时器的定时长度1.2 实验目的学会使用看门狗定时器(WDT)。
熟悉WDT相关寄存器1.3 实验原理1.4 实验步骤(1) 将PC 和板载仿真器通过USB 线相连;(2) 打开CCS 集成开发工具,选择Project->Import Existing CCS Eclipse Project,导入MSP430F6638_DemoV2.0\11.WTD 文件夹中的工程;(3) 选择对该工程进行编译链接,生成.out 文件。
然后选择,将程序下载到实验板中。
程序下载完毕之后,可以选择全速运行程序,也可以选择单步调试程序,选择F3 查看具体函数。
也可以程序下载之后,按下,软件界面恢复到原编辑程序的画面。
再按下实验板的复位键,运行程序。
(调试方式下的全速运行和直接上电运行程序在时序有少许差别,建议上电运行程序)。
1.5 实验现象实验板上对应的LED灯以一定周期闪烁。
1.6 关键代码实验一:#include<msp430f6638.h>void main(void){volatile unsigned int i;volatile unsigned int count=0;WDTCTL = WDTPW+WDTHOLD; // Stop WDTP4DIR |= BIT1 + BIT2 + BIT3; // P4.1,P4.2,P4.3 set as outputP4OUT &= ~(BIT1 + BIT2 + BIT3); // P4.1,P4.2,P4.3 set "0"for (i=0;i<60000;i++) ; //延时大约60msP4OUT |= (BIT1 + BIT2 + BIT3); // P4.1,P4.2,P4.3 set "1"for (i=0;i<60000;i++) ; //延时大约60msWDTCTL=WDTPW+WDTIS_4; //启动看门狗while(1) ; // continuous loop}实验二:#include<msp430f6638.h>void main(void){volatile unsigned int i;volatile unsigned int count=0;WDTCTL = WDTPW+(WDTCTL&0xff)+WDTHOLD; // Stop WDTP4DIR |= BIT1 + BIT2 + BIT3; // P4.1,P4.2,P4.3 set as outputP4OUT &= ~(BIT1 + BIT2 + BIT3); // P4.1,P4.2,P4.3 set "0"for (i=0;i<60000;i++) ; //延时大约60msP4OUT |= (BIT1 + BIT2 + BIT3); // P4.1,P4.2,P4.3 set "1"for (i=0;i<60000;i++) ; //延时大约60msWDTCTL=WDTPW+(WDTCTL&0xff)-WDTHOLD; //启动看门狗while(1){// WDTCTL=WDTPW+WDTCTL&0xff+WDTCNTCL; //计数器清零};分析:实验一与实验二结果相同,只不过在每个周期结束启动看门狗定时器时修改的寄存器参数不同。
MSP430系列十六位超低功耗单片机教学实验系统实验教程

在这里.需要对低功耗问题作一些说明。 首先,对一个处理器而言,活动模式时的功耗必须与其性能一起来考察、衡量,忽略性能来看功耗是 片面的。在计算机体系结构中,是用 W/MIPS(瓦特/百万指令每秒)来衡量处理器的功耗与性能关系的, 这种标称方法是合理的。MSP430 系列单片机在活动模式时耗电 250uA/MIPS,这个指标是很高的(传统 的 Mcs51 单片机约为 10~20mA/MIPS)。 其次,作为一个应用系统,功耗是整个系统的功耗,而不 仅仅是处理器的功耗。比如,在一个有多个输入信号的应用系统中,处理器输入端口的漏电流对系统的耗 电影响就较大了。MSP430 单片机输入端口的漏电流最大为 50nA,远低于其他系列单片机(一般为 l~10uA)。 另外,处理器的功耗还要看它内部功能模块是否可以关闭.以及模块活动情况下的耗电.比如低电压 监测电路的耗电等。还要注意,有些单片机的某些参数指标中.虽然典型值可能很小,但最大值和典型值 相差数十倍,而设计时要考虑到最坏情况,就应该关心参数标称的最大值,而不是典型值。总体而言, MSP430 系列单片机堪称目前世界上功耗最低的单片机,其应用系统可以做到用一枚电池使用 10 年。
MSP430 系列单片机有独特的时钟系统设计,包括两个不同的时钟系统:基本时钟系统和锁频环(FLL 和 FLL+)时钟系统或 DCO 数字振荡器时钟系统。由时钟系统产生 CPU 和各功能模块所需的时钟,并且这 些时钟可以在指令的控制下打开或关闭,从而实现对总体功耗的控制。由于系统运行时使用的功能模块不 同,即采用不同的工作模式,芯片的功耗有明显的差异。在系统中共有种活动模式(AM)和 5 种低功耗模式 (LPM0~LPM4)。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
(4)写指令38H(不检测忙信号)。
(5)延时5ms。
(6)写指令38H(不检测忙信号)。
(7)以后每次写指令、读/写数据操作均需要检测忙信号。
(8)写指令38H:显示模式设置。
(9)写指令08H:显示关闭。
(10)写指令01H:显示清屏。
(11)写指令06H:显示光标移动设置。
(12)写指令0CH:显示开及光标设置。
2.掌握LCD1602液晶模块显示西文的原理及使用方法;
3.掌握用8位数据模式驱动LCM1602液晶的C语言编程方法;
4.掌握用LCM1602液晶模块显示数字的C语言编程方法。
二、实验仪器与设备
1.微机一台 2.IARforMSP430集成开发环境 3.Proteus仿真软件
三、实验内容
1.用Proteus设计一LCD1602液晶显示接口电路。要求利用P4口接LCD1602液晶的数据端,P5.0~P5.2做LCD1602液晶的控制信号输入端。参考电路见后面。
{
WDTCTL = WDTPW + WDTHOLD;
P4DIR = 0x0ff;
P5DIR = BIT0 + BIT1 + BIT2;
Lcd_init();
write_com(0x80 + 3);
write_zfc("2018-05-03");
write_com(0x80 + 0x40 + 3);
write_zfc("T Love you !");
试验一
一、实验目的
进一步熟悉IARforMSP430编程软件和PROTEUS仿真软件的使用。了解并熟悉单片机I/O口和LED灯的电路结构,学会构建简单的流水灯电路。掌握MSP430单片机I/O口的编程方法和使用I/O口进行输入输出的注意事项。掌握PROTEUS仿真软件仿真MSP430单片机过程中的注意事项。
SET_E;
delay_us(5);
RST_E;
}
void write_dat(uchar dat)
{
SET_RS;
RST_RW;
P4OUT = dat;
SET_E;
delay_us(5);
RST_E;
}
void write_zfc(uchar *p)
{
while( *p != 0)
write_dat(*p ++);
2.编写程序,实现字符的静态和动态显示。显示字符为
第一行中间位置:“学号”,第二行中间位置:“姓名全拼”。(实验报告中要有显示自己名字和学号的截图)
四、实验原理
液晶显示的原理:采用的LCD显示屏都是由不同部分组成的分层结构,位于最后面的一层是由荧光物质组成的可以发射光线的背光层,背光层发出的光线在穿过第一层偏振过滤层之后进入包含成千上万水晶液滴的液晶层,液晶层中的水晶液滴都被包含在细小的单元格结构中,一个或多个单元格构成屏幕上的一个像素。当LCD中的电极产生电场时,液晶分子就会产生扭曲,从而将穿越其中的光线进行有规则的折射,然后经过第二层过滤层的过滤在屏幕上显示出来。
五、实验步骤
1.用Proteus设计1602液晶显示接口电路;
2. 在IARforMSP430中编写液晶显示控制程序,编译通过后,与Proteus联合调试;
六、电路设计调试及程序
1)实验电路
2)程序设计与调试
静态显示
#include"msp430f249.h"
#define uchar unsigned char
delay_us(5);
}
void Lcd_init()
{
write_com(0x38);
delay_us(5);
write_com(0x01);
delay_us(5);
write_com(0x0C);
delay_us(5);
write_com(0x06);
delay_us(5);
}
void main( void )
#define RST_E P5OUT &= ~BIT2
void delay_us(uint ms)
{
uint i,j;
for(i = 0;i < ms;i ++)
for(j = 0;j < 1141;j ++);
}
void write_com(uchar com)
{
RST_RS;
RST_RW;
P4OUT = com;
#define uint unsigned int
#define SET_RS P5OUT |= BIT0
#define RST_RS P5OUT &= ~BIT0
#define SET_RW P5OUT |= BIT1
#define RST_RW P5OUT &= ~BIT1
#define SET_E P5OUT |= BIT2
二、实验内容
1、运用PROTEUS仿真软件绘制LED流水灯电路;
2、运用IARforMSP430编程软件编辑led流水灯程序,并且生成 .hex或.d90文件,并且将生成的文件加载到单片机中,程序使用P1或其它端口来演示跑马灯,输出低电平驱动。
三、实验器材
电脑一台
四、实验原理及介绍
LED流水灯实际上是一个带有发光二极管的单片机最小系统,即由led灯、电阻、电容器、电源等电路和必要的软件组成的单个的单片机;如果要让接在P1或其它端口的LED灯亮起来,那么只需要将P1或其它端口的电平变为低电平就可以了。同理,将该端口电平变为高电平,LED灯就会熄灭。
while(1);
}
七、心得体会(不少于2页)
P1DIR = ox0ff;
while(1)
{
PIOUT = 0x00;
For(I = 0;I < 65565;I ++);
PIOUT = 0x0ff;
For(I = 0;I < 65565;I ++);
}
}
八、心得体会(二页以上)
实验二
一、实验目的
1.掌握IARforMSP430软件与proteus软件仿真调试的方法;
15
BLA
背光源正极
8
D1
数据
16
BLK
背光源负极
2.1602液晶模块内部的控制器共有11条控制指令,如表所示:
3.芯片时序表:
4. 1602LCD的时序图
4-1 LCD1602读操作时序图
4-2 LCD1602写操作时序图
5.1602LCD的一般初始化(复位)过程
(1)延时15ms。
(2)写指令38H(不检测忙信号)。
七、参考程序
#include"msp430f249.h"
#define uint unsigned int
/******************** 主函数 **************************/
void main(void)
{
Uint I;
WDTCTL = WDTPW + WDTHOLD;
五、程序流程图
六、实验步骤
1、运用PROTEUS仿真软件绘制电路图;
2、运用IARforMSP430编写流水灯程序,并且生成‘’.hex’’或“.d90”文件
3、将‘’.hex’’或“.d90”文件软件加载到PROTEUS仿真软件中;
4、换一种流水灯的亮灭顺序,改变延时时间的大小,多次实验,灵活使用
1.LCD1602采用标准的14引脚(无背光)或16引脚(带背光)接口,各引脚接口说明如表:
编号
符号
引脚说明
编号
符号
引脚说明
1
VSS
电源地
9
D2
数据
2
VDD
电源正极
10
D3
数据
3
VL
液晶显示偏压
11
D4
数据
4
RS
数据/命令选择
12
D5
数据
5
R/W
读/写选择
13
D6
数据
6
E
使能信号
14
D7
数据
7
D0
数据