作者fmdjyl (小D(滴))
看板ASM
标题Re: [请益] 4X4的 keyboard 写法
时间Wed Feb 10 00:42:29 2010
P0为接收。采用低态驱动 表示 LOW动作。
所以P0的脚位 用 电阻 PUSH HIGH(5V)。
按钮按下导通後让他接地。(目地按下按钮能让准位拉地)
若没示波器 就用 三用电表 量MCU的P0脚。看每只脚是否按下按钮会拉LOW。
PS:不知道你硬体是否看书接的?
※ 引述《kinkipikachu (提琴手的无弦之声)》之铭言:
: 小弟知道网路上跟书上有很多,我自己试写了一个
: 用 keil c 写的 keypad 程式,但是七段就是不会亮,
: 请大大指点一下我错误的观念,我不知错再哪里?
: 硬体架构:
: OUTPUT 接收
: 89S51 P0.0 P0.1 P0.2 P0.3 P0.4 P0.5 P0.6 P0.7
: 采用低态驱动
: P2 接 7段显示器
: 程式:
: #include <AT89X51.H>
: char keypad(void);
: code char
: table[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,
: 0x83,0xc6,0xa1,0x86,0x8e,0xff};
: main()
: {
: char n;
: while(1)
: {
: n=table[keypad()];
: P2=~n;
: }
: }
: char keypad(void)
: {
: char key=16;
: if (P0==0x77)
: {
: key=0;
: return key;
: }
: else if (P0==0x7b)
: {
: key=1;
: return key;
: }
: else if (P0==0x7c)
: {
: key=2;
: return key;
: }
: else if (P0==0x7e)
: {
: key=3;
: return key;
: }
: else if (P0==0xb7)
: {
: key=4;
: return key;
: }
: else if (P0==0xbb)
: {
: key=5;
: return key;
: }
: else if (P0==0xbc)
: {
: key=6;
: return key;
: }
: else if (P0==0xbe)
: {
: key=7;
: return key;
: }
: else if (P0==0xc7)
: {
: key=8;
: return key;
: }
: else if (P0==0xcb)
: {
: key=9;
: return key;
: }
: else if (P0==0xce)
: {
: key=10;
: return key;
: }
: else if (P0==0xc7)
: {
: key=11;
: return key;
: }
: else if (P0==0xe7)
: {
: key=12;
: return key;
: }
: else if (P0==0xeb)
: {
: key=13;
: return key;
: }
: else if (P0==0xec)
: {
: key=14;
: return key;
: }
: else if (P0==0xee)
: {
: key=15;
: return key;
: }
: }
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 122.116.80.6
1F:推 ruemann:你说的是一般按钮的做法,4x4 keypad要用scan的方法去抓 02/10 14:53
2F:→ ruemann:他没有说明硬体是怎麽接,不过如果是单纯的一根Pin对一个 02/10 14:54
3F:→ ruemann:按键的话,P0最多只能跑8个键,总共有16个键,所以还是要 02/10 14:55
4F:→ ruemann:用scan的方法去抓key 02/10 14:55