通过矩阵键盘输入控制TPL0501的电阻值,但是一直不成功,求高手指导
#include<reg51.h>
#include<intrins.h>
#define uint unsigned int
#define uchar unsigned char
#define ulong unsigned long
#define GPIO_KEY P0
sbit TPL0501_DIN=P3^5;
sbit TPL0501_SCLK=P3^6;
sbit TPL0501_CS=P3^7;
unsigned char k[3];
//键盘扫描子程序
void KeyScan(void)
{
int i=0;
unsigned char n;//扫描第一行
GPIO_KEY=0xEF;
n=GPIO_KEY;
n&=0x0F;
if(n!=0x0F)
{
delay1ms(1);//去抖动
GPIO_KEY=0xEF;
n=GPIO_KEY;
n&=0x0F;
if(n!=0x0F)
{
switch(n)
{
case (0x0E):KeyValue=0;break;
case (0x0D):KeyValue=1;break;
case (0x0B):KeyValue=2;break;
case (0x07):KeyValue=3;break;
}
}
}
GPIO_KEY=0xDF;//扫描第二行
n=GPIO_KEY;
n&=0x0F;
if(n!=0x0F)
{
delay1ms(1);
GPIO_KEY=0xDF;
n=GPIO_KEY;
n&=0x0F;
if(n!=0x0F)
{
switch(n)
{
case(0x0E):KeyValue=4;break;
case(0x0D):KeyValue=5;break;
case(0x0B):KeyValue=6;break;
case(0x07):KeyValue=7;break;
}
}
}
GPIO_KEY=0xBF;//扫描第三行
n=GPIO_KEY;
n&=0x0F;
if(n!=0x0F)
{
delay1ms(1);
GPIO_KEY=0xBF;
n=GPIO_KEY;
n&=0x0F;
if(n!=0x0F)
{
switch(n)
{
case(0x0E):KeyValue=8;break;
case(0x0D):KeyValue=9;break;
case(0x0B):KeyValue=ma2[0];break;
case(0x07):genzong();break;
}
}
}
GPIO_KEY=0x7F;//扫描第四行
n=GPIO_KEY;
n&=0x0F;
if(n!=0x0F)
{
delay1ms(1);
GPIO_KEY=0x7F;
n=GPIO_KEY;
n&=0x0F;
if(n!=0x0F)
{
switch(n)
{
case(0x0E):KeyValue=ma3[0];break;
case(0x0D):KeyValue=ma3[1];break;
case(0x0B):KeyValue=ma3[2];break;
case(0x07):KeyScan();break;
}
}
}
k[i++]=KeyValue;
}
void TPL0501_write(uint temp)
{
uint i,change_number;
change_number=temp3<<2;
TPL0501_CS=1;
TPL0501_SCLK=0;
TPL0501_CS=0;
for(i=0;i<8;i++)
{
_nop_();
TPL0501_SCLK=0;
_nop_();
TPL0501_DIN=(bit)(change_number&0x800);
_nop_();
_nop_();
_nop_();
change_number<<=1;
TPL0501_SCLK=1;
_nop_();
_nop_();
_nop_();
}
TPL0501_SCLK=0;
TPL0501_CS=1;
}
void main()
{
float key;
while(1)
{
key_scan();
key=k[0]*10.0+k[1]+k[2]/10.0+k[3]/100.0;
TPL0501_write(key);
}
}
用万用表测TPL0501的电阻值时,电阻一直不稳定,按键输入后电阻显示也没有规律,,求大神指导修改
或者有没有其他程序可以控制TPL0501?
|
请问楼主这个任务成功了吗?我也是新手,有问题想请教一下,网上找不到相关例程。。。