完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
本帖最后由 ape50 于 2015-4-7 21:48 编辑
P2为独立键盘,P0接流水灯,为什么主函数下多了P2 = 0xf0;就不能工作(按下键盘后立即熄灭),而去掉P2 = 0xf0;反而正常工作呢???请大虾帮忙分析下,谢谢。这个问题想了好久还是没想通,特此来求教。 # include # include ***it sw1 = P2^4; ***it sw2 = P2^5; unsigned int n=0, val=0; void delay(unsigned int i) { unsigned int j; for(j=0; j } int main () { P0 = 0xfe; P2 = 0xf0; TMOD = 0x01; TH0 = ( 65536-50000)/256; TL0 = ( 65536-50000)%256; TR0 = 1; ET0 = 1; EA = 1; while(1) { switch(val) { case 1: for(n=0; n<8; n++){P0 = _crol_(P0, 1);delay(10000);} break; case 2: for(n=0; n<8; n++){P0 = _crol_(P0, 1);delay(30000);} break; } } } void T() interrupt 1 { if(sw1 == 0) val = 1; if(sw2 == 0) val = 2; } |
|
相关推荐
10个回答
|
|
不是复制的,自己写的。 还有unsigned int j; for(j=0; j j已经赋值了。 |
|
|
|
|
|
|
|
与你的按键有关吧,if(sw1==0)if(sw2==0) 为何又要给P2 0xf0;
|
|
|
|
因为我本来想这样的: void T() interrupt 1 { if((P2&0xf0) != 0xf0) { if(sw1 == 0) { val = 1; } if (sw2 == 0) { val = 2; } } } 按下键就熄灭。还有我把P2=0xf0的高四位拉高来检测键盘,理论上没错啊。低四位是扫描用的。 |
|
|
|
本帖最后由 luowuque 于 2015-4-6 18:29 编辑
你的按键应该是每个都有接地;若是扫描键盘,检测完P2!=0XF0后,应该有个把低4位逐个为0来判断哪个键按下的函数 |
|
|
|
|
|
|
|
我刚试了,可以啊,都可以正常运行和闪亮额、、、
|
|
|
|
就我的单片机而言,
P2=0xf0;对程序没有影响。 因为单片机刚上电时,端口都为高点平,即P2口为:1111 1111 。 而:P2=0xf0->1111 0000,P2口的高四位没有改变,直到人为按下才会改变,执行。 (Ps:我的P2口高四位为独立键盘、、板子为Tx-1C) |
|
|
|
|
|
|
|
软件是好的,是硬件的问题,谢谢。 |
|
|
|
你正在撰写答案
如果你是对答案或其他答案精选点评或询问,请使用“评论”功能。
644 浏览 0 评论
求助一下关于51系列单片机的Timer0的计时问题,TH0、TL0+1的时间是怎么算的?
1819 浏览 1 评论
【RA-Eco-RA4E2-64PIN-V1.0开发板试用】开箱+Keil环境搭建+点灯+点亮OLED
1262 浏览 0 评论
【敏矽微ME32G070开发板免费体验】使用coremark测试敏矽微ME32G070 跑分
1136 浏览 0 评论
【敏矽微ME32G070开发板免费体验】开箱+点灯+点亮OLED
1357 浏览 2 评论
【youyeetoo X1 windows 开发板体验】少儿AI智能STEAM积木平台
12024 浏览 31 评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-24 03:07 , Processed in 0.910223 second(s), Total 88, Slave 71 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号