深圳市英锐恩科技有限公司:台湾麦肯单片机(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
}
}
}