本帖最后由 tiankai001 于 2018-1-18 10:21 编辑
此内容由EEWORLD论坛网友tiankai001原创,如需转载或用于商业用途需征得作者同意并注明出处
说明:本系列文章是基于proteus仿真环境下的MSP单片机程序设计实例。每个例子都配有电路图和源码,所有程序和电路都在Proteus环境下仿真通过。需要指出的是,该系列电路只是在Proteus环境下的电路,不能作为实际电路使用。
一、任务要求使用单片机的I/O端口实现8个LED发光二极管的跑马灯控制。
二、硬件电路在Proteus环境下新建一个工程,添加本电路所用元件,单片机MSP430F247,蓝色发光二极管,电阻,电容,排阻等。
添加元件方法如下。
添加电源、地等电气符号。
电路原理图如下图所示
电路图绘制完成后,如果需要修改元件名称和参数,左键双击元件,设置相应参数。
三、程序设计跑马灯要实现8个LED发光二极管按照一定时间间隔顺序点亮。8个LED接到单片机的8个I/O端口上,通过一个8位二进制数来控制I/O端口的输出。从上面的电路图可以看出,8个LED的负极与单片机的端口相连,也就是说,只有单片机端口输出低电平,LED才会发光。
一个循环周期分为8个时间段,每一时间段送至I/O端口相应数据,实现8个发光二极管依次点亮的效果。
程序代码如下
#include "msp430f247.h"
#include "stdlib.h"
#include "string.h"
/*****************************************软件延时,主频1M*******************/
#define CPU_F1 ((double)1000000)
#define delay_us1M(x) __delay_cycles((long)(CPU_F1*(double)x/1000000.0))
#define delay_ms1M(x) __delay_cycles((long)(CPU_F1*(double)x/1000.0))
/****************************************************************************/
/************************************************
函数名称:主函数
函数功能:跑马灯实验
入口参数:无
出口参数:无
描述:
作者:老马识途单片机
日期:2018年1月2日
************************************************/
main()
{
unsigned char j,k;
_DINT(); //关中断
WDTCTL = WDTPW + WDTHOLD;//关看门狗
P4DIR = 0xff;//设置P4端口为输出端口
while(1)
{
k = 1;
for(j=0;j<8;j++)//循环8次,即D1~D8轮流点亮
{
P4OUT = ~k;//反相输出,低电平点亮LED
delay_ms1M(300);//延时
k=k<<1;//左移一位
}
}
}
四、MSP430编译环境IAR的工程建立在IAR环境下建立一个MSP430的工程,配置单片机型号,输出文件类型等参数。如下图所示
五、程序加载鼠标放在单片机元件上,单击鼠标右键,添加程序文件。如下图所示。
六、仿真和调试运行结果如下图所示。