技术热线: 4007-888-234

QLdsPIC3]流水灯[C30+dsPIC30F6014A]

更新时间: 2019-03-23
阅读量:3704

深圳市英锐恩科技有限公司:台湾麦肯单片机(Micon MDT单片机)亚太地区A级代理商

QLdsPIC3]流水灯[C30+dsPIC30F6014A]
//实验目的:通过LED流水灯实验,熟悉dsPIC30F6014A的简单编程
//软件思路:
//          1、PORTD口的低8位的流水灯实验
//          2、用TMR1的定时做流水灯的延时时间
//          3、改变FCY的值可以改变流水灯的速度
//硬件规划:拨码开关S1全置ON,其他拨码开关OFF

#include             //dsPIC30F6014标准头文件

  _FOSC(CSW_FSCM_OFF & XT_PLL4);  //4倍频晶振,Failsafe 时钟关闭
  _FWDT(WDT_OFF);                 //关闭看门狗定时器
  _FBORPOR(PBOR_OFF & MCLR_EN);   //掉电复位禁止,MCLR复位使能。
  _FGS(CODE_PROT_OFF);            //代码保护禁止
#define Fcy 5000000               //流水灯延时时间

int main(void)                    //主函数
{
/*设置LED控制寄存器和定时器*/
//初始化LED端口和按键开关端口
LATD = 0x0000;                   //关闭所有LED
TRISD = 0xFF00;                  //设定LED引脚为输出
T1CON = 0;                       //关闭定时器1
TMR1 = 0;                        //启动定时器1的计数寄存器为0
PR1 = (Fcy/256)/2;               //设定延时时间
T1CON = 0x8030;                  //配置定时器1 (定时器开, 在空闲模式定时器继续工作,
                                 //控时间累加禁止, 预分频比是1:256, 内部时钟)
unsigned char i;                 //定义一循环变量
   while (1)                   
   {
     LATD=1;                     //先点亮PORTD0口LED
     for(i=0;i<8;i++)            //循环8次,依次点亮所有LED
      {
    while(!IFS0bits.T1IF);    //等待延时时间到
       LATD=LATD<<1;             //缓冲器左移一位,以便点亮下一位LED
       IFS0bits.T1IF=0;          //定时器中断标志位清0
      }
   }
}