原理圖如下:
1.png (39.34 KB, 下載次數(shù): 56)
下載附件
2021-1-27 15:39 上傳
功能: 第一次按鍵后,馬達開始工作;第二次按鍵則馬達停止。如只按一次,馬達工作30秒后休息5分鐘,并以此循環(huán)工作。
馬達工作時有LED指示。
單片機源程序如下:
#include "INC/SC92F725x_C.H"
sbit LED = P2^1;
sbit KEY = P2^0;
sbit MOTOR = P2^7;
//#define LED P21
//#define KEY P20
//#define MOTOR P27
unsigned char T0RH;
unsigned char T0RL;
unsigned char MotorOnTime;
unsigned int MotorOffTime;
bit flag5ms;
bit flag1s;
bit KeyBackup;
bit KeySta;
bit KeyActionNumber;
bit Active;
void GPIO_Init();
void ConfigTimer0(unsigned int ms);
void KeyScan();
void KeyDriver();
void KeyAction();
void main()
{
GPIO_Init();
ConfigTimer0(1);
while(1)
{
if (flag5ms) //每5ms進行一次按鍵掃描
{
flag5ms = 0;
KeyScan();
KeyDriver();
}
if (Active) //啟動狀態(tài)
{
LED = 0; //LED燈亮
if (flag1s)
{
flag1s = 0;
if (MotorOnTime >= 30) //馬達啟動超過30s?
{
MOTOR = 0; //馬達停止
MotorOffTime++; //馬達停止累加
if (MotorOffTime >= 300) //馬達停止時間超過5分鐘?
{
MotorOnTime = 0; //馬達啟動時間清零
MotorOffTime = 0; //馬達停止時間清零
}
}
else
{
MOTOR = 1; //馬達繼續(xù)啟動
MotorOnTime++; //馬達啟動時間累加
}
}
}
else //待機狀態(tài)
{
LED = 1; //LED燈滅
MOTOR = 0; //馬達停止
MotorOnTime = 0; //馬達啟動時間清零
MotorOffTime = 0; //馬達停止時間清零
}
}
}
void GPIO_Init()
{
P2CON = 0x82; //10000010, P2.7和P2.1輸出,P2.0輸入
P2PH = 0x01; //P2.0帶上拉電阻
SC92F7250_NIO_Init(); //未使用引腳初始化
LED = 1; //LED燈滅
MOTOR = 0; //馬達停止
}
void ConfigTimer0(unsigned int ms)
{
unsigned long tmp;
TMCON = 0x07; //Timer0選擇時鐘Fsys = 12MHz
tmp = 12000000;
tmp = (tmp * ms) / 1000;
tmp = 65536 - tmp;
// tmp = tmp + 20; //計時誤差補償
T0RH = (unsigned char)(tmp>>8);
T0RL = (unsigned char)tmp;
TMOD &= 0xF0;
TMOD |= 0x01;
TH0 = T0RH;
TL0 = T0RL;
ET0 = 1; //定時器0允許
TR0 = 1; //打開定時器0
EA = 1;
}
void KeyScan()
{
static bit KeyIn;
static unsigned char i;
KeyIn = KEY; //讀取按鍵狀態(tài)
if (KeyIn == 0) //按鍵持續(xù)按下10ms視為有效
{
i++;
if (i >= 2)
{
i = 0;
KeySta = 1;
}
}
else if (KeyIn == 1) //按鍵彈起
{
KeySta = 0;
}
}
void KeyDriver()
{
if (KeyBackup != KeySta) //按鍵狀態(tài)發(fā)生變化
{
if (KeyBackup == 1) //按鍵彈起后有效
{
KeyAction();
}
KeyBackup = KeySta; //備份上一次按鍵狀態(tài)
}
}
void KeyAction()
{
if (KeyActionNumber == 0) //第一次按下,進入啟動狀態(tài)
{
KeyActionNumber = 1;
Active = 1;
}
else //再次按下,進入待機狀態(tài)
{
KeyActionNumber = 0;
Active = 0;
}
}
void InterruptTimer0() interrupt 1
{
static unsigned char i;
static unsigned char j;
TH0 = T0RH;
TL0 = T0RL;
i++;
if (i >= 5)
{
i = 0;
flag5ms = 1;
j++;
if (j >= 200)
{
j = 0;
flag1s = 1;
}
}
}
51hei.png (7.65 KB, 下載次數(shù): 52)
下載附件
2021-1-27 15:41 上傳
全部資料51hei下載地址:
MotorDriver.rar
(44.72 KB, 下載次數(shù): 52)
2021-1-27 10:10 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
|