打印

大家来帮我看看这个怎么编码的

[复制链接]
2402|16
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
21ID|  楼主 | 2009-11-2 14:34 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 21ID 于 2009-11-2 14:35 编辑

按下S1,再D1灯亮,一次类推。怎么能从D1,D2,D3,D3中选择D1,这个编码怎么怎么样的,高手来帮帮忙。
R1上面的网络标号是PP0

111.jpg (89.75 KB )

111.jpg
沙发
chen3bing| | 2009-11-2 14:44 | 只看该作者
按下S1,RB0输出低电平,D1灯亮,一次类推。

使用特权

评论回复
板凳
21ID|  楼主 | 2009-11-2 14:59 | 只看该作者
突然明白了,原来也不难- -
          RA0       RA1      RA2      RA3
RB4     S1         S2        S3        S4

RB5     S5         S6        S7        S8

使用特权

评论回复
地板
xwj| | 2009-11-2 15:05 | 只看该作者
呵呵,明白了就好

使用特权

评论回复
5
与时俱进| | 2009-11-2 15:25 | 只看该作者
不明白。

使用特权

评论回复
6
21ID|  楼主 | 2009-11-4 16:26 | 只看该作者
呵呵,明白了就好
xwj 发表于 2009-11-2 15:05
XWJ,帮我再仔细看看,貌似要是LED灯亮,这个编码行不通。

使用特权

评论回复
7
yewuyi| | 2009-11-4 21:45 | 只看该作者
理解LED本身的余辉时间的作用,理解IO口的复用,输入和输出等就应该能想明白。

使用特权

评论回复
8
21ID|  楼主 | 2009-11-5 11:46 | 只看该作者

急急

本帖最后由 21ID 于 2009-11-5 12:09 编辑

LED要在按下了开关后能常亮,再次按开关才灭的!大家帮帮忙,有点急的!

使用特权

评论回复
9
yewuyi| | 2009-11-5 13:16 | 只看该作者
分时复用的道理不懂吗?

LED是闪烁亮的,但闪烁的速度很快,超过25HZ以后,人眼一般就分辨不出来了,超过40HZ,就基本不可能分辨出来了。

使用特权

评论回复
10
21ID|  楼主 | 2009-11-5 13:49 | 只看该作者
本帖最后由 21ID 于 2009-11-5 13:53 编辑

这个问题没那么简单,按键按下后又要回到断开状态的。能花点时间帮我写一下这一段程序吗

使用特权

评论回复
11
21ID|  楼主 | 2009-11-5 13:59 | 只看该作者
RB4,RB5做输出高电平,点亮LED。做输入时,单片机检测按键吗?怎么看PP0和PP1是一点呀?

使用特权

评论回复
12
yewuyi| | 2009-11-5 14:41 | 只看该作者
1、 u8  key=0,led=0;
   TRISB=0xff;
   TRISA=0xf0;
   PORTA=0xf0;
   _NOP();
   _NOP();
   TRISA=0xff;
2、TRISB=0b11101111;
   RB4=1;
   key=PORTA;
3、TRISB=0xff;
   TRISA=0xf0;
   PORTA=0xf0;
   _NOP();
   _NOP();
   TRISA=0xff;
4、TRISB=0b11011111
   RB5=1;
   key|=(PORTA<<4);
5、led(x)-->D(x)
6、软件判断哪个KEY按下,就就对应的led(x)置0
7、扫描led,但必须注意,因为这个电路设计的问题,PP0和PP1必须是一个输入,
   一个输出,不应该同时设置为输出,怎么扫描LED都不要讲了把,如果你能把
   逻辑弄清楚,你甚至还可以在扫描按键的同时扫描LED,上面的东西只是给出了
   逻辑分析,不能做为最终代码使用。

使用特权

评论回复
13
21ID|  楼主 | 2009-11-5 15:20 | 只看该作者
还没看,不过先谢谢你啊。自己还要努力努力~~现在去看了~

使用特权

评论回复
14
21ID|  楼主 | 2009-11-5 16:27 | 只看该作者
if(key&0xf0)
{
   TRISB=0b11100000;
   RB4=1;
   RB0=~RA0;
   RB1=~RA1;
   RB2=~RA2;
   RB3=~RA3;
   _NOP();
}
if(key&0x0f)
{
TRISB=0b11010000;
   RB5=1;
   RB0=~RA0;
   RB1=~RA1;
   RB2=~RA2;
   RB3=~RA3;
   _NOP();
}

是不是这样?这里LED要在键按下后常亮,比如D1亮,在没有再次按键这段时间里,RB4要输出高电平。这样一来就不能扫描按键了。我这样的理解是否正确?

使用特权

评论回复
15
yewuyi| | 2009-11-5 17:11 | 只看该作者
你就弄不懂分时复用吗?

扫按键的时候关闭显示,扫完按键再驱动LED,驱动几十个MS时间LED后再去扫描按键,如此循环。

使用特权

评论回复
评分
参与人数 1威望 +1 收起 理由
21ID + 1
16
21ID|  楼主 | 2009-11-5 19:25 | 只看该作者
呵呵,能明白了。应该说现在对分时复用理解的更深了
谢谢你能1V1的帮我解决问题,我刚大学毕业,当然不是那种名牌大学,在大学里自己也不是那种牛人
所以希望21里的高人们,多多帮我在成长中遇到的问题。虽然有些问题对于你们来说非常小儿科,但是对我来说也是个不小的困难,我选择了技术这条路,我就会**走下去。
再次谢谢yewuyi!

使用特权

评论回复
17
bobo1957| | 2010-2-6 00:03 | 只看该作者
在LED亮的空闲去读按键的值,而不是在读按键的空闲去点亮LED

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

157

主题

912

帖子

5

粉丝