定时器实现流水灯
单片机源程序如下:
- //*********************************************************************************
- //功能:查询方式实现间隔1s的流水灯程序。8个发光二极管依次顺序点亮,采用循环移位
- //函数_crol_(m,1)实现
- //实验箱上D1区J52接P1
- //*********************************************************************************
- #include<reg51.h> /*包含头文件REG51.H*/
- #include <intrins.h> /*包含函数_crol_(m,1)的头文件*/
- #define uchar unsigned char
- #define LED P1 /*定义8个LED接至P1口*/
- #define Count 50000 /* T1方式1定时50ms的计数值*/
- uchar Temp1, Temp2;
- void Delay1s(); //1s延时函数声明
- void main() //主程序
- {
- TMOD=0x10; //设置T1为定时器、方式1
- LED=0xff; //8个LED全部熄灭
- Temp1=0xfe; //点亮最上面的LED
- LED=Temp1;
- while(1)
- {
- Delay1s(); //调用1s延时函数
- Temp2=_crol_(Temp1,1); //采用_crol_(m,1)实现单只LED从上到下依次点亮
- Temp1=Temp2;
- LED=Temp2;
- }
- }
- //*********************************************************************************
- //函数名:Delay1s
- //函数功能:利用T1定时、方式1实现1s延时,采用查询方式实现
- //*********************************************************************************
- void Delay1s()
- {
- uchar i;
- for(i=0;i<0x14;i++) //设置20次循环次数
- {
- TH1=(65536-Count)/256; //T1的高8位初值
- TL1=(65536-Count)%256; //T1的低8位初值
- TR1=1; //启动T1
- while(!TF1); //查询计数是否溢出,即定时50ms时间到了吗?
- TF1=0; //50ms定时时间到,将T1溢出标志位TF1清零
- }
- }
复制代码
所有资料51hei提供下载:
定时器实现流水灯.zip
(61.82 KB, 下载次数: 25)
|