趁著大過年期間,除了陪雙親到處拜拜以外(中國人的習俗),就是掌握屬於自己的時間,多少K一下書及好好的規劃一下今年該做什麼事^^,順便改寫一些韌體的範例。而我會利用時間將這段期間完成的技術心得,陸續貼到這個BLOG上。當然,提到BLOG,我想我將會自己架一個屬於自己的BLOG站台囉......(這也是春節這段期間規劃的)
原本我在MCS-8051實戰應用班的 LAB:8051實作 PS2 協訂的PC鍵盤實驗,僅是利用 PC的PS2鍵盤連接到8051開發板,可以以PS2鍵盤控制8051開發板上的Relay,也就是當按下連在MCS-8051開發板上PS2鍵盤的某按鍵,程式接收到該按鍵後,會觸發Relay接通;當按下Space鍵時,Relay便斷開。而原來的程式也會將按鍵對應的ASCII鍵值,顯示在 LED 上。
現在,我將其改寫成:在PS2鍵盤上可以輸入任何字串,當按下Enter鍵後,該字串會顯示在 LCD 上。第一次輸入的字串顯示在第一行,接著顯示在第二行,當再來的第三個字串輸入後, LCD 變成僅顯示第二次與第三次輸入的字串,也就是 LCD 上的字串將會上捲。
執行畫面如下: 這一張圖是全視圖,將PS2建盤與LCD接到 8051 開發板上,在PS2鍵盤先輸入 "HELLO CYH" 並按下 [Enter] 按鍵,再輸入"HI TCFST"並按下[Enter]按鍵,經由程式 將 Ps2的 make code 轉成 ASCII code 後顯示在 LCD上。第一行顯示 "HELLO CYH",第二行顯示 "HI TCFST":
這一張圖是近照圖,可以看到 LCD 上明確的在第一行顯示 "HELLO CYH",第二行顯示 "HI TCFST":
接著我在鍵盤又輸入 "I AM CYH." 之後按下 [Enter] 鍵,當再來的第三個字串輸入後, LCD 變成僅顯示第二次與第三次輸入的字串,也就是 LCD 上的字串已上捲。各位可以看到LCD目前第一行顯示 "HI TCFST",第二行顯示 "I AM CYH.":
程式如下所示:
/*
*PS2toLCD.c - A PS2 Keyboard in 8051 C program.
*Authored by YiHua,Chiang
*EMail: microcyh@seed.net.tw
*CYH' Blog: http://tw.myblog.yahoo.com/yh-chiang
*
*Copyright(C) 2009/02/10 http://tw.myblog.yahoo.com/yh-chiang
*/
#include <REGX51.h>
#include <intrins.h>
void procMakeCode(unsigned char makedata);
#include "myPS2.h"
void delay( unsigned int n1 );
void writeComm( unsigned char commdata );
void writeData( unsigned char showdata );
void initLCD(void);
void main(void)
{
initLCD();
writeComm( 0x80 );
EA=1;
EX0=1;
IT0=1;
charPos = 0;
while(1)
{
if(BF)
procMakeCode(makecode);
else
EA=1;
}
}
void key_scan() interrupt 0 //外部中斷 0
{
if((intNum>0)&&(intNum<9))
{
makecode=makecode>>1;
if(key_data)
makecode=makecode|0x80;
}
intNum++;
while(!key_clk )
if(intNum>10)
{
intNum=0;
BF=1;
EA=0;
}
}
void initLCD(void)
{
writeComm( 0x38 );
delay( 1 );
writeComm( 0x08 );
delay( 1 );
writeComm( 0x0C );
delay( 1 );
writeComm( 0x06 );
delay( 1 );
writeComm( 0x01 ); // clear LCD
delay( 10 );
}
void writeComm( unsigned char commdata )
{
En = 0; RW = 0; RS = 0;
delay( 1 );
DATA = commdata;
delay( 1 );
En = 1;
delay( 1 );
En = 0;
delay( 1 );
}
void writeData( unsigned char showdata )
{
En = 0; RW = 0; RS = 1;
delay( 1 );
DATA = showdata;
delay( 1 );
En = 1;
delay( 1 );
En = 0;
delay( 1 );
}
你好,我用keil把你的程式轉成hex檔的時候,出現了一些error,
回覆刪除我想請問程式內的myPS2.h,可以在那裡找到,謝謝
我的email轉了是cristiano17_5@hotmail.com ,謝謝
回覆刪除請問!! 能不能˙用8051製作一個4*4的 PC鍵盤呢!!
回覆刪除主要在PC能夠使用 按鍵