找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1552|回复: 0
打印 上一主题 下一主题
收起左侧

给大家来个步进电机的程序

[复制链接]
跳转到指定楼层
楼主
ID:198235 发表于 2017-9-21 18:01 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
#include "keyboard.h"

unsigned char keySta[] = {1,1,1,1,1,1,1};//按键状态
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};//保存按键状态
        unsigned char i;
       
        keyBuff[0] = (keyBuff[0] << 1)|Key0;//读取按键状态
        keyBuff[1] = (keyBuff[1] << 1)|Key1;//读取按键状态
        keyBuff[2] = (keyBuff[2] << 1)|Key2;//读取按键状态
        keyBuff[3] = (keyBuff[3] << 1)|Key3;//读取按键状态
        keyBuff[4] = (keyBuff[4] << 1)|Key4;//读取按键状态
        keyBuff[5] = (keyBuff[5] << 1)|Key5;//读取按键状态
        keyBuff[6] = (keyBuff[6] << 1)|Key6;//读取按键状态
        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]++;//为长按键输入加
                                }
                        }
                        else if(i == 3)
                        {
                                keyCnt[1]++;
                                if(keyCnt[1] >= 200)
                                {
                                        keyCnt[1] = 0;
                                        keyTime[1]++;//为长按键输入减
                                }
                        }
                }
        }
}
void KeyDrive()
{
        static unsigned char keyBack[] = {1,1,1,1,1,1,1};//保存更改后的按键
        static unsigned int keyTim[] = {3,3};//第一次大于600毫秒才长按输入,以后每200毫秒输入一次
        unsigned char i;
       
        for(i = 0;i < 7;i++)
        {
                if((keyBack[i] != keySta[i]))//如果按键状态更改
                {
                        if(keySta[i] == 0)//如果是按下了某个按键
                        {
                                CheckKey(i);
                        }
                        keyBack[i] = keySta[i];
                }
        }
        if(keyTime[0] > 0)//长按加
        {
                if(keyTime[0] > keyTim[0])
                {
                        CheckKey(2);
                        keyTim[0]++;
                }
        }
        else
        {
                keyTim[0] = 3;
        }
        if(keyTime[1] > 0)//长按减
        {
                if(keyTime[1] > keyTim[1])
                {
                        CheckKey(3);
                        keyTim[1]++;
                }
        }
        else
        {
                keyTim[1] = 3;
        }
}

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表