标题:
51单片机和Proteus仿真的呼吸灯程序设计 亲测可用
[打印本页]
作者:
futao
时间:
2019-5-9 16:13
标题:
51单片机和Proteus仿真的呼吸灯程序设计 亲测可用
基于51单片机和Proteus仿真的呼吸灯设计,包含C语言源程序及Proteus仿真电路图,亲测完全可用
仿真原理图如下(proteus仿真工程文件可到本帖附件中下载)
呼吸灯.png
(74.75 KB, 下载次数: 44)
下载附件
2019-5-9 16:11 上传
单片机源程序如下:
#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);
}
}
复制代码
所有资料51hei提供下载:
基于51单片机和Proteus仿真的呼吸灯设计.zip
(50.7 KB, 下载次数: 57)
2019-5-9 16:11 上传
点击文件名下载附件
下载积分: 黑币 -5
作者:
c123456.
时间:
2019-6-19 16:12
我试的怎么是一闪一闪的 没有呼吸的感觉
作者:
71672727
时间:
2020-5-12 11:07
电感和电容在这个图里起什么作用
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1