欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136
標題:
STC12C5A60S2片內PWM按鍵控制加減
[打印本頁]
作者:
騰飛的龍
時間:
2015-11-14 17:05
標題:
STC12C5A60S2片內PWM按鍵控制加減
/*****************************************************
功能:通過按鍵控制STC12C5A60S2內部PWM通過
P1.3和P1.4輸出PWM控制LED并用數碼管顯示
單片機:STC12C5A60S2
晶振:11.0592M
作者:蘇義江改編自網絡
時間:2015-7-22
***************************************************/
#include"12C5A.h"
#define uint unsigned int
#define uchar unsigned char
uchar code table[18]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,
0x82,0xf8,0x80,0x90,0x88,0x83,
0xc6,0xa1,0x86,0x8e,0x89,0x8c};
sbit wei=P0^6;
sbit duan=P0^7;
sbit jiaPWM=P1^0;//通過P10低電平(按鍵)加PWM占空比
sbit jianPWM=P1^1; //按鍵P11低電平 減PWM占空比
sbit In1=P0^0;
sbit In2=P0^1;
sbit In3=P0^2;
sbit In4=P0^3;
void DelayMs(uchar ms);
void init_PWM(); //PWM 初始化
void PWM0_change(uchar type,uchar change);//PWM調整函數
void PWM0_set(uchar empty); //直接付PWM的值
//stc10f系列 單周期指令的ms級延時
void DelayMs(uchar ms) //這個延時可能不對,非關鍵部分,可自己修改
{
uint i; while(ms--)
{
for(i = 0; i < 850; i++);
}
}
void init_PWM()
{
CCON=0X00;
CH=0;
CL=0;
//時鐘分頻也就是輸出的頻率。 0X00:以系統時鐘/12 為時鐘源,0X02:系統時鐘/2,0x08:系統時鐘
CMOD=0X02;
//起始占空比,0XC0:占空比為25%,0X80:占空比為50%,0X40:占空比為75%
PWM0_set(0X80); //
PCA_PWM1=0x00;
PCA_PWM0=0x00; //控制占空比的第九位為0
//0X42:8位PWM P1.3輸出, P1.4輸出,無中斷;0X53:8位PWM輸出,下降沿產生中斷;
//0X63:上升沿產生中斷;0X73:跳變沿產生中斷
CCAPM0=0X42;
CCAPM1=0X42;
CR=1; //計時器開始工作
}
void PWM0_set(uchar empty) //直接設置占空比
{
CCAP0L=empty;
CCAP0H=empty;
CCAP1L=empty;
CCAP1H=empty;
}
//占空比調節函數
void PWM0_change(uchar type,uchar change) //type=0減占空比,1增加占空比
//change: 0X0C 約5%,0X05約2%
{
if(type==0)
{
if(CCAP0L<0XE6) //<90%
{
CCAP0L+=change;
CCAP0H+=change;
CCAP1L+=change;
CCAP1H+=change;
}
}
else
{
if(CCAP0L>0X19) //>10%
{
CCAP0L-=change;
CCAP0H-=change;
CCAP1L-=change;
CCAP1H-=change;
}
}
}
void display()
{
uchar bai,shi,ge;
bai=CCAP0L/100;
shi=CCAP0L/10%10;
ge=CCAP0L%10;
wei=1;
P2=0xfe;
wei=0;
duan=1;
P2=table[bai];
DelayMs(500);
P2=0xff;
wei=1;
P2=0xfd;
wei=0;
duan=1;
P2=table[shi];
DelayMs(500);
P2=0xff;
wei=1;
P2=0xfb;
wei=0;
duan=1;
P2=table[ge];
DelayMs(500);
P2=0xff;
}
void main()
{
init_PWM(); //初始化,PWM輸出
while(1)
{
if(jiaPWM==0) //按鍵減PWM占空比
{
DelayMs(500); //按鍵消抖
while(jiaPWM==0); //按鍵釋放才跳出執行下一步
PWM0_change(1,0X0c); //change: 0X0C 約5%,0X05約2%
display();
}
if(jianPWM==0)//按鍵 增 PWM占空比
{
DelayMs(500);
while(jianPWM==0);
PWM0_change(0,0X0c); //change: 0X0C 約5%,0X05約2%
display();
}
}
}
//一下程序P13口和P14口直接賦PWM值,控制程序速度,直接給a和b賦值
// pwm初始化 */
/*void initpwm()
{
CCAPM0=0x42; //使能比較器,啟動脈寬調節模式
//控制輸出占空比(與CL比較,當CL<CCAP0L時輸出低電平,反之高電平)
CCAP0L=0x50;
CCAP0H=0x50;
//CL溢出時,CCAP0H自動裝入CCAP0L
CCAPM1=0x42; //PWM1同上
CCAP1L=0x50;
CCAP1H=0x50;
CR=1; //PCA計數啟動
}
// -------- 調速 ---------
void format(uchar a,uchar b)
{
CCAP0L=a;//控制輸出占空比(與CL比較,當CL<CCAP0L時輸出低電平,反之高電平)
CCAP0H=a;//CL溢出時,CCAP0H自動裝入CCAP0L
CCAP1L=b;
CCAP1H=b;
}
// -------- 后退 ---------
void turnback(uchar a,uchar b)
{
format(a,b);
In1=0;In2=1;In3=0;In4=1;
}
// -------- 前進 ---------
void run(uchar a,uchar b)
{
format(a,b);
In1=1;In2=0;In3=1;In4=0;
}
// -------- 停止 ---------
void stop()
{
In1=1;In2=1;In3=1;In4=1;
}*/
復制代碼
作者:
aidanpianji
時間:
2015-11-14 19:31
有難度。看不懂
作者:
騰飛的龍
時間:
2015-11-15 13:27
STC單片機自帶輸出PWM功能。用PWM可以控制燈的漸亮和漸暗,也可以控制小車電機轉動快慢。
作者:
林霖
時間:
2016-10-26 15:17
謝謝樓主,可以用來研究下STC12C5A60S2的pwm。
作者:
45555mkkl
時間:
2016-10-31 21:43
頭文件在KEIL編譯器找不到,這怎么解決呢
作者:
騰飛的龍
時間:
2016-11-5 12:45
45555mkkl 發表于 2016-10-31 21:43
頭文件在KEIL編譯器找不到,這怎么解決呢
論壇里有在keil里面添加STC頭文件。你找一找
歡迎光臨 (http://www.raoushi.com/bbs/)
Powered by Discuz! X3.1