你说的线应该是键盘的连接线。就是将键盘接到主机的线(只有这根线才分颜色),每个牌子的键盘这四根线的颜色顺序都不一定,所以不愿修,实际上,如果你能找到与原键盘一样的键盘,小心打开看好,记下后就可将原键盘修复,这四根线可以用烙铁焊接,但最好用20W内热式,焊接时将烙铁电源拔掉,以免因烙铁漏电将键盘芯片击穿。 另:如能提供牌子、键盘型号,可帮忙找。 很遗憾,只找到Y-SP32的罗枝键盘;可能顺序不一样。 但还有一法,按键盘接口标准,将插头的针正对自己,让里面的小长方形定位键处在上方12点钟方向,然后其1点钟位置的插脚记为1脚,按顺时针方向数分别为2、3、4、5、6脚,用万用表测量各脚与连线的关系:其中 1脚、3脚为空,即,1、3脚与各线均不连通。 2脚为+5V电源线;4脚为键盘数据线;5脚为接地线;6脚为时钟脉冲信号。记下2、4、5、6脚分别对应的颜色。 现在再确定键盘印板上接线已脱落的4个焊点:如果对应的位置上有“V、G、L、D”这四个字母,那么:V代表接2脚+5V电源,G代表接5脚接地线,L代表接时钟脉冲的6脚,D则是接4脚数据线。若没有上述标志,则可试按以下办法查找: 键盘印刷电路板上一般都有一只电解电容,该电容是并接在该板的电源上的,所以与该电容正极连接的接点为V,应与2脚连接,与电解电容负极(对应外壳上有负号标志的一边的引线)相连通的接点应接地,即与5脚相连,其余两点难区分,但只要电源和接地没错,即使接反了再换过来就是了。电源与接地接好,其余两线先临时接上,装好键盘,上机一试,如果不能使用,那可能是时钟与数据线反了,再打开将4、6脚连线互换,应该能将键盘恢复。 累请给分吧.谢谢了
希望采纳

#include<reg51.h>
unsigned char Line,Row,Val;
void delay()
{
unsigned char count;
for(count=0;count<255;count++)
;
}
void delay1()
{
unsigned char count,rt;
for(count=0;count<40;count++)
for(rt=0;rt<100;rt++)
;
}
void InitialCPU(void)
{
P0=0xFF;
P1=0x0F;
P2=0xFF;
P3=0xFF;
}
unsigned char leddata[]=; //"0-9"
unsigned char ledbai(unsigned char dat)
{
unsigned char bai;
bai=dat/100;
if(bai==0)
return 0x00;
P2=0x20;
P0=leddata[bai];
delay();
P2=0x00;
return 0x00;
}
unsigned char ledshi(unsigned char dat)
{
unsigned char shi;
shi=(dat%100)/10;
if(shi==0)
return 0x00;
P2=0x40;
P0=leddata[shi];
delay();
P2=0x00;
return 0x00;
}
void ledge(unsigned char dat)
{
unsigned char ge;
ge=dat%10;
P2=0x80;
P0=leddata[ge];
delay();
}
unsigned char bin=1;
void ledplay(unsigned char dat)
{ //LED显示函数
if(bin==1){
ledbai(dat);
bin++;
}
else if(bin==2){
ledshi(dat);
bin++;
}
else if(bin==3){
ledge(dat);
bin=1;
}
}
unsigned char futemp=0,data1=0,data2=0;
void InitialTimer0(void)
{
TMOD=0x01;
TH0=(65536-1000)/256;
TR0=1; //启动T0
EA=1;
ET0=1; //允许T0中断
}
void Timer0(void) interrupt 1 using 3
{
TR0=0;
if(data1==0&&futemp==0&&data2==0){ //LED显示data1,即初始值
ledplay(data1);
}
else if(data1!=0&&futemp==0&&data2==0) // data1有值了,显示data1,
ledplay(data1);
else if(data1==0&&futemp!=0&&data2==0) //有两种可能,1、数据data1为零;2、直接data1没有给它值。总之显示data1
ledplay(data1);
else if(data1!=0&&futemp!=0&&data2==0) //输入的是符号,接着显示data1
ledplay(data1);
else if(data1!=0&&futemp!=0&&data2!=0) //显示的是data2
ledplay(data2);
TH0=(65536-100)/256;
TR0=1;
}
void denghou()
{
data2=0;
futemp=0;
}
unsigned char KeyTemp,CheckValue,Key1=0x00,Key2=0x00;
void Dispose()
{
unsigned char Val;
if(Line==0x01)
Line=0;
else if(Line==0x02)
Line=1;
else if(Line==0x04)
Line=2;

else if(Line==0x08)
Line=3;
if(Row==0x10)
Row=0;
else if(Row==0x20)
Row=1;
else if(Row==0x40)
Row=2;
else if(Row==0x80)
Row=3;
Val=Line*4+Row;
if(Val<10){ //存数
if(futemp==0){ //存在data1中
if(data1==0)
data1=Val;
else
data1=data1*10+Val;
}
else{ //存在data2中
if(data2==0)
data2=Val;
else
data2=data2*10+Val;
}
}
else if(Val>9&&Val<16){
if(Val!=13&&Val!=12)
futemp=Val; //存符号并进行响应处理
else if(Val==12){
data1=0;
data2=0;
futemp=0;
}
else if(Val==13){
if(futemp==10){
data1=data1*data2;
denghou();
}
else if(futemp==11){
data1=data1/data2;
denghou();
}
else if(futemp==14){
data1=data1-data2;
denghou();
}
else if(futemp==15){
data1=data1+data2;
denghou();
}
else{
while(1){
P2=0xff;
P0=0x00;
}
}
}
}
else
while(1){
P2=0xff;
P0=0x00;
} //显示错误
}
unsigned char GetKey1(void)
{
P1=0x0F;
CheckValue=P1^0x0F;
if(CheckValue==0x00)
return 0x00;
else if(CheckValue==0x01)
Line=CheckValue;
else if(CheckValue==0x02)
Line=CheckValue;
else if(CheckValue==0x04)
Line=CheckValue;
else if(CheckValue==0x08)
Line=CheckValue;
Key1=0x0F;
return Key1;
}
unsigned char GetKey2(void)
{
P1=0xF0;
CheckValue=P1^0xF0;
if(CheckValue==0x00)
return 0x00;
else if(CheckValue==0x10)
Row=CheckValue;
else if(CheckValue==0x20)
Row=CheckValue;
else if(CheckValue==0x40)
Row=CheckValue;
else if(CheckValue==0x80)
Row=CheckValue;
delay1();
KeyTemp = P1^0xF0;
if(KeyTemp==CheckValue)
return 0x00;
Key2=0xF0;
return Key2;
}
void main()
{
unsigned char Key1,Key2;
InitialCPU();
InitialTimer0();
while(1)
{
Key1=GetKey1();
Key2=GetKey2();
if(Key1!=0x00&&Key2!=0x00)
{

Dispose();
P3=0x00;
}
}
}


