MSP430x14x系列单片机程序实例.docx

上传人:b****1 文档编号:15144738 上传时间:2023-07-01 格式:DOCX 页数:123 大小:42.24KB
下载 相关 举报
MSP430x14x系列单片机程序实例.docx_第1页
第1页 / 共123页
MSP430x14x系列单片机程序实例.docx_第2页
第2页 / 共123页
MSP430x14x系列单片机程序实例.docx_第3页
第3页 / 共123页
MSP430x14x系列单片机程序实例.docx_第4页
第4页 / 共123页
MSP430x14x系列单片机程序实例.docx_第5页
第5页 / 共123页
MSP430x14x系列单片机程序实例.docx_第6页
第6页 / 共123页
MSP430x14x系列单片机程序实例.docx_第7页
第7页 / 共123页
MSP430x14x系列单片机程序实例.docx_第8页
第8页 / 共123页
MSP430x14x系列单片机程序实例.docx_第9页
第9页 / 共123页
MSP430x14x系列单片机程序实例.docx_第10页
第10页 / 共123页
MSP430x14x系列单片机程序实例.docx_第11页
第11页 / 共123页
MSP430x14x系列单片机程序实例.docx_第12页
第12页 / 共123页
MSP430x14x系列单片机程序实例.docx_第13页
第13页 / 共123页
MSP430x14x系列单片机程序实例.docx_第14页
第14页 / 共123页
MSP430x14x系列单片机程序实例.docx_第15页
第15页 / 共123页
MSP430x14x系列单片机程序实例.docx_第16页
第16页 / 共123页
MSP430x14x系列单片机程序实例.docx_第17页
第17页 / 共123页
MSP430x14x系列单片机程序实例.docx_第18页
第18页 / 共123页
MSP430x14x系列单片机程序实例.docx_第19页
第19页 / 共123页
MSP430x14x系列单片机程序实例.docx_第20页
第20页 / 共123页
亲,该文档总共123页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

MSP430x14x系列单片机程序实例.docx

《MSP430x14x系列单片机程序实例.docx》由会员分享,可在线阅读,更多相关《MSP430x14x系列单片机程序实例.docx(123页珍藏版)》请在冰点文库上搜索。

MSP430x14x系列单片机程序实例.docx

MSP430x14x系列单片机程序实例

目录

1、4KEY-独立按键测试程序2

2、4X4KEY-矩阵键盘测试程序5

3、ADC-IN0-ADC0显示数字量测试程序9

4、ADC-IN0-Continue-ADC连续转换模式测试程序13

5、ADC-IN0-Voltage-数码管显示ADC电压大小测试程序17

6、DAC5615-DAC直接控制测试程序20

7、DAC5615-SPI-DAC通过SPI接口控制测试程序22

8、DISPLAY-LED-数码管显示测试程序25

9、DS18B20-DS18B20采集温度测试程序27

10、DS1302-12864在12864液晶中显示测试程序32

11、DS1302-DS1302实时时钟在1602液晶中显示测试程序40

12、INFRARED-遥控器红外一体化解码测试程序47

13、INTKEY-中断键盘测试程序52

14、LCD1602-1602液晶显示测试程序55

15、LCD12864-12864液晶显示字符汉字测试程序59

16、LED8-LED发光二极管闪烁测试程序63

17、LED-turn-LED流水显示测试程序63

18、MADA-步进电机驱动测试程序65

19、RS485-RS485通信测试程序66

20、SOUND-蜂鸣器发声测试程序69

21、SOUND-无源蜂鸣器发声测试程序70

22、TIMERA-99S-定时器99秒计时测试程序71

23、TIMERA-CONTINUE-定时器连续计数模式测试程序74

24、TIMERA-PWM1-定时器PWM输出测试程序76

1、4KEY-独立按键测试程序

/********************************************************************

//DM430-A型开发板独立键盘控制程序,通过数码管显示按键值,采用逐键扫描

//独立键盘接在P14~P17口,键值定义为1~4,初始默认显示0

********************************************************************/

#include

#include"Config.h"//开发板配置头文件,主要配置IO端口信息

//***********************************************************************

//MSP430IO口初始化

//***********************************************************************

voidPort_Init()

{

LED8SEL=0x00;//设置IO口为普通I/O模式,此句可省

LED8DIR=0xFF;//设置IO口方向为输出

LED8PORT=0xFF;//P2口初始设置为FF

DATASEL=0x00;//设置IO口为普通I/O模式,此句可省

DATADIR=0xFF;//设置IO口方向为输出

DATAPORT=0xFF;//P4口初始设置为FF

CTRSEL=0x00;//设置IO口为普通I/O模式,此句可省

CTRDIR|=BIT3+BIT4;//设置IO口方向为输出,控制口在P63,P64

CTRPORT=0xFF;//P6口初始设置为FF

KEYSEL=0x00;//设置IO口为普通I/O模式,此句可省

KEYDIR=0x0F;//高四位输入模式,低四位输出模式,外部上拉电阻

KEYPORT=0xF0;//初始值0xF0

}

//*************************************************************************

//74HC573控制数码管动态扫描键值显示函数

//*************************************************************************

voidDisplay_Key(ucharnum)

{

uchari,j;

j=0x01;//此数据用来控制位选

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

{

DCTR1;//控制数码管段数据的74HC573的LE管脚置高

WCTR1;//控制数码管位的74HC573的LE管脚置高

DATAPORT=~j;//设置要显示的位,也就是哪一个数码管亮

WCTR0;//锁存位数据,下面送上段数据以后,就显示出来了

DATAPORT=table[num];//送要显示的数据,这里是键值

DCTR0;//锁存段数据,数码管亮一个时间片刻

j=j<<1;//移位,准备进行下一位的显示

delay_us(500);//显示一个时间片刻,会影响亮度和闪烁性

}

Close_LED();//显示完8个数码管后关闭数码管显示,否则可能导致各个数码管亮度不一致

}

//**********************************************************************

//键盘扫描子程序,采用逐键扫描的方式

//**********************************************************************

ucharKey_Scan(void)

{

ucharkey_check;

ucharkey_checkin;

key_checkin=KEYIN;//读取IO口状态,判断是否有键按下

key_checkin&=0xF0;//屏蔽掉低四位的不确定值

if(key_checkin!

=0xF0)//IO口值发生变化则表示有键按下

{

delay_ms(20);//键盘消抖,延时20MS

key_checkin=KEYIN;//再次读取IO口状态

if(key_checkin!

=0xF0)//确定是否真正的有键按下

{

key_check=KEYIN;//有键按下,读取端口值

switch(key_check&0xF0)//判断是哪个键按下

{

case0xE0:

key=1;break;

case0xD0:

key=2;break;

case0xB0:

key=3;break;

case0x70:

key=4;break;

}

}

}

else

{

key=0xFF;//无键按下,返回FF

}

returnkey;

}

//*************************************************************************

//主程序

//*************************************************************************

voidmain(void)

{

uintkey_store=0x00;//没有按键按下时,默认显示1

WDT_Init();//看门狗初始化

Clock_Init();//时钟初始化

Port_Init();//端口初始化,用于控制IO口输入或输出

Close_LED();

delay_ms(100);//延时100ms

while

(1)

{

Key_Scan();//键盘扫描,看是否有按键按下

if(key!

=0xff)//如果有按键按下,则显示该按键键值1~4

{

{

switch(key)

{

case1:

Display_Key(0x01);key_store=0x01;break;//根据键值显示到数码管上

case2:

Display_Key(0x02);key_store=0x02;break;

case3:

Display_Key(0x03);key_store=0x03;break;

case4:

Display_Key(0x04);key_store=0x04;break;

}

}

}

else

{

Display_Key(key_store);//没有按键的时候显示上次的键值

}

}

}

2、4X4KEY-矩阵键盘测试程序

/********************************************************************

//DM430-A型开发板矩阵键盘控制程序,通过数码管显示按键值,采用逐行扫描

//4X4键盘接在P1口,通过控制IO口状态变化,逐行扫描按键是否按下

********************************************************************/

#include

#include"Config.h"//开发板配置头文件,主要配置IO端口信息

//***********************************************************************

//MSP430IO口初始化

//***********************************************************************

voidPort_Init()

{

LED8SEL=0x00;//设置IO口为普通I/O模式,此句可省

LED8DIR=0xFF;//设置IO口方向为输出

LED8PORT=0xFF;//P2口初始设置为FF

DATASEL=0x00;//设置IO口为普通I/O模式,此句可省

DATADIR=0xFF;//设置IO口方向为输出

DATAPORT=0xFF;//P4口初始设置为FF

CTRSEL=0x00;//设置IO口为普通I/O模式,此句可省

CTRDIR|=BIT3+BIT4;//设置IO口方向为输出,控制口在P63,P64

CTRPORT=0xFF;//P6口初始设置为FF

KEYSEL=0x00;//设置IO口为普通I/O模式,此句可省

KEYDIR=0x0F;//高四位输入模式,低四位输出模式,外部上拉电阻

KEYPORT=0xF0;//初始值0xF0

}

//*************************************************************************

//74HC573控制数码管动态扫描键值显示函数

//*************************************************************************

voidDisplay_Key(ucharnum)

{

uchari,j;

j=0x01;//此数据用来控制位选

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

{

DCTR1;//控制数码管段数据的74HC573的LE管脚置高

WCTR1;//控制数码管位的74HC573的LE管脚置高

DATAPORT=~j;//设置要显示的位,也就是哪一个数码管亮

WCTR0;//锁存位数据,下面送上段数据以后,就显示出来了

DATAPORT=table[num];//送要显示的数据,这里是键值

DCTR0;//锁存段数据,数码管亮一个时间片刻

j=j<<1;//移位,准备进行下一位的显示

delay_us(500);//显示一个时间片刻,会影响亮度和闪烁性

}

Close_LED();//显示完8个数码管后关闭数码管显示,否则可能导致各个数码管亮度不一致

}

//**********************************************************************

//键盘扫描子程序,采用逐行(列)扫描的方式

//**********************************************************************

ucharKey_Scan(void)

{

ucharstatevalue,key_checkin,key_check;

KEYPORT=0xf0;//在IO口由输出方式变为输入方式时要延迟一个周期

KEYPORT=0xf0;//采取写两次的方法延时

key_checkin=KEYIN;//读取IO口状态,判断是否有键按下

if(key_checkin!

=0xf0)//IO口值发生变化则表示有键按下

{

delay_ms(20);//键盘消抖,延时20MS

key_checkin=KEYIN;

if(key_checkin!

=0xf0)

{

KEYPORT=0xfe;//逐行扫描开始

KEYPORT=0xfe;//写两次延时,下同

key_check=KEYIN;

switch(key_check)//根据读到的IO口值判断按键的按下情况

{

case0xee:

key=15;break;

case0xde:

key=11;break;

case0xbe:

key=8;break;

case0x7e:

key=4;break;

}

KEYPORT=0xfd;

KEYPORT=0xfd;

key_check=KEYIN;

switch(key_check)

{

case0xed:

key=14;break;

case0xdd:

key=10;break;

case0xbd:

key=7;break;

case0x7d:

key=3;break;

}

KEYPORT=0xfb;

KEYPORT=0xfb;

key_check=KEYIN;

switch(key_check)

{

case0xeb:

key=13;break;

case0xdb:

key=0;break;

case0xbb:

key=6;break;

case0x7b:

key=2;break;

}

KEYPORT=0xf7;

KEYPORT=0xf7;

key_check=KEYIN;

switch(key_check)

{

case0xe7:

key=12;break;

case0xd7:

key=9;break;

case0xb7:

key=5;break;

case0x77:

key=1;break;

}

}

}

else

{

statevalue=0xff;//无按键时返回值

key=statevalue;

return(key);

}

return(key);

}

//*************************************************************************

//主程序

//*************************************************************************

voidmain(void)

{

uintkey_store=0x01;//没有按键按下时,默认显示1

WDT_Init();//看门狗初始化

Clock_Init();//时钟初始化

Port_Init();//端口初始化,用于控制IO口输入或输出

Close_LED();

while

(1)

{

Key_Scan();//键盘扫描,看是否有按键按下

if(key!

=0xff)//如果有按键按下,则显示该按键键值0~15

{

{

switch(key)

{

case1:

Display_Key(0x01);key_store=0x01;break;//根据键值显示到数码管上

case2:

Display_Key(0x02);key_store=0x02;break;

case3:

Display_Key(0x03);key_store=0x03;break;

case4:

Display_Key(0x04);key_store=0x04;break;

case5:

Display_Key(0x05);key_store=0x05;break;

case6:

Display_Key(0x06);key_store=0x06;break;

case7:

Display_Key(0x07);key_store=0x07;break;

case8:

Display_Key(0x08);key_store=0x08;break;

case9:

Display_Key(0x09);key_store=0x09;break;

case0:

Display_Key(0x00);key_store=0x00;break;

case10:

Display_Key(0x0a);key_store=0x0a;break;

case11:

Display_Key(0x0b);key_store=0x0b;break;

case12:

Display_Key(0x0c);key_store=0x0c;break;

case13:

Display_Key(0x0d);key_store=0x0d;break;

case14:

Display_Key(0x0e);key_store=0x0e;break;

case15:

Display_Key(0x0f);key_store=0x0f;break;

}

}

}

else

{

Display_Key(key_store);//没有按键的时候显示上次的键值

}

}

}

3、ADC-IN0-ADC0显示数字量测试程序

/********************************************************************

//DM430-A型开发板数码管显示ADC转换结果程序,显示输入到ADC的电压转换后的数字量

//MSP430单片机内部12位ADC,采用内部2.5V基准,单通道单次转换,中断模式

//通过调节ADC_IN0电位器,可以更改输入电压,最大显示量4095

//数码管控制采用74HC573锁存器控制,采用动态显示机制,采用后四位数码管显示

********************************************************************/

#include

#include"Config.h"//开发板配置头文件,主要配置IO端口信息

staticucharFlag=0;//标志变量

uintTEMP=0;//ADC值暂存变量

//***********************************************************************

//MSP430IO口初始化

//***********************************************************************

voidPort_Init()

{

LED8SEL=0x00;//设置IO口为普通I/O模式,此句可省

LED8DIR=0xFF;//设置IO口方向为输出

LED8PORT=0xFF;//P2口初始设置为FF

DATASEL=0x00;//设置IO口为普通I/O模式,此句可省

DATADIR=0xFF;//设置IO口方向为输出

DATAPORT=0xFF;//P4口初始设置为FF

CTRSEL=0x00;//设置IO口为普通I/O模式,此句可省

CTRDIR|=BIT3+BIT4;//设置IO口方向为输出,控制口在P63,P64

CTRPORT=0xFF;//P6口初始设置为FF

}

//*************************************************************************

//74HC573控制数码管动态扫描显示函数,显示采集到的温度

//*************************************************************************

voidDisplay(uintdata_q,uintdata_b,uintdata_s,uintdata_g)

{

uchari,j;

j=0x01;//此数据用来控制位选

for(i=0;i<4;i++)//用后4位数码管来显示

{

DCTR1;

WCTR1;

DATAPORT=~j;

WCTR0;

j=(j<<1);

DATAPORT=0x00;//前4位都不显示,送数据00即可

DCTR0;

delay_ms

(2);

}

DCTR1;//开始显示千位

WCTR1;

DATAPORT=~j;

WCTR0;

j=(j<<1);

DATAPORT=table[A1];

DCTR0;

delay_ms

(1);

DCTR1;//开始显示百位

WCTR1;

DATAPORT=~j;

WCTR0;

j=(j<<1);

DATAPORT=table[A2];

DCTR0;

delay_ms

(1);

DCTR1;//开始显示十位

WCTR1;

DATAPORT=~j;

WCTR0;

j=(j<<1);

DATAPORT=table[A3];

DCTR0;

delay_ms

(1);

DCTR1;//开始显示个位

WCTR1;

DATAPORT=~j;

WCTR0;

j=(j<<1);

DATAPORT=table[A4];

DCTR0;

delay_ms

(1);

DCTR1;

WCTR1;

DATAPORT=0xff;

WCTR0;

}

//*************************************************************************

//电压数据处理函数

//*************************************************************************

voidData_do(uinttemp_d)

{

uint

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 自然科学 > 物理

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2