標(biāo)題: 給大家來個(gè)步進(jìn)電機(jī)的程序 [打印本頁]

作者: 這個(gè)人    時(shí)間: 2017-9-21 18:01
標(biāo)題: 給大家來個(gè)步進(jìn)電機(jī)的程序
#include "keyboard.h"

unsigned char keySta[] = {1,1,1,1,1,1,1};//按鍵狀態(tài)
unsigned int keyTime[] = {0,0};
unsigned char keyCnt[] = {0,0};
extern void CheckKey(unsigned char key);
void ScanKey()
{
        static unsigned char keyBuff[] = {0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F};//保存按鍵狀態(tài)
        unsigned char i;
       
        keyBuff[0] = (keyBuff[0] << 1)|Key0;//讀取按鍵狀態(tài)
        keyBuff[1] = (keyBuff[1] << 1)|Key1;//讀取按鍵狀態(tài)
        keyBuff[2] = (keyBuff[2] << 1)|Key2;//讀取按鍵狀態(tài)
        keyBuff[3] = (keyBuff[3] << 1)|Key3;//讀取按鍵狀態(tài)
        keyBuff[4] = (keyBuff[4] << 1)|Key4;//讀取按鍵狀態(tài)
        keyBuff[5] = (keyBuff[5] << 1)|Key5;//讀取按鍵狀態(tài)
        keyBuff[6] = (keyBuff[6] << 1)|Key6;//讀取按鍵狀態(tài)
        for(i = 0;i < 7;i++)
        {
                if((keyBuff[i]&0x0F) == 0x0F)//判斷按鍵是不是彈起
                {
                        keySta[i] = 1;
                        if(i == 2)
                        {
                                keyCnt[0] = 0;
                                keyTime[0] = 0;
                        }
                        else if(i == 3)
                        {
                                keyCnt[1] = 0;
                                keyTime[1] = 0;
                        }
                }
                else if((keyBuff[i]&0x0F) == 0x00)//判斷按鍵是不是按下
                {
                        keySta[i] = 0;
                        if(i == 2)
                        {
                                keyCnt[0]++;
                                if(keyCnt[0] >= 200)
                                {
                                        keyCnt[0] = 0;
                                        keyTime[0]++;//為長(zhǎng)按鍵輸入加
                                }
                        }
                        else if(i == 3)
                        {
                                keyCnt[1]++;
                                if(keyCnt[1] >= 200)
                                {
                                        keyCnt[1] = 0;
                                        keyTime[1]++;//為長(zhǎng)按鍵輸入減
                                }
                        }
                }
        }
}
void KeyDrive()
{
        static unsigned char keyBack[] = {1,1,1,1,1,1,1};//保存更改后的按鍵
        static unsigned int keyTim[] = {3,3};//第一次大于600毫秒才長(zhǎng)按輸入,以后每200毫秒輸入一次
        unsigned char i;
       
        for(i = 0;i < 7;i++)
        {
                if((keyBack[i] != keySta[i]))//如果按鍵狀態(tài)更改
                {
                        if(keySta[i] == 0)//如果是按下了某個(gè)按鍵
                        {
                                CheckKey(i);
                        }
                        keyBack[i] = keySta[i];
                }
        }
        if(keyTime[0] > 0)//長(zhǎng)按加
        {
                if(keyTime[0] > keyTim[0])
                {
                        CheckKey(2);
                        keyTim[0]++;
                }
        }
        else
        {
                keyTim[0] = 3;
        }
        if(keyTime[1] > 0)//長(zhǎng)按減
        {
                if(keyTime[1] > keyTim[1])
                {
                        CheckKey(3);
                        keyTim[1]++;
                }
        }
        else
        {
                keyTim[1] = 3;
        }
}






歡迎光臨 (http://www.torrancerestoration.com/bbs/) Powered by Discuz! X3.1