請(qǐng)問(wèn)有沒(méi)有一個(gè)CH452高級(jí)技術(shù)支持的電話???

我顯示正常,鍵盤不行~想請(qǐng)教下!

1.你說(shuō)的鍵盤不行是指哪方面? 沒(méi)有按鍵中斷嗎? 請(qǐng)說(shuō)詳細(xì)些. 2.可以直接打公司電話找CH452技術(shù)支持工程師


首先我用的是4線模式的~. 我現(xiàn)在如果寫0x403的話,一按鍵,DOUT就變低了,.永遠(yuǎn)不起來(lái)了. 到底是寫423還是403啊 ??

我只需要電平變化引起中斷就好了.


是0x403 一按鍵,DOUT就變低說(shuō)明DOUT輸出有效的鍵盤中斷. 這時(shí)你要發(fā)出讀取按鍵代碼命令,當(dāng)7位按鍵代碼輸出完后,DOUT才恢復(fù)高電平.


自動(dòng)恢復(fù)嗎高嗎?? 我的就起不來(lái)了...

我發(fā)送了讀取按鍵代碼指令啊, 時(shí)序肯定沒(méi)問(wèn)題的,因?yàn)槲野l(fā)送沒(méi)錯(cuò).讀的時(shí)候好象什么都沒(méi)有.!


當(dāng)按鍵代碼輸出完后,讀走了鍵值,CH452就會(huì)將DOUT引腳自動(dòng)恢復(fù)為默認(rèn)的高電平. 你沒(méi)有讀取走鍵值,那DOUT肯定一直是低的. 你好好檢查下讀取鍵值的子程序.


//*-------------------------------------------------------------------------------------- //* 函數(shù)名 : CH452_Wirte //* 功能 : 寫操作命令到CH452 //* 輸入?yún)?shù) : cmd //* 返回值 : 無(wú) //* 創(chuàng)建人 : 熊宇 2007/4/10 //*--------------------------------------------------------------------------------------

void CH452_Wirte(unsigned int cmd) { unsigned char i;

AT91F_AIC_DisableIt( AT91C_BASE_AIC , AT91C_ID_PIOA ); //禁止鍵盤中斷,防止傳輸過(guò)程中被CH452中斷而進(jìn)入中斷服務(wù)程序中再次傳輸

AT91F_PIO_ClearOutput( AT91C_BASE_PIOA , LOAD ); //命令開始,LOAD=0

for( i=0; i<12; i++ ) //送入12位數(shù)據(jù),低位在前 { AT91F_PIO_ClearOutput( AT91C_BASE_PIOA , DCLK ) ;

if( cmd & 0x01 ) { AT91F_PIO_SetOutput( AT91C_BASE_PIOA , DIN ) ; } else { AT91F_PIO_ClearOutput( AT91C_BASE_PIOA , DIN ) ; } // 輸出位數(shù)據(jù)

cmd>>=1;

AT91F_PIO_SetOutput( AT91C_BASE_PIOA , DCLK ) ; }

AT91F_PIO_SetOutput( AT91C_BASE_PIOA , LOAD ); //加載數(shù)據(jù),LOAD上升沿

AT91F_AIC_EnableIt( AT91C_BASE_AIC , AT91C_ID_PIOA ); }

//*-------------------------------------------------------------------------------------- //* 函數(shù)名 : CH452_Read //* 功能 : 讀鍵盤編碼 //* 輸入?yún)?shù) : 無(wú) //* 返回值 : keycode //* 創(chuàng)建人 : 熊宇 2007/4/10 //*--------------------------------------------------------------------------------------

unsigned char CH452_Read( void ) { unsigned char i; unsigned char cmd,keycode; //定義命令字,和數(shù)據(jù)存儲(chǔ)器 keycode=0x00; //清除keycode

AT91F_AIC_DisableIt( AT91C_BASE_AIC , AT91C_ID_PIOA ); //禁止鍵盤中斷,防止傳輸過(guò)程中被CH452中斷而進(jìn)入中斷服務(wù)程序中再次傳輸

cmd = 0x07; //讀按鍵的命令字

AT91F_PIO_ClearOutput( AT91C_BASE_PIOA , LOAD ); for( i=0; i<4; i++ ) // 只需要發(fā)出高4位 { AT91F_PIO_ClearOutput( AT91C_BASE_PIOA , DCLK ) ;

if( cmd & 0x01 ) { AT91F_PIO_SetOutput( AT91C_BASE_PIOA , DIN ) ; } else { AT91F_PIO_ClearOutput( AT91C_BASE_PIOA , DIN ) ; } // 輸出位數(shù)據(jù) cmd>>=1; //往右移一位

AT91F_PIO_SetOutput( AT91C_BASE_PIOA , DCLK ) ; //產(chǎn)生時(shí)鐘上升沿鎖通知CH451輸入位數(shù)據(jù) }

AT91F_PIO_SetOutput( AT91C_BASE_PIOA , LOAD ); //產(chǎn)生加載上升沿通知CH451處理命令數(shù)據(jù)

for( i=0; i<7; i++ ) { //Delay(10); keycode<<=1; //數(shù)據(jù)移入keycode,高位在前,低位在后

if( AT91F_PIO_IsInputSet( AT91C_BASE_PIOA , DOUT ) == 1 ) { keycode++; }

AT91F_PIO_SetOutput( AT91C_BASE_PIOA , DCLK );

AT91F_PIO_ClearOutput( AT91C_BASE_PIOA , DCLK ); }

AT91F_PIO_SetOutput( AT91C_BASE_PIOA , DCLK );

AT91F_AIC_EnableIt( AT91C_BASE_AIC , AT91C_ID_PIOA );

return(keycode); //反回鍵值

2個(gè)函數(shù)大俠請(qǐng)過(guò)目.. 第1個(gè)發(fā)送的百分之百是對(duì)的.因?yàn)轱@示正常的. 第2個(gè)我看了也沒(méi)錯(cuò)啊,我的操作速度不快的.時(shí)序應(yīng)該都滿足.

現(xiàn)在我又出現(xiàn)不斷進(jìn)中斷的現(xiàn)象了.有的時(shí)候又進(jìn)不了,我懷疑是一些干擾的問(wèn)題.


謝謝您的多次回復(fù)~~ 請(qǐng)?jiān)賻臀铱纯聪旅婺莻€(gè)讀鍵值的程序..

如果這個(gè)是對(duì)的,那就是硬件方面的問(wèn)題了..


讀鍵值的程序有點(diǎn)問(wèn)題,按下面這個(gè)試下. 還有硬件上你要看下數(shù)碼管有沒(méi)有漏電, 你用示波器看下DIN,DCLK,LOAD幾跟信號(hào)線輸出的波形可正常.要是有干擾,要檢查下電源線和地線的布線好不好.

unsigned char CH452_Read( void ) { unsigned char i; unsigned char cmd,keycode; //定義命令字,和數(shù)據(jù)存儲(chǔ)器 keycode=0x00; //清除keycode

AT91F_AIC_DisableIt( AT91C_BASE_AIC , AT91C_ID_PIOA ); //禁止鍵盤中斷,防止傳輸過(guò)程中被CH452中斷而進(jìn)入中斷服務(wù)程序中再次傳輸

cmd = 0x07; //讀按鍵的命令字

AT91F_PIO_ClearOutput( AT91C_BASE_PIOA , LOAD ); for( i=0; i<4; i++ ) // 只需要發(fā)出高4位 { AT91F_PIO_ClearOutput( AT91C_BASE_PIOA , DCLK )

if( cmd & 0x01 ) { AT91F_PIO_SetOutput( AT91C_BASE_PIOA , DIN ) } else { AT91F_PIO_ClearOutput( AT91C_BASE_PIOA , DIN ) } // 輸出位數(shù)據(jù)

cmd>>=1; //往右移一位

AT91F_PIO_SetOutput( AT91C_BASE_PIOA , DCLK ) //產(chǎn)生時(shí)鐘上升沿鎖通知CH451輸入位數(shù)據(jù) }

AT91F_PIO_SetOutput( AT91C_BASE_PIOA , LOAD ); //產(chǎn)生加載上升沿通知CH451處理命令數(shù)據(jù)

for( i=0; i<7; i++ ) { //Delay(10); keycode<<=1; //數(shù)據(jù)移入keycode,高位在前,低位在后

keycode|=AT91F_PIO_IsInputSet( AT91C_BASE_PIOA , DOUT );/****從高到低讀入452的數(shù)據(jù)即(keycode|=CH452_DOUT) ****/ AT91F_PIO_ClearOutput( AT91C_BASE_PIOA , DCLK );//產(chǎn)生時(shí)鐘下升沿通知CH452輸出下一位 AT91F_PIO_SetOutput( AT91C_BASE_PIOA , DCLK );

}

AT91F_AIC_EnableIt( AT91C_BASE_AIC , AT91C_ID_PIOA );

return(keycode); //反回鍵值

}


辛苦啦~

2個(gè)代碼實(shí)際是一樣的吧?? 您覺(jué)得是我那個(gè)有些什么問(wèn)題呢 我改了還是不行的

DIN,DCLK,LOAD的波形,無(wú)論角度看都很正常,就是DOUT不對(duì).. 我是飛的線,特別亂,剛加了給每個(gè)數(shù)碼管com加了2極管,又給DOUT加了上拉電阻.還是不行.

我一上電DOUT上面就有一些3角波..亂亂的..


那DOUT的信號(hào)線上有干擾啊!仔細(xì)查查哪里產(chǎn)生干擾了.你可以先看連接這跟信號(hào)線的單片機(jī)I/O口出來(lái)的信號(hào)可正常.正常后將其和I/O口直接相連,再看下波形.


謝謝...星期6按鍵可以了.

for( i=0; i<7; i++ ) { //Delay(10); keycode<<=1; //數(shù)據(jù)移入keycode,高位在前,低位在后

keycode|=AT91F_PIO_IsInputSet( AT91C_BASE_PIOA , DOUT ); AT91F_PIO_ClearOutput( AT91C_BASE_PIOA , DCLK

Delay(15); //加了20us左右的延時(shí)

AT91F_PIO_SetOutput( AT91C_BASE_PIOA , DCLK );

}

Dout的波形不是很好捕捉.要按鍵才有,看不清.而且看上去也不是規(guī)則的波形.. 但是4個(gè)按鍵都可以了..怪..而且我禁止中斷關(guān)了也可以...


呵呵


只有登錄才能回復(fù),可以選擇微信賬號(hào)登錄

国产91精品新入口,国产成人综合网在线播放,九热这里只有精品,本道在线观看,美女视频a美女视频,韩国美女激情视频,日本美女pvp视频