G2028_パソコンキーボードマクロ
2026年1月17日
9:41
G2028_lpc812_pc_keybord_macro_new_circuit
Version:0.9 StartHTML:00000000 EndHTML:00000000 StartFragment:00000000 EndFragment:00000000 LPC812_USBKEY2.zip
変更点
キーボード基板の調査


|
|
26 |
25 |
24 |
23 |
22 |
21 |
20 |
19 |
18 |
17 |
16 |
|
|
|
26 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
25 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
24 |
|
ege 変化 |
|
|
|
ege戻る |
ege 変化 |
WIN |
outlook |
検索 |
音消える |
|
|
|
23 |
ESC |
無変換 |
|
|
|
z |
a |
TAB |
q |
1 ぬ |
??? |
|
|
|
22 |
検索 |
|
|
|
|
c |
d |
F3 |
e |
3 あ |
F2 |
|
|
|
21 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
20 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
19 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
18 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
17 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
16 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
15 |
|
変換 |
|
|
|
x |
s |
|
w |
2 ふ |
F1 |
|
|
|
14 |
VR- |
YouTube 次の再生 |
|
|
|
VR + |
SHIFT |
|
|
MEDIA |
音楽再生 戻る |
|
|
|
13 |
スリープ |
|
|
|
|
CTRL |
Ç |
シャットダウン |
|
F5 |
|
|
|
|
12 |
g |
b |
|
|
|
v |
f |
t |
r |
4 う |
5 え |
|
|
|
11 |
ALT |
ALT |
|
|
|
|
|
TEN 0 |
ScrLk |
PrtScr |
TEN 0 |
|
|
|
10 |
F6 |
\ろ |
|
|
|
, ね |
k |
[ |
i |
8 ゆ |
^ へ |
|
|
|
9 |
h |
n |
|
|
|
m |
j |
y |
u |
7 や |
6 お |
|
|
|
8 |
|
ポップメニュー |
|
|
|
. る |
l L |
F7 |
o |
9 よ |
F8 |
|
|
|
7 |
: |
/め |
|
|
|
] |
; |
@ |
p |
0 わ |
|
|
|
|
6 |
全体表示 |
F12 |
|
|
|
ENTER |
] |
BS |
\| ー |
F10 |
F9 |
|
|
|
5 |
スペース |
↓ |
|
|
|
NUML |
TEN 1 |
TEN 4 |
TEN 7 |
シャットダウン |
DEL |
|
|
|
4 |
↑ |
← |
|
|
|
再生停止 |
ENTER |
|
TEN + |
|
行先頭 HOME |
|
|
|
3 |
0-TEN |
→ |
|
|
|
TEN / |
TEN 2 |
TEN 5 |
TEN 8 |
スリープ |
INS |
|
|
|
2 |
. |
TEN - |
|
|
|
TEN * |
TEN 3 |
TEN 6 |
TEN 9 |
page DW |
page UP |
|
|
|
1 |
EXP |
電卓 |
|
|
|
再生停止 |
WIN |
|
|
|
ホームページ |
|
|
キーボードの代わりのスイッチ回路
|
べーす抵抗 |
C-E間抵抗 |
|
|
|
1K |
25.8 |
|
|
|
2K |
23.7 |
|
|
|
4.7K |
27.8 |
|
|
|
10K |
39.9 |
|
|
















入力データにゴミデータが出る

新しいプロジェクトを作成します






同時操作キーの作成




キーマトリックの修正コード
////////////////////////////////////////
// キーマトリックス
////////////////////////////////////////
void usb_key_out(char prm_cod)
{
uint8_t bcod;
bcod = 23;
if(prm_cod == 'Z') usb_key_out2('S',21,bcod);
if(prm_cod == 'z') usb_key_out2(' ',21,bcod);
if(prm_cod == 'A') usb_key_out2('S',20,bcod);
if(prm_cod == 'a') usb_key_out2(' ',20,bcod);
if(prm_cod == 'Q') usb_key_out2('S',18,bcod);
if(prm_cod == 'q') usb_key_out2(' ',18,bcod);
if(prm_cod == '1') usb_key_out2(' ',17,bcod);
if(prm_cod == '!') usb_key_out2('S',17,bcod);
bcod = 22;
if(prm_cod == 'c') usb_key_out2(' ',21,bcod);
if(prm_cod == 'C') usb_key_out2('S',21,bcod);
if(prm_cod == 'd') usb_key_out2(' ',20,bcod);
if(prm_cod == 'D') usb_key_out2('S',20,bcod);
if(prm_cod == 'e') usb_key_out2(' ',18,bcod);
if(prm_cod == 'E') usb_key_out2('S',18,bcod);
if(prm_cod == '3') usb_key_out2(' ',17,bcod);
if(prm_cod == '#') usb_key_out2('S',17,bcod);
bcod = 15;
if(prm_cod == 'x') usb_key_out2(' ',21,bcod);
if(prm_cod == 'X') usb_key_out2('S',21,bcod);
if(prm_cod == 's') usb_key_out2(' ',20,bcod);
if(prm_cod == 'S') usb_key_out2('S',20,bcod);
if(prm_cod == 'w') usb_key_out2(' ',18,bcod);
if(prm_cod == 'W') usb_key_out2('S',18,bcod);
if(prm_cod == '2') usb_key_out2(' ',17,bcod);
if(prm_cod == '\"') usb_key_out2('S',17,bcod);
bcod = 12;
if(prm_cod == 'g') usb_key_out2(' ',26,bcod);
if(prm_cod == 'G') usb_key_out2('S',26,bcod);
if(prm_cod == 'b') usb_key_out2(' ',25,bcod);
if(prm_cod == 'B') usb_key_out2('S',25,bcod);
if(prm_cod == 'v') usb_key_out2(' ',21,bcod);
if(prm_cod == 'V') usb_key_out2('S',21,bcod);
if(prm_cod == 'f') usb_key_out2(' ',20,bcod);
if(prm_cod == 'F') usb_key_out2('S',20,bcod);
if(prm_cod == 't') usb_key_out2(' ',19,bcod);
if(prm_cod == 'T') usb_key_out2('S',19,bcod);
if(prm_cod == 'r') usb_key_out2(' ',18,bcod);
if(prm_cod == 'R') usb_key_out2('S',18,bcod);
if(prm_cod == '4') usb_key_out2(' ',17,bcod);
if(prm_cod == '$') usb_key_out2('S',17,bcod);
if(prm_cod == '5') usb_key_out2(' ',16,bcod);
if(prm_cod == '%') usb_key_out2('S',16,bcod);
bcod = 10;
if(prm_cod == '\\') usb_key_out2(' ',25,bcod); // ろ
if(prm_cod == '_') usb_key_out2('S',25,bcod); // ろ
if(prm_cod == ',') usb_key_out2(' ',21,bcod); //カンマ0x2C
if(prm_cod == '<') usb_key_out2('S',21,bcod); //カンマ0x2C
if(prm_cod == 'k') usb_key_out2(' ',20,bcod);
if(prm_cod == 'K') usb_key_out2('S',20,bcod);
if(prm_cod == '[') usb_key_out2(' ',19,bcod);
if(prm_cod == '{') usb_key_out2('S',19,bcod);
if(prm_cod == 'i') usb_key_out2(' ',18,bcod);
if(prm_cod == 'I') usb_key_out2('S',18,bcod);
if(prm_cod == '8') usb_key_out2(' ',17,bcod);
if(prm_cod == '(') usb_key_out2('S',17,bcod);
if(prm_cod == '^') usb_key_out2(' ',16,bcod);
if(prm_cod == '~') usb_key_out2('S',16,bcod);
bcod = 9;
if(prm_cod == 'h') usb_key_out2(' ',26,bcod);
if(prm_cod == 'H') usb_key_out2('S',26,bcod);
if(prm_cod == 'n') usb_key_out2(' ',25,bcod);
if(prm_cod == 'N') usb_key_out2('S',25,bcod);
if(prm_cod == 'm') usb_key_out2(' ',21,bcod);
if(prm_cod == 'M') usb_key_out2('S',21,bcod);
if(prm_cod == 'j') usb_key_out2(' ',20,bcod);
if(prm_cod == 'J') usb_key_out2('S',20,bcod);
if(prm_cod == 'y') usb_key_out2(' ',19,bcod);
if(prm_cod == 'Y') usb_key_out2('S',19,bcod);
if(prm_cod == 'u') usb_key_out2(' ',18,bcod);
if(prm_cod == 'U') usb_key_out2('S',18,bcod);
if(prm_cod == '7') usb_key_out2(' ',17,bcod);
if(prm_cod == '\'') usb_key_out2('S',17,bcod);
if(prm_cod == '6') usb_key_out2(' ',16,bcod);
if(prm_cod == '&') usb_key_out2('S',16,bcod);
bcod = 8;
if(prm_cod == '.') usb_key_out2(' ',21,bcod);
if(prm_cod == '>') usb_key_out2('S',21,bcod);
if(prm_cod == 'l') usb_key_out2(' ',20,bcod);
if(prm_cod == 'L') usb_key_out2('S',20,bcod);
if(prm_cod == 'o') usb_key_out2(' ',18,bcod);
if(prm_cod == 'O') usb_key_out2('S',18,bcod);
if(prm_cod == '9') usb_key_out2(' ',17,bcod);
if(prm_cod == ')') usb_key_out2('S',17,bcod);
bcod = 7;
if(prm_cod == ':') usb_key_out2(' ',26,bcod);
if(prm_cod == '*') usb_key_out2('S',26,bcod);
if(prm_cod == '/') usb_key_out2(' ',25,bcod);
if(prm_cod == '?') usb_key_out2('S',25,bcod);
if(prm_cod == ']') usb_key_out2(' ',21,bcod);
if(prm_cod == '}') usb_key_out2('S',21,bcod);
if(prm_cod == ';') usb_key_out2(' ',20,bcod); //セミコロン0x3B
if(prm_cod == '+') usb_key_out2('S',20,bcod); //セミコロン0x3B
if(prm_cod == '@') usb_key_out2(' ',19,bcod);
if(prm_cod == '`') usb_key_out2('S',19,bcod);
if(prm_cod == 'p') usb_key_out2(' ',18,bcod);
if(prm_cod == 'P') usb_key_out2('S',18,bcod);
if(prm_cod == '0') usb_key_out2(' ',17,bcod);
if(prm_cod == '-') usb_key_out2(' ',16,bcod);
if(prm_cod == '=') usb_key_out2('S',16,bcod);
bcod = 6;
if(prm_cod == '\\') usb_key_out2(' ',18,bcod); // enmark
if(prm_cod == '|') usb_key_out2('S',18,bcod); // enmark
bcod = 5;
if(prm_cod == ' ') usb_key_out2(' ',26,bcod); // SPACE
}
////////////////////////////////////////
// キーマトリックス サブコード
////////////////////////////////////////
void usb_key_out2(char prm_shift,uint8_t prm_acod,uint8_t prm_bcod)
{
// 2号機の場合範囲がややこしくバグの基になるので範囲判定はしない
//if(7 < prm_acod) return;
//if(25 < prm_bcod) return;
//usb_key_init('B');
// prm_shift S シフト W Windowsキー
if(prm_shift == 'S' || prm_shift == 's') usb_shift(1);
if(prm_shift == 'W' || prm_shift == 'w') usb_start(1);
if(prm_shift == 'C' || prm_shift == 'c') usb_ctrl(1);
exp_pin_out(prm_acod,1); set_74HC595(Lach_595_pin);
exp_pin_out(prm_bcod,1); set_74HC595(Lach_595_pin);
wait_sec('m',20);
exp_pin_out(prm_acod,0); set_74HC595(Lach_595_pin);
exp_pin_out(prm_bcod,0); set_74HC595(Lach_595_pin);
wait_sec('m',20);
if(prm_shift == 'S' || prm_shift == 's') usb_shift(0);
if(prm_shift == 'W' || prm_shift == 'w') usb_start(0);
if(prm_shift == 'C' || prm_shift == 'c') usb_ctrl(0);
//usb_key_init('B');
}
// F1 ENT ESCなど
void usb_fun_out(char *prm)
{
if(prm[0] == 0) return;
if(prm[1] == 0) return;
if(prm[2] == 0) usb_fun_out2(prm);
else
{ if(prm[3] == 0) usb_fun_out3(prm);
}
}
void usb_fun_out2(char *prm)
{
if(prm[0] == 'F' && prm[1] == '1') usb_key_out2(' ',16,15);
if(prm[0] == 'F' && prm[1] == '2') usb_key_out2(' ',16,22);
if(prm[0] == 'F' && prm[1] == '3') usb_key_out2(' ',19,22);
if(prm[0] == 'F' && prm[1] == '5') usb_key_out2(' ',17,13);
if(prm[0] == 'F' && prm[1] == '6') usb_key_out2(' ',26,10);
if(prm[0] == 'F' && prm[1] == '7') usb_key_out2(' ',19,8);
if(prm[0] == 'F' && prm[1] == '8') usb_key_out2(' ',16,8);
if(prm[0] == 'F' && prm[1] == '9') usb_key_out2(' ',16,6);
if(prm[0] == 'F' && prm[1] == 'A') usb_key_out2(' ',17,6); // F10
if(prm[0] == 'F' && prm[1] == 'C') usb_key_out2(' ',25,6); // F12
if(prm[0] == 'U' && prm[1] == 'P') usb_key_out2(' ',26,4); //上
if(prm[0] == 'D' && prm[1] == 'W') usb_key_out2(' ',25,5); //下
if(prm[0] == 'R' && prm[1] == 'I') usb_key_out2(' ',25,3); //右
if(prm[0] == 'L' && prm[1] == 'F') usb_key_out2(' ',25,4); //左
if(prm[0] == 'B' && prm[1] == 'S') usb_key_out2(' ',19,6); //BS
wait_sec('m',20);
}
void usb_fun_out3(char *prm)
{
if(prm[0]=='F' && prm[1]=='1' && prm[2]=='2') usb_key_out2(' ',17,6);//F10
if(prm[0]=='F' && prm[1]=='1' && prm[2]=='2') usb_key_out2(' ',25,6);//F12
if(prm[0]=='T' && prm[1]=='A' && prm[2]=='B') usb_key_out2(' ',19,23);//TAB
if(prm[0]=='E' && prm[1]=='N' && prm[2]=='T') usb_key_out2(' ',21,6);//ENT
if(prm[0]=='A' && prm[1]=='L' && prm[2]=='T') usb_key_out2(' ',25,11);//ALT
if(prm[0]=='S' && prm[1]=='P' && prm[2]=='C') usb_key_out2(' ',26,5);//SPC
if(prm[0]=='E' && prm[1]=='S' && prm[2]=='C') usb_key_out2(' ',26,23);//ESC
if(prm[0]=='D' && prm[1]=='E' && prm[2]=='L') usb_key_out2(' ',16,5);//DEL
if(prm[0]=='H' && prm[1]=='O' && prm[2]=='M') usb_key_out2(' ',16,4);//HOM
if(prm[0]=='P' && prm[1]=='R' && prm[2]=='T') usb_key_out2(' ',17,11);//PRT
//if(prm[0]=='E' && prm[1]=='N' && prm[2]=='D') usb_key_out2(' ',7,21);//END
if(prm[0]=='P' && prm[1]=='O' && prm[2]=='P') usb_key_out2(' ',25,8);//POP 右クリック
wait_sec('m',20);
}
void usb_shift(uint8_t prm_dat)
{
uint8_t out_no = 27;
if(prm_dat == 0) exp_pin_out(out_no,0);
else exp_pin_out(out_no,1);
set_74HC595(Lach_595_pin);
wait_sec('m',25);
}
void usb_start(uint8_t prm_dat)
{
uint8_t out_no = 28;
if(prm_dat == 0) exp_pin_out(out_no,0);
else exp_pin_out(out_no,1);
set_74HC595(Lach_595_pin);
wait_sec('m',900);
// 300msec では反応しなかった 800で成功したが 900にしておく
// 300 失敗 500成功 400成功
// 20msec でも成功した 一度成功するとなぜか?
// しかし この処理は速度重視ではないので 900にしておく
}
void usb_ctrl(uint8_t prm_dat)
{
uint8_t out_no = 29;
if(prm_dat == 0) exp_pin_out(out_no,0);
else exp_pin_out(out_no,1);
set_74HC595(Lach_595_pin);
wait_sec('m',80);
}
全体テスト


// 全体テスト
wait_sec('m',5000);
usb_moj_out("abcdefghijklmnopqrstuvwxy z");
usb_fun_out("ENT");
usb_moj_out("ABCDEFGHIJKLMNOPQRSTUVWXY Z");
usb_fun_out("ENT");
usb_moj_out("1234567890-^\\");
usb_fun_out("ENT");
usb_moj_out("!\"#$%&'()=~|");
usb_fun_out("ENT");
usb_moj_out("`{+*}<>?_");
usb_fun_out("ENT");
if(Exp_inp_data != inp_data_old)
{
// 変化あり
UART_msg_dec("Exp_inp=",Exp_inp_data,"\r\n");
inp_data_old = Exp_inp_data;
}
スイッチ回路の臨時接続


カレンダーモジュールの問題解決
2026.01.30 FRI (05:28) goma0099 -2544900-
ボタンに割り当てられた機能の修正
int8_t usb_key_main(int8_t prm_old_dat)
{
int8_t dat;
uint8_t cal_tbl[8];
char snd_buf[16+1];
uint32_t rnd;
dat = key_scan();
if(prm_old_dat == dat) return(dat); // 変化なし
switch(dat)
{
case 0 :
// プリントスクリーン
usb_fun_out("PRT");
wait_sec('m',50);
break;
case 1 :
// PASS パスワード E:\\XDATA\\pass_cpy.lnk
usb_key_out2('W',18,12); // Windows + R
usb_moj_out("e:\\xdata\\pass_cpy.lnk");
usb_fun_out("ENT");
break;
case 2 :
// ノートパッド
usb_key_out2('W',18,12); // Windows + R
usb_moj_out("notepad");
usb_fun_out("ENT");
break;
case 3 :
// ファイルエクスプローラ
usb_key_out2(' ',26,1); // EXP
break;
case 4 :
// E Drive Passward
break;
case 5 :
// CTRL+c
//UART_puts("No.8\r\n");
usb_ctrl(1); // CTRL 同時押し
usb_moj_out("c");
wait_sec('m',50);
usb_ctrl(0);
wait_sec('m',100);
break;
case 6 :
// paint 貼り付け
usb_key_out2('W',18,12); // Windows + R
usb_moj_out("mspaint");
usb_fun_out("ENT");
wait_sec('m',2000);
usb_fun_out("ALT");
wait_sec('m',100);
usb_moj_out("EDP");
wait_sec('m',100);
//usb_fun_out3("ESC");
break;
case 7 :
// カット
//UART_puts("No.9\r\n");
usb_ctrl(1); // CTRL 同時押し
usb_moj_out("x");
wait_sec('m',50);
usb_ctrl(0);
wait_sec('m',100);
break;
case 8 :
// END
//usb_ctrl(1); // CTRL 同時押し
//usb_fun_out3("END");
//wait_sec('m',50);
//usb_ctrl(0);
//wait_sec('m',50);
break;
case 9 :
break;
case 10 :
// ペースト
//UART_puts("No.11\r\n");
usb_ctrl(1); // CTRL 同時押し
usb_moj_out("v");
wait_sec('m',50);
usb_ctrl(0);
wait_sec('m',100);
//usb_fun_out("ENT");
break;
case 11 :
// HOME TOP
usb_ctrl(1); // CTRL 同時押し
usb_fun_out3("HOM");
wait_sec('m',50);
usb_ctrl(0);
wait_sec('m',50);
break;
case 12 :
// リンクCPY
usb_fun_out("POP"); // ワンノート段落コピー
wait_sec('m',50);
usb_moj_out("p");
wait_sec('m',50);
usb_ctrl(0);
break;
case 13 :
// テキストのみペースト
usb_fun_out3("POP");
wait_sec('m',50);
usb_moj_out("t");
wait_sec('m',100);
break;
case 14 :
// タイムスタンプ
// 2024.11.16 SAN goma0099 -4765932-
// 時分追加
//RTC_8564_cal_get(cal_tbl); // 時計ICを交換しました
ds1307_cal_red(cal_tbl);
wait_sec('m',200);
moj_dec_to_cha(cal_tbl[1]+1980,snd_buf,4,'0');
usb_moj_out(snd_buf); // 年
usb_moj_out(".");
moj_dec_to_cha(cal_tbl[2],snd_buf,2,'0');
usb_moj_out(snd_buf); // 月
usb_moj_out(".");
moj_dec_to_cha(cal_tbl[3],snd_buf,2,'0');
usb_moj_out(snd_buf); // 日
usb_moj_out(" ");
switch(cal_tbl[0])
{
case 0 : usb_moj_out("SAN"); break;
case 1 : usb_moj_out("MON"); break;
case 2 : usb_moj_out("TUE"); break;
case 3 : usb_moj_out("WED"); break;
case 4 : usb_moj_out("THU"); break;
case 5 : usb_moj_out("FRI"); break;
case 6 : usb_moj_out("SAT"); break;
}
usb_moj_out(" (");
moj_dec_to_cha(cal_tbl[4],snd_buf,2,'0');
usb_moj_out(snd_buf); // 時
usb_moj_out(":");
moj_dec_to_cha(cal_tbl[5],snd_buf,2,'0');
usb_moj_out(snd_buf); // 分
usb_moj_out(")");
usb_moj_out(" goma0099 -");
rnd = moj_day_rnd_dec(cal_tbl[1]+1980,cal_tbl[2],cal_tbl[3]);
moj_dec_to_cha(rnd,snd_buf,0,' ');
usb_moj_out(snd_buf);
usb_moj_out("-");
break;
}
return(dat);
}