久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费
標題:
用PWM做呼吸燈
[打印本頁]
作者:
雪落有聲
時間:
2013-10-13 10:35
標題:
用PWM做呼吸燈
我要用pwm做呼吸燈,可我對pwm是怎么編寫的,原理什么的不知道,忘前輩們指教。最好能給我一個教pwm控制單片機的視頻教程,我學一下,謝謝!
由于是新手,表述可能不準確請見諒。
作者:
admin
時間:
2013-10-13 13:38
這里有 呼吸燈的詳細資料
http://www.zg4o1577.cn/mcu/1160.html
作者:
眼病阿百川
時間:
2013-10-15 00:10
12系列的PWM輸出
STC12C5A60S2內部集成了兩路可編程計數器陣列(PCA)可以用做脈寬調制(PWM)輸出。脈寬調制是將模擬信號轉換為脈沖波的一種技術。一般轉換后脈波的周期固定,但占空比會隨模擬信號的大小而改變。講多了,下面直接講重點,如何用C語言實現PWM輸出。
STC12C5A60S2單片機通過程序設定工作在八位PAM模式,其占空比與PCA_PWMn(n=0,1下同)寄存器的EPCnL和CCAPn L的值有關。當CL的值小于[EPCnL,CCAPn L]時PWM輸出低電平,大于時輸出高電平。八位計數器CL不斷的從00加一,直到FF再循環,這樣就形成了一定占空比的方波,當CL從FF溢出到00時,[EPCnH,CCAPn H]的值自動裝載到[EPCnL,CCAPn L]中,我們只要改變[EPCnH,CCAPn H],在下一個周期就會形成新的占空比。要想使用PWM功能,要將CCAPMn寄存器的ECOMn和PWMn位置位。CL和CH的初值都為0(八位(256-256)%256和(256-256)/256)。CCAPn H的值等于=255-255*占空比/100。
主要文件
/********************************************************************
* 文件名 : 12系列PWM輸出
* 描述 : 利用12系列自帶的PWM輸出可調占空比的脈寬
* 創建人 : 嚴兵,2013年7月21日
***********************************************************************/
#include "fun.h"
/********************************************************************
* 名稱 : 外部中斷0服務函數
* 功能 : 外部產生中斷時,將占空比值減一
* 輸入 : 無
* 輸出 : 無
***********************************************************************/
void INT0_interrupt() interrupt 0
{
if ( duty_level > 0 )
{
duty_level --;
CCAP0H = 255 - 255 * duty[duty_level] / 100;
}
else
{
duty_level = 10; //PWM調到最大,發光二極管熄滅
CCAP0H = 255 - 255 * duty[duty_level] / 100;
}
}
main()
{
ms_delay(20);
init_port();
init_int();
init_pca();
EA = 1;//開總中斷
while(1);
}
FUN.H頭文件
#include <intrins.h>
#include <reg51.h> //包含頭文件
//定義端口寄存器
sfr P0M0 = 0X93;
sfr P0M1 = 0X94;
sfr P1M0 = 0X91;
sfr P1M1 = 0X92;
sfr P2M0 = 0X95;
sfr P2M1 = 0X96;
sfr P3M0 = 0Xb1;
sfr P3M1 = 0Xb2;
//與PCA0有關的寄存器
sfr CCON = 0xd8; //PCA控制寄存器
sbit CCF0 = CCON^0; //PCA0中斷標志位
sbit CR = CCON^6; //運行控制位
sbit CF = CCON^7; //溢出標志
sfr CMOD = 0xd9; //PCA工作模式寄存器
sfr CL = 0xe9;
sfr CH = 0xf9;
sfr CCAPM0 = 0xda;//PCA0寄存器
sfr CCAP0L = 0xea;
sfr CCAP0H = 0xfa;
sfr PCAPWM0 = 0xf2;
#define fosc 11059200L
sbit s1 = P3^2;
unsigned char duty[11] = {0,10,20,30,40,50,60,70,80,90,100};
unsigned char duty_level; //占空比值
/********************************************************************
* 名稱 : 外部中斷0初始化函數
* 功能 : 初始化外部中斷0
* 輸入 : 無
* 輸出 : 無
***********************************************************************/
void init_int()
{
IT0 = 1;//設置INT0為下降沿觸發
EX0 = 1;//允許INT0中斷
}
/********************************************************************
* 名稱1: I/O初始化函數
* 功能 : 初始化P1I/O
* 輸入 : 無
* 輸出 : 無
***********************************************************************/
void init_port()
{
P1M1 = 0x00; //P1.3強推挽輸出
P1M0 = 0x04;
}
/********************************************************************
* 名稱 : PCA初始化函數
* 功能 : 設置PCA模塊0的PWM
* 輸入 : 無
* 輸出 : 無
***********************************************************************/
void init_pca()
{
CCON = 0; //
CL = 0; //(256-256)/256 PCA計數器初值設定,八位PWM模式
CH = 0; //(256-256)%256
CMOD = 0x08; //0000 1000 時鐘源為系統時鐘,得到PWM的頻率(最快) = fosc / 256 = 43.2k,PWM時PCA計數器不需要產生中斷,只要一直計數
duty_level = 0; //占空比0%
CCAP0H = 255 - 255 * duty[duty_level] / 100;//根據PWM占空比算捕獲計數值
CCAP0L = CCAP0H; //將高位值(CCAP0H)給低位(CCAP0L),這樣就可以通過改變高位值來控制低位值,而占空比是根據CL和[EECPOL,CCAP0L]比較得來的
CCAPM0 = 0x42; //0010 0010 上升沿捕獲,PWM使能
CR = 1; // 啟動PWM
}
/********************************************************************
* 名稱 : 延時函數
* 功能 : 延時T*MS
* 輸入 : T
* 輸出 : 無
***********************************************************************/
void ms_delay(unsigned int t)
{
unsigned int i;
for (t; t > 0; t--) //外層循環t次
for (i = 1320;i > 0; i--) //內層循環110*12次 ,12系列比51快12倍
;
}
作者:
雪落有聲
時間:
2013-10-16 13:37
太感謝了
作者:
XUSHENG
時間:
2014-8-19 12:52
太感謝了,學習學習~~
作者:
hkccd
時間:
2014-8-19 13:10
呼吸燈其實挺簡單的,,就是慢慢的改變pwm脈沖寬度,達到讓燈慢慢亮又慢慢暗的效果
作者:
XUSHENG
時間:
2014-8-22 11:39
hkccd 發表于 2014-8-19 13:10
呼吸燈其實挺簡單的,,就是慢慢的改變pwm脈沖寬度,達到讓燈慢慢亮又慢慢暗的效果
我用PCA模塊做PWM輸出,定時器中斷,使500MS改變占空比,我要如果設置?請求助。
作者:
詩和遠方1515
時間:
2016-7-16 14:12
感謝感謝,學習中
作者:
songdaxuan
時間:
2016-7-22 21:53
PWM 脈沖寬度調制
作者:
songdaxuan
時間:
2016-7-22 21:58
利用處理器的數字輸出來控制脈沖寬度
作者:
zl2168
時間:
2016-7-23 12:36
呼吸燈的定義是什么?
作者:
xuhaoyang
時間:
2016-7-23 17:24
分享一個Arduino上用與驅動舵機的PWM輸出:用延時做的效果可以:
void servopulse(int servopin,int myangle)//定義一個脈沖函數
{
pulsewidth=(myangle*11)+500;//將角度轉化為500-2480 的脈寬值
digitalWrite(servopin,HIGH);//將舵機接口電平至高
delayMicroseconds(pulsewidth);//延時脈寬值的微秒數
digitalWrite(servopin,LOW);//將舵機接口電平至低
delay(20-pulsewidth/1000);
}
作者:
xiaoguaishou
時間:
2016-7-25 09:03
之前做過一個 死循環里面通過變量大小分配亮和滅的比值 再用定時器控制比值的變化 就有呼吸燈效果了
作者:
艾菲
時間:
2016-7-25 10:16
定時器
作者:
pan2019
時間:
2016-7-25 11:55
Delay(20);
作者:
lml_s4
時間:
2016-7-25 12:06
PWM 脈沖寬度調制
作者:
ztrdiy
時間:
2016-7-25 14:31
我也是來學習的,回頭做下實驗。
作者:
shanchile
時間:
2016-7-27 12:09
學習
作者:
YSY521
時間:
2024-3-30 10:33
哈嘍,大佬,現在是2024年,你還在嗎
歡迎光臨 (http://www.zg4o1577.cn/bbs/)
Powered by Discuz! X3.1
主站蜘蛛池模板:
成年无码av片在线
|
日韩一区二区三区在线
|
av在线免费观看网址
|
欧美美女一区二区
|
成人国产精品久久
|
日韩国产在线
|
国产精品av久久久久久毛片
|
久久久五月天
|
91在线精品秘密一区二区
|
久久国产精品久久久久久
|
亚洲区一区二
|
久久久久久久久精
|
国产精品99久久久久久www
|
亚洲精品在线播放
|
成人国产精品一级毛片视频毛片
|
黄色在线免费观看
|
成人在线精品视频
|
国产精品小视频在线观看
|
国产小视频在线
|
久久国产精品免费一区二区三区
|
免费成人av网站
|
久久久精品一区
|
九九热在线视频免费观看
|
欧美激情精品久久久久久变态
|
91视频在线
|
中文字字幕一区二区三区四区五区
|
国产激情视频在线观看
|
久久久久一区二区
|
国产精品久久久久久久久久久新郎
|
久久久久黄
|
99久久免费观看
|
中文字幕av一区二区三区
|
久久综合狠狠综合久久综合88
|
综合欧美亚洲
|
中文字幕成人
|
丁香久久
|
亚洲视频免费在线播放
|
国产福利在线
|
国精品一区
|
国产午夜精品一区二区三区在线观看
|
欧日韩在线观看
|