中级会员
 
- 积分
- 270
- 金钱
- 270
- 注册时间
- 2014-6-30
- 在线时间
- 29 小时
|
发表于 2014-7-14 22:16:41
|
显示全部楼层
机械编码器程序
unsigned char Temp[5];
unsigned char code Ytemp[5]={0x03,0x01,0x00,0x02,0x03};
unsigned char code Ztemp[5]={0x03,0x02,0x00,0x01,0x03};
unsigned char Count=0x00;
unsigned char io(void)
{
if((A==0)&&(BB==0)) return 0x00;
if((BB==0)&&(A==1)) return 0x01;
if((A==0)&&(BB==1)) return 0x02;
if((A==1)&&(BB==1)) return 0x03;
return 0xff;
}
unsigned char feisousm(void)
{
// if(sm_all_time==0xff)
//{
if(Count<5)
{
unsigned char b,m;
b=io();
m=Count;
if(b==Temp[m-1]) {return 0;} //如果是相同的值,就不采。
Temp[Count]=io();
Count++;
}
if(Count==5)
{
unsigned char a;
for(a=0;a<5;a++)
{
if(Temp[a]!=Ztemp[a]) break;
}
if(a==5) {Count=1;Temp[0]=0x03;return 'z';}
for(a=0;a<5;a++)
{
if(Temp[a]!=Ytemp[a]) break;
}
if(a==5) {Count=1;Temp[0]=0x03;return 'y';}
if(a<5) {for(a=0;a<4;a++)
{
Temp[a]=Temp[a+1];
Count=4;
}
}
}
/**************************************PS/2口版本************************************/
void send_kb(unsigned char sm)
{
switch(sm)
{
case 0xdf: send(0x33);send(0xf0);send(0x33);break; //h键,意义:回车
case 'y': send(0x32);send(0xf0);send(0x32);break; //b键,意义:左
case 'z': send(0x0b);send(0xf0);send(0x0b);break; //F6, 意义:右
case 0xef: send(0x54);send(0xf0);send(0x54);break; //[键,意义:静音0000000
case 0xfb: send(0x42);send(0xf0);send(0x42);break; //k键,意义:血压000000
case 0xf7: send(0x3b);send(0xf0);send(0x3b);break; //j键,意义:冻结0000000 fd
case 0xfd: send(0xe0);send(0x70);send(0xe0);send(0xf0);send(0x70);break;//insert键,意义:打印00000
case 0xfe: send(0x35);send(0xf0);send(0x35);break; //y键 意义:回主窗口 00000000
//defauit:break;
}
}
/********************************************************************************/
///////////////////////////////////////////////////////////////////////////////////////////////
/*返回0为无效值,上面的函数接口必须做判断。*/
unsigned char send_sm(void)
{
unsigned temp,temp1,a;
temp=P1; //读回数据
temp&=0x3f;
if(temp==0x3f) return 0;
delay_us(50);
for(a=9;a>0;a--)
{
temp1=P1;
if((temp1&0x3f)!=temp) return 0;
delay_us(50);
}
while(1)//等待按键的松开。
{
a=P1;
if((a|0xc0)==0xff)
{
temp|=0xc0;
return(temp); //经过 上面的去战抖,返回值;
}
}
}
希望对你有用 |
|