msp430基于proteus的基本程序.docx
《msp430基于proteus的基本程序.docx》由会员分享,可在线阅读,更多相关《msp430基于proteus的基本程序.docx(8页珍藏版)》请在冰豆网上搜索。
![msp430基于proteus的基本程序.docx](https://file1.bdocx.com/fileroot1/2022-11/2/4099f37a-ade3-4817-9646-8787b40d1ffe/4099f37a-ade3-4817-9646-8787b40d1ffe1.gif)
1、LED灯、数码管、蜂鸣器的控制,闪烁的实现,流水灯的实现:
程序2.1.1:
#include"io430.h"
intmain(void)
{
unsignedinti;
longintj,k;
unsigneda[]={0x40,0x79,0x24,0x30,0x19,0x12,0x02,0x78,0x00,0x10,0x88,0x80,0xc6,0xc0,0x86,0x8e};//P2输出数组
//Stopwatchdogtimertopreventtimeoutreset
WDTCTL=WDTPW+WDTHOLD;
P2DIR=0xFF;P1DIR=0x1F;
while
(1)
{
for(j=0;j<200000;j++)
{
P2OUT=a[0];
P1OUT=0x1F;
}
for(j=1;j<=16;j++)
{
for(i=0;i{
P2OUT=a[j];
for(k=0;k<6000/(j+1);k++)
P1OUT=0xE0;
for(k=0;k<6000/(j+1);k++)
P1OUT=0x1F;
}
}
}
}
此程序包括了LED灯、数码管、蜂鸣器的使用。
功能是当数码管显示0~F时,LED灯分别闪几下,蜂鸣器分别响几下。
如图2.1
图2.1数码管示数和LED灯闪烁
程序2.1.2:
#include"msp430G2553.h"
//*********************************************************
//程序功能:
心形图案组成的流水灯依次点亮
//*********************************************************
voidmain()
{
unsignedinti;
P1DIR=0XFF;
WDTCTL=WDTPW+WDTHOLD;
while
(1)
{
for(i=0;i<50000;i++);
P1OUT=0X00;
for(i=0;i<50000;i++);
P1OUT=0XAA;
for(i=0;i<50000;i++);
P1OUT=0X55;
for(i=0;i<50000;i++);
P1OUT=0X7F;
for(i=0;i<50000;i++);
P1OUT=0XBF;
for(i=0;i<50000;i++);
P1OUT=0XDF;
for(i=0;i<20000;i++);
P1OUT=0XEF;
for(i=0;i<50000;i++);
P1OUT=0XF7;
for(i=0;i<50000;i++);
P1OUT=0XFB;
for(i=0;i<50000;i++);
P1OUT=0XFD;
for(i=0;i<50000;i++);
P1OUT=0XFE;
}
}
P2.5/ROSC/CA5
25
P2.4/CA1/TA2
24
P2.3/CA0/TA1
23
P2.2/CAOUT/TA0/CA4
22
P2.1/TAINCLK/CA3
21
P2.0/ACLK/CA2
20
P1.2/TA1
14
P1.1/TA0
13
P1.0/TACLK/CAOUT
12
P1.3/TA2
15
P1.4/SMCLK
16
P1.7/TA2
19
P1.6/TA1
18
P1.5/TA0
17
P2.6/CA6
26
P2.7/TA0/CA7
27
P3.0/UCB0STE/UCA0CLK
28
P3.1/UCB0SIMO/UCB0SDA
29
P3.2/UCB0SOMI/UCB0SCL
30
P3.3/UCB0CLK/UCA0STE
31
P3.4/UCA0TXD/UCA0SIMO
32
P3.5/UCA0RXD/UCA0SOMI
33
P3.6/UCA1TXD/UCA1SIMO
34
P3.7/UCA1RXD/UCA1SOMI
35
P4.5/TB5
41
P4.4/TB4
40
P4.3/TB3
39
P4.2/TB2
38
P4.1/TB1
37
P4.0/TB0
36
P4.6/TB6
42
P4.7/TBCLK
43
AVCC
64
AVSS
62
P5.0/UCB1STE/UCA1CLK
44
P5.1/UCB1SIMO/UCB1SDA
45
P5.2/UCB1SOMI/UCB1SCL
46
P5.3/UCB1CLK/UCA1STE
47
P5.4/MCLK
48
P5.5/SMCLK
49
P5.6/ACLK
50
P5.7/TBOUTH/SVSOUT
51
P6.0
59
P6.1
60
P6.2
61
P6.3
2
P6.4
3
P6.5
4
P6.6
5
P6.7/SVSIN
6
XT2OUT
52
XT2IN
53
RST/NMI
58
TCK
57
TDI/TCLK
55
TMS
56
XIN
8
XOUT
9
TDO/TDI
54
U1
MSP430F2491
D3
LED-BLUE
D4
LED-BLUE
D5
LED-BLUE
D6
LED-BLUE
D15
LED-RED
D22
LED-RED
D23
LED-RED
D26
LED-YELLOW
D27
LED-YELLOW
D28
LED-YELLOW
D29
LED-YELLOW
图2.2心形图案流水灯
2、4*4按键的使用
程序2.2.1:
#include"msp430g2553.h"
//*****************************************************************
//函数功能:
初始化键盘
//*****************************************************************
voidInit_Port(void)
{
P1DIR=0;
P1SEL=0;
P1DIR|=BIT4;
P1DIR|=BIT5;
P1DIR|=BIT6;
P1DIR|=BIT7;
P1OUT=0x00;
}
//******************************************************************
//函数功能:
延时函数
//******************************************************************
voidDelay(void)
{
inti;
for(i=0;i<100;i++);
}
//******************************************************************
//函数功能:
读取并扫描键值
//******************************************************************
intKeyProcess(void)
{
intnP10,nP11,nP12,nP13;
intnRes=0;//按键返回值
P1OUT=0XE0;
nP10=P1IN&BIT0;
if(nP10==0)nRes=13;
nP11=P1IN&BIT1;
if(nP11==0)nRes=14;
nP12=P1IN&BIT2;
if(nP12==0)nRes=15;
nP13=P1IN&BIT3;
if(nP13==0)nRes=16;
P1OUT=0XD0;
nP10=P1IN&BIT0;
if(nP10==0)nRes=9;
nP11=P1IN&BIT1;
if(nP11==0)nRes=10;
nP12=P1IN&BIT2;
if(nP12==0)nRes=11;
nP13=P1IN&BIT3;
if(nP13==0)nRes=12;
P1OUT=0XB0;
nP10=P1IN&BIT0;
if(nP10==0)nRes=5;
nP11=P1IN&BIT1;
if(nP11==0)nRes=6;
nP12=P1IN&BIT2;
if(nP12==0)nRes=7;
nP13=P1IN&BIT3;
if(nP13==0)nRes=8;
P1OUT=0X70;
nP10=P1IN&BIT0;
if(nP10==0)nRes=1;
nP11=P1IN&BIT1;
if(nP11==0)nRes=2;
nP12=P1IN&BIT2;
if(nP12==0)nRes=3;
nP13=P1IN&BIT3;
if(nP13==0)nRes=4;
P1OUT=0x00;
for(;;)
{
nP10=P1IN&BIT0;
nP11=(P1IN&BIT1)>>1;
nP12=(P1IN&BIT2)>>2;
nP13=(P1IN&BIT3)>>3;
if(nP10==1&&nP11==1&&nP12==1&&nP13==1)
{
break;
}
}
returnnRes;//返回到键盘扫描函数
}
//****************************************************************
//函数功能:
扫描键盘
//****************************************************************
intKeyScan(void)
{
intnP10,nP11,nP12,nP13;
intnRes=0;//按键返回值
while
(1)
{
nP10=