立即注册
登录
返回首页
uid:582255的个人空间
空间首页
主题
个人资料
论坛
问答区
单片机教程
单片机DIY
电子DIY
帮助
我的空间
好友
帖子
收藏
道具
勋章
任务
淘帖
群组
排行榜
日志
单片机版本的呼吸灯
已有 671 次阅读
2021-2-2 21:21
#include <AT89X52.h>
#define MAX 0x50 //定时上限定义
#define MIN 0x00 //定时下限定义
#define TIMELINE 11 //时间分频常数
#define TRUE 1
#define FALSE 0 //标志位常数
unsigned int TimeCounter;
bit ArrowFlg = 0; //方向标志位
unsigned char upCounter,downCounter; //增加计数器和减少计数器
sbit LED=P2^0;
//T0的中断服务子函数
void T0Deal() interrupt 1 using 0
{
TH0=0xf1;
TL0=0xf1;
TR0=1;
TimeCounter++; //定时计数器增加
if(TimeCounter == TIMELINE)
{
if((upCounter == MAX)&&(downCounter == MIN)) //计数方向标志位切换
{
ArrowFlg = FALSE;
}
if((upCounter == MIN)&&(downCounter == MAX))
{
ArrowFlg= TRUE;
}
if(ArrowFlg == 1) //如果是增加计数
{
upCounter++;
downCounter--;
}
else //如果是减少计数
{
upCounter--;
downCounter++;
}
TimeCounter=0;
}
}
//延时函数
void Delay(unsigned int i)
{
unsigned int j;
while(i--)
{
for(j=0;j<32;j++); //延时
}
}
void main()
{
upCounter = MIN;
downCounter = MAX; //计数器初始化
TMOD = 0x01; //设置定时器工作方式
TH0 = 0xF0;
TL0 = 0xF0 ; //T0初始化值
EA = 1;
ET0 = 1; //开中断
TR0 = 1; //启动T0
while(1)
{
LED=0; //输出变化的PWM波形
Delay(downCounter);
LED=1;
Delay(upCounter);
}
}
路过
鸡蛋
鲜花
握手
雷人
收藏
邀请
举报
全部
作者的其他最新日志
•
步进电机控制实验
评论 (
0
个评论)
uid:582255
加为好友
打个招呼
发送消息
手机版
|
小黑屋
|
51黑电子论坛
|
管理员QQ:125739409;技术交流QQ群281945664
Powered by
单片机教程网
返回顶部