?? keyboard451.c
字號:
/*******************************************************************************
* 標題: 藍海微芯LJD-SY-5100單片機開發系統演示程序 *
* 文件: keyboard451.c *
* 日期: 2006-7-22 *
* 版本: 1.0 *
* 作者: Pillar *
********************************************************************************
* 描述: *
* 鍵盤管理 *
* *
********************************************************************************
* 【版權】 Copyright(C) belongs to 天宇藍翔科技有限公司 All Rights Reserved *
* 【聲明】 此程序僅用于學習與參考,引用請注明版權和作者信息! *
*******************************************************************************/
#include <keyboard451.h>
BYTE ch451_key; // 存放鍵盤中斷中讀取的鍵值
BOOL renew_key_id;
//*************************************************
void ch451_init() //初始化
{
P1 = 0x60;
ch451_din =0;
ch451_dclk=1; //先低后高,選擇4線輸入
ch451_din =1;
ch451_load=1;
ch451_dout=1;
IT1=0; //設置低電平觸發
IE1=0; //清中斷標志
PX1=1; //設置中斷1為高優先級
EX1=1; //開外部中斷1
//ch451_write(0x201); //451 reset
ch451_write(0x402); //set keyboard mode
}
//*****************************************************
//used in num key
BYTE get_num_address_from_key_value(BYTE key_value) //讀鍵值
{
switch (key_value){
case ZONGQING_KEY: //6
return 5;
case DANQING_KEY: //7
return 6;
case HUIZONG_KEY: //8
return 7;
case ZIDONG_KEY: //9
return 8;
case JIUCUO_KEY: //
return 'e';
case ZONGZHONG_KEY: //
return 1;
case CHAXUN_KEY: //
return 2;
case ZOUZHI_KEY: //
return 3;
case BEIGUANG_KEY:
return 4;
case CUNRU_KEY: //
return 'f';
case GUILING_KEY: //0
return 0;
case ZONGCI_KEY: //1
return 9;
case LEIBIE_KEY: //2
return 'a';
case SHEPI_KEY: //3
return 'b';
case RIQI_KEY: //4
return 'c';
case SHIJIAN_KEY: //5
return 'd';
case GUANJI_KEY: //5
return 'g';
default :
return 17;
}
}
void ch451_write(WORD command)
{
BYTE i;
WORD tem;
tem = command;
EX1=0; //禁止鍵盤中斷
//tem1 = command&0xff;
ch451_load=0; //命令開始
for(i=0;i<12;i++){ //送入12位數據,低位在前
ch451_din = (tem &1);
ch451_dclk=0;
tem = (tem >> 1);
ch451_dclk =1; //上升沿有效
}
ch451_load =1; //加載數據
EX1=1;
}
//*************************************************
//輸入命令子程序,MCU從451讀一字節
BYTE ch451_read()
{
BYTE i;
BYTE command,keycode; //定義命令字,和數據存儲器
EX1=0; //關中段
command=0x07; //輸入讀451命令字
ch451_load=0;
for(i=0;i<4;i++){
ch451_din=command&1; //送入最低位
ch451_dclk=0;
command>>=1; //往右移一位
ch451_dclk=1; //產生時鐘上升沿鎖通知CH451輸入位數據
}
ch451_load=1; //產生加載上升沿通知CH451處理命令數據
keycode=0; //清除keycode
for(i=0;i<7;i++){
keycode<<=1; //數據移入keycode,高位在前,低位在后
keycode|=ch451_dout; //從高到低讀入451的數據
ch451_dclk=0; //產生時鐘下升沿通知CH451輸出下一位
ch451_dclk=1;
}
IE1=0; //清中斷標志
EX1=1;
return(keycode); //反回鍵值
}
//*************************************************
//中斷子程序 使用中斷2,寄存器組1
void ch451_inter(void) interrupt 2 using 1
{
BYTE i,keycode;
BYTE command;
EX1 = 0; //關中斷
command=0x07; //讀取鍵值命令的高4位0111B
ch451_load=0; //命令開始
for(i=0;i<4;i++){
ch451_din=command&1; //低位在前,高位在后
ch451_dclk=0;
command>>=1; //右移一位
ch451_dclk=1; //產生時鐘上升沿鎖通知CH451輸入位數據
}
ch451_load=1; //產生加載上升沿通知CH451處理命令數據
keycode=0; //清除keycode
for(i=0;i<7;i++){
keycode<<=1; //數據作移一位,高位在前,低位在后
keycode|=ch451_dout; //從高到低讀入451的數據
ch451_dclk=0; //產生時鐘下升沿通知CH451輸出下一位
ch451_dclk=1;
}
ch451_key=keycode; //保存上次的鍵值
renew_key_id = 1;
EX1 = 1; //開中斷
IE1 = 0; //清中斷標志,可由cpu自動進行
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -