MSP430x14x系列单片机程序实例.docx
- 文档编号:27456774
- 上传时间:2023-07-01
- 格式:DOCX
- 页数:123
- 大小:42.24KB
MSP430x14x系列单片机程序实例.docx
《MSP430x14x系列单片机程序实例.docx》由会员分享,可在线阅读,更多相关《MSP430x14x系列单片机程序实例.docx(123页珍藏版)》请在冰豆网上搜索。
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
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- MSP430x14x 系列 单片机 程序 实例