求一个IAR 简单的点灯程序,加注释的

求一个IAR 简单的点灯程序,加注释的,第1张

#include <msp430x14x.h>

#define CPU_F ((double)8000000)

#define delay_us(x) __delay_cycles((long)(CPU_F*(double)x/1000000.0))

#define delay_ms(x) __delay_cycles((long)(CPU_F*(double)x/1000.0))

#define uchar unsigned char

#define uint unsigned int

#define ulong unsigned long

#define LED P3OUT //LED灯接在P34、P35上

uchar key

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

// 系统时钟初始化

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

void Clock_Init()

{

uchar i

BCSCTL1&=~XT2OFF//打开XT振荡器

BCSCTL2|=SELM1+SELS //MCLK为8MHZ,SMCLK为8MHZ

do{

IFG1&=~OFIFG //清除震荡标志

for(i=0i<100i++)

_NOP() //延时等待

}

while((IFG1&OFIFG)!=0) //如果标志为1,则继续循环等待

IFG1&=~OFIFG

}

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

// MSP430内部看门狗初始化

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

void WDT_Init()

{

WDTCTL = WDTPW + WDTHOLD //关闭看门狗

}

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

//初始化IO口子程序

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

void Port_init()

{

P1SEL = 0x00 //P1普通IO功能

P1DIR = 0xF0 //P10~P13输入模式,外部电路已接上拉电阻

P3SEL = 0x00 //P3口普通IO功能

P3DIR = 0xFF //P3口输出模式

}

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

//主程序

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

void main(void)

{

WDT_Init() //看门狗设置

Clock_Init() //系统时钟设置

Port_init() //系统初始化,设置IO口属性

delay_ms(100)//延时100ms

while(1)

{

LED=0xEF //给不同的键赋键值,键值1,亮1个LED灯D1

//LED=0xDF //给不同的键赋键值,键值2,亮1个LED灯D2

//LED=0xCF

// case 4: LED=0xFFbreak//给不同的键赋键值,键值4,亮0个LED灯

}

}

IAR软件可以用来编程控制4个灯亮灭,主要步骤如下:

1.确定灯的类型,如LED灯,并确定控制灯的控制器;

2.使用IAR编程器连接控制器,并用IAR编写程序,实现对灯的控制;

3.定义控制4个灯的控制引脚,为每个灯设置一个引脚;

4.在程序中编写程序,实现对4个灯的控制,即对每个灯的引脚进行高低电平控制,以控制灯的亮灭;

5.编译程序,下载到控制器,运行程序,实现对4个灯的控制。

1. 不知道你用的是什么开发板,点灯程序设计中init.s、寄存器配置和一些接口初始化(如UART、led)在模板中都有了啊,我用过了两个开发板,LPC2200和MAGIC ARM2410都不用手动添加的,专用模板中都自带的。

2. 点灯程序中最重要的是设置GPIO,把相应的引脚设置高低电平就可以点亮了,这你就要看懂开发板自带的硬件电路图了。

3. 给你看看我用的开发板点灯程序的设置吧,我的开发板上面有四个灯,实现程序如下:

#include "config.h"

// 定义LED控制口 (输出高电平时点亮LED)

#define LED1_CON (1<<11) /* GPE11口 */

#define LED2_CON (1<<12) /* GPE12口 */

#define LED3_CON (1<<4)/* GPH4口 */

#define LED4_CON (1<<6)/* GPH6口 */

void DelayNS(uint32 dly)

{

uint32 i

for(dly>0dly--)

for(i=0i<50000i++)

}

void LED_DispAllOn(void)//其实你要的灯全部亮只要这一个函数就可以了,这个功能是把,led1、led2、led3、led4对应的GPE11、GPE12、GPE4、GPE6设置为高电平,即点亮灯

{

rGPEDAT = rGPEDAT | (0x03<<11)

rGPHDAT = rGPHDAT | (0x05<<4)

}

void LED_DispAllOff(void)

{

rGPEDAT = rGPEDAT &(~(0x03<<11))

rGPHDAT = rGPHDAT &(~(0x05<<4))

}

void LED_DispNum(uint32 dat)

{

dat = dat &0x0000000F// 参数过滤

// 控制LED4、LED3显示(d3、d2位)

if(dat &0x08) rGPHDAT = rGPHDAT | (0x01<<6)

else rGPHDAT = rGPHDAT &(~(0x01<<6))

if(dat &0x04) rGPHDAT = rGPHDAT | (0x01<<4)

else rGPHDAT = rGPHDAT &(~(0x01<<4))

// 控制LED2、LED1显示(d1、d0位)

rGPEDAT = (rGPEDAT &(~(0x03<<11))) | ((dat&0x03) <<11)

}

int main(void)

{

int i

do{

// 初始化I/O

rGPECON = (rGPECON &(~(0x0F<<22))) | (0x05<<22) // rGPECON[25:22] = 0101b,设置GPE11、GPE12为GPIO输出模式

rGPHCON = (rGPHCON &(~(0x33<<8))) | (0x11<<8)// rGPHCON[13:8] = 01xx01b,设置GPH4、GPH6为GPIO输出模式

// LED全闪烁5次

for(i=0i<5i++)

{

LED_DispAllOff() // LED全熄灭

DelayNS(5)

LED_DispAllOn() // LED全点亮

DelayNS(5)

}

// 控制LED指示0~F的16进制数值

for(i=0i<16i++)

{

LED_DispNum(i)// 显示数值i

DelayNS(5)

}

}while(1)

return(0)

}


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/7970837.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-12
下一篇 2023-04-12

发表评论

登录后才能评论

评论列表(0条)

保存