欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136
標(biāo)題:
STC8a8k64S4A12怎么實(shí)現(xiàn)流水呼吸燈?只有呼吸燈的PWM代碼
[打印本頁(yè)]
作者:
duan030
時(shí)間:
2021-12-27 18:41
標(biāo)題:
STC8a8k64S4A12怎么實(shí)現(xiàn)流水呼吸燈?只有呼吸燈的PWM代碼
STC8a8k64S4A12怎么實(shí)現(xiàn)流水呼吸燈?只有呼吸燈的PWM代碼,現(xiàn)在想實(shí)現(xiàn)8個(gè)燈呈現(xiàn)波浪式的起伏,也算是流水呼吸燈了
求助大佬們,非常非常感謝!
#include "reg51.h"
#include "intrins.h"
//測(cè)試工作頻率為11.0592MHz
#define CYCLE 0x1000
sfr P_SW2 = 0xba;
sfr PWMCFG = 0xf1;
sfr PWMIF = 0xf6;
sfr PWMFDCR = 0xf7;
sfr PWMCR = 0xfe;
#define PWMC (*(unsigned int volatile xdata *)0xfff0)
#define PWMCKS (*(unsigned char volatile xdata *)0xfff2)
#define TADCP (*(unsigned int volatile xdata *)0xfff3)
#define PWM0T1 (*(unsigned int volatile xdata *)0xff00)
#define PWM0T2 (*(unsigned int volatile xdata *)0xff02)
#define PWM0CR (*(unsigned char volatile xdata *)0xff04)
#define PWM0HLD (*(unsigned char volatile xdata *)0xff05)
#define PWM1T1 (*(unsigned int volatile xdata *)0xff10)
#define PWM1T2 (*(unsigned int volatile xdata *)0xff12)
#define PWM1CR (*(unsigned char volatile xdata *)0xff14)
#define PWM1HLD (*(unsigned char volatile xdata *)0xff15)
#define PWM2T1 (*(unsigned int volatile xdata *)0xff20)
#define PWM2T2 (*(unsigned int volatile xdata *)0xff22)
#define PWM2CR (*(unsigned char volatile xdata *)0xff24)
#define PWM2HLD (*(unsigned char volatile xdata *)0xff25)
#define PWM3T1 (*(unsigned int volatile xdata *)0xff30)
#define PWM3T2 (*(unsigned int volatile xdata *)0xff32)
#define PWM3CR (*(unsigned char volatile xdata *)0xff34)
#define PWM3HLD (*(unsigned char volatile xdata *)0xff35)
#define PWM4T1 (*(unsigned int volatile xdata *)0xff40)
#define PWM4T2 (*(unsigned int volatile xdata *)0xff42)
#define PWM4CR (*(unsigned char volatile xdata *)0xff44)
#define PWM4HLD (*(unsigned char volatile xdata *)0xff45)
#define PWM5T1 (*(unsigned int volatile xdata *)0xff50)
#define PWM5T2 (*(unsigned int volatile xdata *)0xff52)
#define PWM5CR (*(unsigned char volatile xdata *)0xff54)
#define PWM5HLD (*(unsigned char volatile xdata *)0xff55)
#define PWM6T1 (*(unsigned int volatile xdata *)0xff60)
#define PWM6T2 (*(unsigned int volatile xdata *)0xff62)
#define PWM6CR (*(unsigned char volatile xdata *)0xff64)
#define PWM6HLD (*(unsigned char volatile xdata *)0xff65)
#define PWM7T1 (*(unsigned int volatile xdata *)0xff70)
#define PWM7T2 (*(unsigned int volatile xdata *)0xff72)
#define PWM7CR (*(unsigned char volatile xdata *)0xff74)
#define PWM7HLD (*(unsigned char volatile xdata *)0xff75)
void PWM_Isr() interrupt 22
{
static bit dir = 1;
static int val = 0;
char store;
if (PWMCFG & 0x80)
{
PWMCFG &= ~0x80; //清中斷標(biāo)志
if (dir)
{
val++;
if (val >= CYCLE) dir = 0;
}
else
{
val--;
if (val <= 1) dir = 1;
}
store = P_SW2;
P_SW2 |= 0x80;
PWM0T2 = val;
P_SW2 = store;
}
}
void main()
{
P_SW2 = 0x80;
PWMCKS = 0x00; // PWM時(shí)鐘為系統(tǒng)時(shí)鐘
PWMC = CYCLE; //設(shè)置PWM周期為
PWM0T1= 0x0000;
PWM0T2= 0x0001;
PWM0CR= 0x80; //使能PWM0輸出
P_SW2 = 0x00;
PWMCR = 0xc0; //啟動(dòng)PWM模塊
EA = 1;
while (1);
}
復(fù)制代碼
這個(gè)代碼是定義了一個(gè)燈,多個(gè)燈定義加上PWM1、2...即可
作者:
風(fēng)之痕于夢(mèng)想
時(shí)間:
2021-12-29 15:37
呼吸燈函數(shù)可以帶入口參數(shù),然后采用輪詢(xún)的方式把每個(gè)等賦值給入口參數(shù)即可。
作者:
tatachaoren
時(shí)間:
2021-12-29 16:23
可以不用PWM中斷去做。我做過(guò)一個(gè)呼吸燈產(chǎn)品,思路是:用定時(shí)器定時(shí)一個(gè)1ms的中斷,然后根據(jù)時(shí)間去改變A的PWM占空比,比如20ms改變一次,當(dāng)A的占空比從0到100%再遞減到30%時(shí),你開(kāi)始遞加B的PWM的占空比,當(dāng)A的占空比0的時(shí)候,B的占空比就在30%,類(lèi)比下去C,D,E等等。我做的不是海浪,不過(guò)你可以根據(jù)海浪的特性去做。
作者:
lkc8210
時(shí)間:
2021-12-29 16:58
手上沒(méi)有STC8A的單片機(jī)
試試這樣改
void PWM_Isr() interrupt 22
{
static char dir[8] = {0, 0, 0, 0, 0, 0, 0, 0};
static int val[8]= {0, 0, 0, 0, 0, 0, 0, 0};
static char Enb[8]= {0, 0, 0, 0, 0, 0, 0, 0};
char store, index;
static unsigned int delay_on = 0;
static char delay_on_i = 0;
if(!delay_on)
{
delay_on = 1500;//~0.5sec
if(delay_on_i<8)
{
Enb[delay_on_i] = 1;
delay_on_i++;
}
}else{
delay_on--;
}
if (PWMCFG & 0x80)
{
PWMCFG &= ~0x80; //清中斷標(biāo)志
for(index = 0;index < 8; index++)
{
if(Enb[index])
{
if (!dir[index])
{
val[index]++;
if (val[index] >= CYCLE) dir[index] = 0;
}
else
{
val[index]--;
if (val[index] <= 1) dir[index] = 1;
}
}
}
store = P_SW2;
P_SW2 |= 0x80;
PWM0T2 = val[0];
PWM1T2 = val[1];
PWM2T2 = val[2];
PWM3T2 = val[3];
PWM4T2 = val[4];
PWM5T2 = val[5];
PWM6T2 = val[6];
PWM7T2 = val[7];
P_SW2 = store;
}
}
復(fù)制代碼
歡迎光臨 (http://m.raoushi.com/bbs/)
Powered by Discuz! X3.1