?? main.c
字號:
//*************************************************************************************************
//*************************************************************************************************
//**<功能>:通過按鍵控制直流電機(jī)運(yùn)轉(zhuǎn)并在LCD上顯示運(yùn)行狀態(tài)。 **
//**<作者>:LastRitter **
//**<完成時(shí)間>:2007年8月8日 **
//**<聯(lián)系方式>:E-Mail:superyongzhe@163.com;QQ:314665354。 **
//*************************************************************************************************
//*************************************************************************************************
#include "includes.h"
#define TIME0H 0xFF
#define TIME0L 0x9C //定時(shí)器0溢出時(shí)間:0.1ms
#define TIME1H 0x3C
#define TIME1L 0xB0 //定時(shí)器1溢出時(shí)間:50ms
//<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
//<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<PWM調(diào)制計(jì)數(shù)>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
//<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
unsigned char uc_MoCount=0;
unsigned char uc_MoChange=128;
//<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
//<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<防抖動(dòng)標(biāo)志>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
//<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
bit b_KeyShock=0; //鍵盤防抖動(dòng)標(biāo)志位。
//當(dāng)按鍵中斷產(chǎn)生時(shí),首先判斷此位。
//0--執(zhí)行鍵盤掃描及鍵碼處理程序;1--不執(zhí)行。
bit b_KillShock=0; //防抖標(biāo)志清除位:0--不清除;1--清除。
unsigned char uc_KillCount=1; //抖動(dòng)標(biāo)志清除計(jì)數(shù),使用定時(shí)器1。
//<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
//<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<鍵盤掃描開啟標(biāo)志>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
//<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
bit b_KeyScan=0; //0--不掃描;
//1--掃描。
void main()
{
vdInitialize();
vWriteCMD(0x80);
vShowChar("Motor Run Status");
vWriteCMD(0xC4);
vShowChar("Stop");
vWriteCMD(0xCC);
vShowNumber(uc_MoChange);
SCANPORT=0x0F;
MOTORPORT=MO_STOP;
//<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<外部中斷0,用于開啟鍵盤掃描及鍵碼處理標(biāo)志>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
IT0=1; // 中斷方式:下降沿。
EX0=1; // 開啟外部中斷。
//<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<定時(shí)器0,定時(shí)器0中斷,用于PWM調(diào)制計(jì)數(shù) >>>>>>>>>>>>>>>>>>>>>>>>
TMOD=0x11;
TH0=TIME0H;
TL0=TIME0L;
TR0=1;
ET0=1;
//<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<定時(shí)器1,用于防抖動(dòng)標(biāo)志清除 >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
TH1=TIME1H;
TL1=TIME1L;
TR1=1; //開啟定時(shí)器1
ET1=1; //開定時(shí)器1中斷
EA=1;
while(1)
{
if(b_KeyScan==1) //如果有按鍵按下,則進(jìn)行按鍵掃描和鍵碼處理。
{
b_KeyScan=0;
vKeyProcess(ucKeyScan());
}
}
}
//*************************************************************************************************
//* *
//* ******************************外部中斷0,用于開啟鍵盤掃描及鍵碼處理****************** *
//* *
//*************************************************************************************************
void vINT0(void) interrupt 0
{
if(b_KeyShock==0)
{
b_KeyScan=1; //開啟鍵盤掃描標(biāo)志。
b_KeyShock=1; //設(shè)置防抖動(dòng)標(biāo)志。
}
else b_KeyShock=0; //如果有抖動(dòng)則不執(zhí)行鍵掃描,恢復(fù)防抖動(dòng)標(biāo)志。
//<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<設(shè)置防抖動(dòng)清除標(biāo)志位 >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
if(b_KeyShock==1)
b_KillShock=1; //如果防抖動(dòng)標(biāo)志位開啟則開啟防抖動(dòng)標(biāo)志清除位,
//300ms后清除防抖動(dòng)標(biāo)志。
}
//*************************************************************************************************
//* *
//* ****************************定時(shí)器0中斷,用于PWM調(diào)制計(jì)數(shù)**************************** *
//* *
//*************************************************************************************************
void vTimer0() interrupt 1
{
if(uc_MoChange>128) //正向。
{
if(uc_MoCount<uc_MoChange)
MOTORPORT=MO_COMMON;
else
MOTORPORT=MO_CUTOFF;
}
else
{
if(uc_MoChange<127) //反向。
{
if(uc_MoCount>uc_MoChange)
MOTORPORT=MO_OPPOSE;
else
MOTORPORT=MO_CUTOFF;
}
else
MOTORPORT=MO_STOP; //停止
}
if(uc_MoCount<255)
uc_MoCount++;
else
uc_MoCount=0;
TH0=TIME0H;
TL0=TIME0L;
}
//*************************************************************************************************
//* *
//* ****************定時(shí)器1中斷,用于計(jì)時(shí)功能和防抖動(dòng)標(biāo)志清除以及顯示報(bào)告**************** *
//* *
//*************************************************************************************************
void vTimer1(void) interrupt 3
{
//<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
//<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<防抖動(dòng)標(biāo)志清除>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
//<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
if(b_KillShock==1)
{
if(uc_KillCount==5) //當(dāng)防抖動(dòng)標(biāo)志位為1時(shí),計(jì)時(shí)300ms后清除抖動(dòng)標(biāo)志位。
{
b_KeyShock=0;
b_KillShock=0;
uc_KillCount=1;
}
else uc_KillCount++;
}
//<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
//<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<恢復(fù)定時(shí)器1溢出時(shí)間>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
//<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
TH1=TIME1H;
TL1=TIME1L;
}
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -