#include <reg52.h>
sbit KEYOUT1 = P3^0;
sbit KEYOUT2 = P3^1;
sbit KEYOUT3 = P3^2;
sbit KEYOUT4 = P3^3;
sbit KEYIN1 = P3^4;
sbit KEYIN2 = P3^5;
sbit KEYIN3 = P3^6;
sbit KEYIN4 = P3^7;
unsigned char code KeyCodeMap[4][4] =
{
{0x31,0x32,0x33,0x26},
{0x34,0x35,0x36,0x25},
{0x37,0x38,0x39,0x28},
{0x30,0x1B,0x0D,0x27}
};
unsigned char KeyStay[4][4] =
{
{1,1,1,1},{1,1,1,1},{1,1,1,1},{1,1,1,1}
};
long beats = 0;
void ConfigTimer0(void);
void KeyDriver(void);
void main(void)
{
ConfigTimer0();
while(1)
{
KeyDriver();
}
}
void ConfigTimer0(void)
{
TH0 = 0xFC;
TL0 = 0x67;
EA = 1;
ET0 = 1;
TMOD &= 0xF0;
TMOD |= 0x01;
TF0 = 0;
TR0 = 1;
}
void MotorStart(long angle)
{
EA = 0;
beats = (angle * 4076) / 360;
EA = 1;
}
void MotorStop(void)
{
EA = 0;
beats = 0;
EA = 1;
}
void KeyAction(unsigned char KeyCode)
{
static bit MotorDir = 0;
if((KeyCode>=0x30) && (KeyCode<=0x39))
{
if(0 == MotorDir)
{
MotorStart(360 * (KeyCode - 0x30));
}
else
{
MotorStart(-360 * (KeyCode - 0x30));
}
}
else if(0x26 == KeyCode)
{
MotorDir = 0;
}
else if(0x28 == KeyCode)
{
MotorDir = 1;
}
else if(0x25 == KeyCode)
{
MotorStart(90);
}
else if(0x27 == KeyCode)
{
MotorStart(-90);
}
else if(0x1B == KeyCode)
{
MotorStop();
}
}
void KeyDriver(void)
{
unsigned char i,j;
static unsigned char KeyBack[4][4] =
{
{1,1,1,1},{1,1,1,1},{1,1,1,1},{1,1,1,1}
};
for(i=0; i<4; i++)
{
for(j=0; j<4; j++)
{
if(KeyStay[i][j] != KeyBack[i][j])
{
if(0 == KeyBack[i][j])
{
KeyAction(KeyCodeMap[i][j]);
}
KeyBack[i][j] = KeyStay[i][j];
}
}
}
}
void KeyScan(void)
{
unsigned char i;
static unsigned char KeyOut = 0;
static unsigned char KeyBuff[4][4] =
{
{0xF,0xF,0xF,0xF},{0xF,0xF,0xF,0xF},
{0xF,0xF,0xF,0xF},{0xF,0xF,0xF,0xF}
};
KeyBuff[KeyOut][0] = (KeyBuff[KeyOut][0] <<1) | KEYIN1;
KeyBuff[KeyOut][1] = (KeyBuff[KeyOut][1] <<1) | KEYIN2;
KeyBuff[KeyOut][2] = (KeyBuff[KeyOut][2] <<1) | KEYIN3;
KeyBuff[KeyOut][3] = (KeyBuff[KeyOut][3] <<1) | KEYIN4;
for(i=0; i<4; i++)
{
if(0xF0 == KeyBuff[KeyOut][i])
{
KeyStay[KeyOut][i] = 0;
}
else if(0xFF == KeyBuff[KeyOut][i])
{
KeyStay[KeyOut][i] = 1;
}
}
KeyOut++;
KeyOut &= 0x3;
switch(KeyOut)
{
case 0 : KEYOUT4 = 1; KEYOUT1 = 0; break;
case 1 : KEYOUT1 = 1; KEYOUT2 = 0; break;
case 2 : KEYOUT2 = 1; KEYOUT3 = 0; break;
case 3 : KEYOUT3 = 1; KEYOUT4 = 0; break;
default : break;
}
}
void MotorTurn(void)
{
unsigned char tmp;
static unsigned char index = 0;
unsigned char code MotorCode[8] =
{
0xE,0xC,0xD,0x9,0xB,0x3,0x7,0x6
};
if(0 != beats)
{
if(beats > 0)
{
index++;
index &= 0x07;
beats--;
}
else
{
index--;
index &= 0x07; //????????????????????
beats++;
}
tmp = P1;
tmp &= 0xF0;
tmp |= MotorCode[index];
P1 = tmp;
}
else
{
P1 |= 0x0F;
}
}
void InterruptTimer0(void) interrupt 1
{
static bit div = 0;
TH0 = 0xFC;
TL0 = 0x67;
KeyScan();
div = ~div;
if(1 == div)
{
MotorTurn();
}
}
步进电机.......zip
需积分: 5 157 浏览量
2020-02-24
17:43:04
上传
评论 1
收藏 29KB ZIP 举报
「已注销」
- 粉丝: 75
- 资源: 17
最新资源
- 探索tecreate:软件开发的未来之星.zip
- 打标机项目C#源码连接扫码
- 基于SSM的房屋租赁系统的设计与实现
- xyctf:从入门到精通的实用指南.zip
- mmqrcode1714153659780.png
- Screenshot_2024-04-27-06-08-58-486_com.baidu.xin.aiqicha.jpg
- 基于Javaweb+Tomcat+MySQL的大学生公寓管理系统+sql文件.zip
- 实训作业基于javaweb的订单管理系统源码+数据库+实训报告.zip
- 多机调度问题贪心算法基于最小堆和贪心算法求解多机调度问题.zip
- 基于同态加密技术的匿名电子投票系统源码.zip
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈