找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開(kāi)始

搜索
查看: 1903|回復(fù): 0
打印 上一主題 下一主題
收起左側(cè)

給大家來(lái)個(gè)步進(jìn)電機(jī)的程序

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:198235 發(fā)表于 2017-9-21 18:01 | 只看該作者 回帖獎(jiǎng)勵(lì) |倒序?yàn)g覽 |閱讀模式
#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;
        }
}

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

手機(jī)版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表