欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136
標題:
STC15F2K60S2單片機可調脈沖數反應式步進電機驅動器程序
[打印本頁]
作者:
無窮小量
時間:
2019-3-21 21:24
標題:
STC15F2K60S2單片機可調脈沖數反應式步進電機驅動器程序
單片機源碼:
#include <STC15.h>
#include <INTRINS.h>
sbit PWMOUT = P3^7;
sbit CHFWD = P3^6;
unsigned char HighRH = 0; //高電平重載值的高字節
unsigned char HighRL = 0; //高電平重載值的低字節
unsigned char LowRH = 0; //低電平重載值的高字節
unsigned char LowRL = 0; //低電平重載值的低字節
void Delay500ms();
void ConfigPWM(unsigned int fr, unsigned char dc);
void ClosePWM();
void Delay20ms(); //@6.000MHz
void DigDisplay();
unsigned int i;
typedef unsigned int u16;
typedef unsigned char u8;
unsigned int cou;
u8 code smgduan[10]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90}; //共陽
void delay(u16 i)
{
while(i--);
}
void main(){
AUXR &= 0X7f;//12T
P3M1 &= 0x00;
P3M0 |= 0xc0;//強推挽
cou = 1260;
IT0 = 1;
EX0 = 1;
IT1 = 1;
EX1 = 1;
EA = 1; //開總中斷
while (1){
ConfigPWM(15, 50); //頻率 15Hz,占空比 50%
while(i <= 45){DigDisplay();};
i = 0;
ClosePWM();
ConfigPWM(20, 50); //頻率 20Hz,占空比 50%
while(i <= 60){DigDisplay();};
i = 0;
ClosePWM();
ConfigPWM(36, 50); //頻率 55Hz,占空比 50%
while(i <= cou){DigDisplay();};
i = 0;
ClosePWM(); //關閉 PWM
ConfigPWM(20, 50); //頻率 20Hz,占空比 50%
while(i <= 60){DigDisplay();};
i = 0;
ClosePWM();
ConfigPWM(15, 50); //頻率 15Hz,占空比50%
while(i <= 45){DigDisplay();};
i = 0;
ClosePWM(); //關閉 PWM,相當于占空比 100%
CHFWD = ~CHFWD;
Delay500ms();
}
}
/* 數碼管顯示*/
void DigDisplay()
{
u16 s;
for(s=0;s<4;s++)
{
switch(s)
{
case(0):
P2 = 0xfe;P0 = smgduan[0]; break;
case(1):
P2 = 0xfd;P0 = smgduan[(cou/10)%10]; break;
case(2):
P2 = 0xfb;P0 = smgduan[(cou/100)%10]; break;
case(3):
P2 = 0xf7;P0 = smgduan[(cou/1000)]; break;
}
delay(3);
P0=0xFF;
}
}
void Delay27ms() //@6.000MHz
{
unsigned char i, j, k;
_nop_();
_nop_();
i = 1;
j = 158;
k = 145;
do
{
do
{
while (--k);
} while (--j);
} while (--i);
}
void Delay500ms() //@6.000MHz
{
unsigned char i, j, k;
_nop_();
_nop_();
i = 12;
j = 103;
k = 57;
PWMOUT = 0;
do
{
do
{ DigDisplay();
while (--k);
} while (--j);
} while (--i);
}
/* 配置并啟動 PWM,fr-頻率,dc-占空比 */
void ConfigPWM(unsigned int fr, unsigned char dc){
unsigned int high, low;
unsigned long tmp;
tmp = (6000000/12) / fr; //計算一個周期所需的計數值
high = (tmp*dc) / 100; //計算高電平所需的計數值
low = tmp - high; //計算低電平所需的計數值
high = 65536 - high + 12; //計算高電平的重載值并補償中斷延時
low = 65536 - low + 12;//計算低電平的重載值并補償中斷延時
HighRH = (unsigned char)(high>>8); //高電平重載值拆分為高低字節
HighRL = (unsigned char)high;
LowRH = (unsigned char)(low>>8); //低電平重載值拆分為高低字節
LowRL = (unsigned char)low;
TMOD &= 0x0F; //清零 T1 的控制位
TMOD |= 0x10; //配置 T1 為模式 1
TH1 = HighRH; //加載 T1 重載值
TL1 = HighRL;
ET1 = 1; //使能 T1 中斷
TR1 = 1; //啟動 T1
PWMOUT = 1; //輸出高電平
}
/* 關閉 PWM */
void ClosePWM(){
TR1 = 0; //停止定時器
ET1 = 0; //禁止中斷
PWMOUT = 1; //輸出高電平
}
void Add() interrupt 0
{
EX0 = 0;
Delay27ms();
if(P3^2 == 0){
cou = cou + 10;
}
//while(!P3^2);
EX0 = 1;
}
void Sub() interrupt 2
{
EX1 = 0;
Delay27ms();
if(P3^3 == 0){
cou = cou - 10;
}
//while(!P3^3);
EX1 = 1;
}
/* T0 中斷服務函數,產生 PWM 輸出 */
void InterruptTimer1() interrupt 3{
if (PWMOUT == 1){ //當前輸出為高電平時,裝載低電平值并輸出低電平
TH1 = LowRH;
TL1 = LowRL;
i++;
PWMOUT = 0;
//DigDisplay();
}else{ //當前輸出為低電平時,裝載高電平值并輸出高電平
TH1 = HighRH;
TL1 = HighRL;
PWMOUT = 1;
//DigDisplay();
}
}
復制代碼
huasheng_3jieh.rar
2019-3-21 21:23 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
33.87 KB, 下載次數: 39, 下載積分: 黑幣 -5
作者:
hxszrb
時間:
2020-6-10 22:26
來學習的
歡迎光臨 (http://www.raoushi.com/bbs/)
Powered by Discuz! X3.1