您的位置:首页 > 其它

51单片机用定时器0实现流水灯

2016-05-13 21:05 309 查看
51单片机用定时器0实现流水灯的代码如下,用P1口接led灯,代码如下都有注释就不具体解释了,英语不怎么好,有的地方将就一下喽,本次主要讲一下P1口怎么赋值。原先写的都是用查表来移位的,个人感觉不怎么好,麻烦。直接用位运算的比较好。 n初始值为0,然后n每次循环都加1,P1口赋值语句为: P1=~(0x01<< n) ; 此处注意和P1=~(0xfe<< n) ; 的区别。

/*********调用头文件*****************/
#include<reg51.h>
#include<intrins.h>

/***********宏定义*******************/
#define uint unsigned int
#define uchar unsigned char
#define long_time0 10    //定时器0定时时间,每次50ms

/************定义全局变量************/
uint n=0;                //循环移位变量

/************子函数声明**************/
void init_time0(void);   //定时器0初始化子函数

/*************主函数*****************/
void main(void)
{
init_time0();

}

/*********定时器0初始化函数**********/
void init_time0(void)
{
EA=1;                   //开总中断
ET0=1;                  //开定时器0中断
TMOD=0X01;              //选择方式1
TH0=(65536-50000)/256;  //每次定时50秒
TL0=(65526-50000)%256;
TR0=1;                  //开启定时器
while(1);               //等待定时器0中断
}
/************定时器中断函数**********/
void time0(void) interrupt 1 using 0
{
static uint i=0;
i++;
if(long_time0==i)
{
P1=~(0x01<<n);          //P1=~(0xfe<<n);
if(++n==8)n=0;
i=0;                    //定时时间到清零
}
TH0=(65536-50000)/256;      //重新装入初值
TL0=(65526-50000)%256;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: