51单片机用定时器0实现流水灯的代码如下,用P1口接led灯,代码如下都有注释就不具体解释了,英语不怎么好,有的地方将就一下喽,本次主要讲一下P1口怎么赋值。原先写的都是用查表来移位的,个人感觉不怎么好,麻烦。直接用位运算的比较好。 n初始值为0,然后n每次循环都加1,P1口赋值语句为: P1=~(0x01<< n) ; 此处注意和P1=~(0xfe<< n) ; 的区别。
/*********调用头文件*****************/
#include
#include
/***********宏定义*******************/
#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< if(++n==8)n=0; i=0; //定时时间到清零 } TH0=(65536-50000)/256; //重新装入初值 TL0=(65526-50000)%256; }