|
001.jpg (66.52 KB, 下載次數(shù): 87)
下載附件
2021-2-4 16:08 上傳
單片機(jī)源程序如下:
#include <reg52.h>
#define uchar unsigned char
#define uint unsigned int
#define ulong unsigned long
ulong cnt;
uint cnt_T1, high, low;
uchar TH0_H, TL0_H, TH0_L, TL0_L, T1H1, T1L1, flag = 0;
uchar duty[19] = {5,10,15,20,25,30,35,40,45,50,55,60,65,70,75,80,85,90,95};
sbit out = P3^7;
uchar shuying = 0;
void delay_fy(uchar fy, uchar dy);
void time_1(uchar ms);
void sm_du(uchar dy);
void main()
{
TMOD = 0X11; // 定時(shí)器0/1都工作在方式1,是2^16計(jì)數(shù)
EA=1;
delay_fy(100, 5);
time_1(50);
while(1);
}
void delay_fy(uchar fy, uchar dy) // 輸入頻率fy,占空比dy
{
cnt = (11059200/fy)/12; // 要產(chǎn)生頻率為fy,定時(shí)器0所要計(jì)的數(shù)值
high = (cnt*dy)/100; // 計(jì)算出高電平所要計(jì)的數(shù)值
low = cnt - high; // 計(jì)算出低電平所要計(jì)的數(shù)值
high = 65536 - high; // 確定定時(shí)器0,從哪個(gè)初值開始計(jì)時(shí),記錄的是高電平
low = 65536 - low; // 確定定時(shí)器0,從哪個(gè)初值開始計(jì)時(shí),記錄的是低電平
TH0_H = (uchar)(high>>8); // 高電平,給TH0預(yù)備重裝初值
TL0_H = (uchar)high; // 高電平,給TL0預(yù)備重裝初值
TH0_L = (uchar)(low>>8); // 低電平,給TH0預(yù)備重裝初值
TL0_L = (uchar)low; // 低電平,給TL0預(yù)備重裝初值
TH0 = TH0_H;
TL0 = TL0_H;
out = 1;
ET0 = 1;
TR0 = 1;
}
void time_1(uchar ms)
{
ulong temp;
temp = 11059200/1000;
temp = (temp*ms)/12;
cnt_T1 = 65536 - temp;
T1H1 = (uchar)(cnt_T1>>8);
T1L1 = (uchar)cnt_T1;
TH1 = T1H1;
TL1 = T1L1;
ET1=1;
TR1=1;
}
void sm_du(uchar dy)
{
high = (cnt*dy)/100;
low = cnt - high;
high = 65536 - high;
low = 65536 - low;
}
void time_0() interrupt 1
{
if(out==0) // 準(zhǔn)備產(chǎn)生高電平
{
TH0 = TH0_H; // 高電平產(chǎn)生 初值重裝
TL0 = TL0_H;
out = 1;
}
else
{
TH0 = TH0_L; // 低電平產(chǎn)生 初值重裝
TL0 = TL0_L;
out = 0;
}
}
void T1_Timer1() interrupt 3
{
TH1 = T1H1;
TL1 = T1L1;
sm_du(duty[shuying]);
if(0 == flag) // flag=0時(shí),表示呼吸燈由暗變亮
{
shuying++;
if(shuying >=18)
{
flag = 1;
}
}
}
}
詳見附件
經(jīng)典兩定時(shí)器控制呼吸燈001.rar
(16.56 KB, 下載次數(shù): 20)
2021-2-4 16:09 上傳
點(diǎn)擊文件名下載附件
下載積分: 黑幣 -5
|
評(píng)分
-
查看全部評(píng)分
|