仿真版本:Proteus8.6及以上版本
程序編譯:Keil5 C51
編程語言:C語言
設(shè)計編號:【Y01】
1.? 簡介
? 本文提出了一種基于51單片機的呼吸燈設(shè)計。本系統(tǒng)由AT89C51單片機為控制核心,用C語言編程實現(xiàn)PWM(脈寬調(diào)制)輸出驅(qū)動LED,逐漸增加PWM的占空比從而實現(xiàn)LED模擬呼吸的過程,即漸亮再漸暗再漸亮再漸暗……如此往復(fù),再利用LED的余輝和人眼的暫留效應(yīng),看上去就和人的呼吸一樣。
2.? 主要功能
a.支持PWM輸出實現(xiàn)呼吸燈效果。
3.? 源程序(Keil5)
本設(shè)計采用keil5 C51軟件(內(nèi)附安裝包)實現(xiàn)程序設(shè)計。如需用keil4打開程序,可自行通過.c和.h文件新建工程即可。
#include <AT89X52.h>
#define MAX 0x50 //定時上限定義
#define MIN 0x00 //定時下限定義
#define TIMELINE 11 //時間分頻常數(shù)
#define TRUE 1
#define FALSE 0 //標(biāo)志位常數(shù)
unsigned int TimeCounter;
bit ArrowFlg = 0; //方向標(biāo)志位
unsigned char upCounter,downCounter; //增加計數(shù)器和減少計數(shù)器
sbit LED=P2^0;
//T0的中斷服務(wù)子函數(shù)
void T0Deal() interrupt 1 using 0
{
TH0=0xf1;
TL0=0xf1;
TR0=1;
TimeCounter++; //定時計數(shù)器增加
if(TimeCounter == TIMELINE)
{
if((upCounter == MAX)&&(downCounter == MIN)) //計數(shù)方向標(biāo)志位切換
{
ArrowFlg = FALSE;
}
if((upCounter == MIN)&&(downCounter == MAX))
{
ArrowFlg= TRUE;
}
if(ArrowFlg == 1) //如果是增加計數(shù)
{
upCounter++;
downCounter--;
}
else //如果是減少計數(shù)
{
upCounter--;
downCounter++;
}
TimeCounter=0;
}
}
4.? 仿真proteus8.6
? 本設(shè)計采用proteus8.6軟件(內(nèi)附安裝包)實現(xiàn)仿真設(shè)計,如下圖所示。proteus軟件一般存在高低版本兼容問題,該仿真是通過proteus8.6導(dǎo)出的,所以請盡量使用proteus8.6打開文件,低于proteus8.6的版本不能夠正常使用,高于proteus8.6的版本除了proteus8.8/8.9理論上可以正常使用。
仿真界面:
5.? 設(shè)計報告
設(shè)計報告主要包括硬件電路、軟件設(shè)計、仿真調(diào)試等等,僅供參考。
6.? 資料清單
設(shè)計資料主要包括C程序+仿真+設(shè)計報告+使用說明+元件清單+操作視頻等。
7.? 資料獲取鏈接
百度網(wǎng)盤下載鏈接:【Y01】百度網(wǎng)盤下載鏈接
更多單片機仿真設(shè)計合集:單片機仿真設(shè)計合集