亚洲春色中文字幕久久久-三上亚,一吻二脱三床四吻胸,国产真实伦对白视频全集,在线毛片观看,精品成品入口黄网,国产毛aⅴ片久久久,亚洲AV色香蕉一区二区三区老师,萧皇后A级艳片,色情日本视频更新,99久久亚洲精品日本无码
標(biāo)題:
關(guān)于單片機(jī)呼吸燈的新想法設(shè)計(jì)
[打印本頁(yè)]
作者:
鄧文雄ABC
時(shí)間:
2018-9-10 16:59
標(biāo)題:
關(guān)于單片機(jī)呼吸燈的新想法設(shè)計(jì)
看過(guò)一些用單片機(jī)做的呼吸燈,很多都是利于延時(shí)做的。如果用延時(shí)做,會(huì)有大量的延時(shí)處理。這是非常落后的程序,再想擴(kuò)展別的功能就可能得不到正確的響應(yīng)。我想到一個(gè)方法來(lái)做,并且已實(shí)現(xiàn)同時(shí)多路LED 的呼吸燈;
原理圖見(jiàn)附件。
利用一個(gè)定時(shí)器產(chǎn)生20US的中斷。每500個(gè)中斷時(shí)間就是10ms,利用500個(gè)中斷控制這10ms的高低電平(占空比),如250個(gè)中斷高,250個(gè)中斷低,就是50%的占空比。10MS的周期剛好是100HZ,LED 100HZ刷新足夠了。利用另一個(gè)定時(shí)器來(lái)控制占空比的時(shí)間,這樣就產(chǎn)生的呼吸效果。而且可以同時(shí)控制多路。
單片機(jī)源碼:
#ifndef _CONFIG_H
#define _CONFIG_H
#include "STC15W40XXX.H"
#include <intrins.h>
//定義主時(shí)鐘
#define FOSC 24000000UL //20MHZ
#define T1000Hz (FOSC / 12 / 1000)
#define CCP_S0 0x10 //P_SW1.4
#define CCP_S1 0x20 //P_SW1.5
/* 數(shù)據(jù)類(lèi)型定義 */
typedef signed char uchar; // 8位有符號(hào)整型數(shù)
typedef signed int uint; //16位有符號(hào)整型數(shù)
typedef signed long ulong; //32位有符號(hào)整型數(shù)
//定時(shí)器T0用作脈沖發(fā)生器,定時(shí)20us
void Timer0Init(void) //20微秒@24.000MHz
{
AUXR &= 0x7F; //定時(shí)器時(shí)鐘12T模式
TMOD &= 0xF0; //設(shè)置定時(shí)器模式
TL0 = 0xD8; //設(shè)置定時(shí)初值
TH0 = 0xFF; //設(shè)置定時(shí)初值
TF0 = 0; //清除TF0標(biāo)志
TR0 = 1; //定時(shí)器0開(kāi)始計(jì)時(shí)
ET0=1;
}
#endif
#include "main.h"
sbit LEDAll = P3^5;
sbit LEDA = P3^2;
sbit LEDB = P3^3;
sbit LEDC = P5^5;
sbit LEDD = P5^4;
sbit KEY_On=P3^4;
bit Power_on=0;
uchar KeySta = 1; //全部按鍵的當(dāng)前狀態(tài)
uchar backup = 1; //按鍵值備份,保存前一次的值
uint cnt;
uint value;
uint PWM_Cont=0;
//--------------------
void UartInit(); [url=]//9600bps@33.1776MHz[/url]
void Timer0Init(); //Timer0 set
void PCATimerInit(); //Timer0 set
void Key_scan(); //按鍵掃描函數(shù)
void Key_Function(); //按鍵功能函數(shù)
void Delay500ms() [url=]//@33.1776MHz[/url]
{
unsigned char i, j, k;
_nop_();
_nop_();
i = 64;
j = 9;
k = 179;
do
{
do
{
while (--k);
} while (--j);
} while (--i);
}
/**********************************************/
void main()
{
PCATimerInit(); //PCA定時(shí)器初始化
Timer0Init(); //定時(shí)器0初始化
UartInit(); //串口初始化
EA = 1; //打開(kāi)總中斷
Delay500ms();
SBUF=0XFF;
LEDAll=0;
LEDA=0;
LEDB=0;
LEDC=0;
LEDD=0;
P1=0X00;
while(1)
{
if(Power_on )
{
// LEDAll=0;
}
else
{
//LEDAll=1;
}
}
}
/********************** Timer0 20us中斷函數(shù) ************************/
//定義20us的中斷,因?yàn)?0ms的周期信號(hào)100hz控制LED頻頻, 在10MS內(nèi)分成500分占空比。每20US一次。
void timer0 (void) interrupt 1
{
static uint P_20us=0;
EA=0;
P_20us++;
if(P_20us>=500)
{
LEDAll=1;
P_20us=0;
}
else
{
if(P_20us==PWM_Cont)
LEDAll=0;
}
EA=1;
}
//PCA定時(shí)器中斷 1ms的中斷時(shí)間
void PCA_isr() interrupt 7 using 1
{
static bit i=0;
static uchar j=0;
j++;
CCF0 = 0; //清中斷標(biāo)志
CCAP0L = value;
CCAP0H = value >> 8; //更新比較值
value += T1000Hz;
Key_scan();
Key_Function();
if(j>=5)
{
j=0;
if(i==0)
{
PWM_Cont++;
if(PWM_Cont==500)
{
i=1;
}
}
else
{
PWM_Cont--;
if(PWM_Cont==20)
{
i=0;
}
}
}
}
復(fù)制代碼
電路原理圖如下:
0.png
(141.07 KB, 下載次數(shù): 38)
下載附件
2018-9-10 17:49 上傳
下載:
直徑105MM的三色呼吸燈.pdf
(104.15 KB, 下載次數(shù): 16)
2018-9-10 16:50 上傳
點(diǎn)擊文件名下載附件
下載積分: 黑幣 -5
作者:
鄧文雄ABC
時(shí)間:
2018-9-10 17:00
按鍵部份已刪除
作者:
z905188015
時(shí)間:
2018-9-11 14:38
學(xué)習(xí)學(xué)習(xí),不錯(cuò)不錯(cuò)
作者:
z905188015
時(shí)間:
2018-9-11 14:38
學(xué)習(xí)學(xué)習(xí),看看看看,見(jiàn)過(guò)大佬
作者:
leeder_a
時(shí)間:
2018-9-11 20:02
延時(shí)做的太占資源,芯片就干不了其它事了;用中斷來(lái)做,所占的資源很少,芯片可處理其它事情。
作者:
bhjyqjs
時(shí)間:
2018-9-12 08:37
專(zhuān)業(yè)呼吸燈可以,要是在其他應(yīng)用中,20uS中斷一次,單片機(jī)什么也干不了
作者:
鄧文雄ABC
時(shí)間:
2019-1-25 10:15
單片機(jī)的頻率可以盡量設(shè)置最高的,比較24M或 以上,20US還是可以的,中斷里面不要做過(guò)多的事就可以
歡迎光臨 (http://www.denmoz.com/bbs/)
Powered by Discuz! X3.1