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; }
|