51开发板

2019-07-16 05:13发布

刚刚入手一个51开发板,兴致勃勃的编起了程序,很是胸有成竹。因为之前在proteus仿真了不少。可是在开发板上却是处处碰壁啊。就说一个简单的检测按键是否按下,然后点亮相应的led灯。就永远达不到我要的预期效果啊。请高手们不吝赐教。程序如下:
#include <reg52.h>
#define uchar unsigned char
/*1MS为单位的延时程序*/
void delay_1ms(uchar x)
{
    uchar j;
    while(x--) { for(j=0;j<125;j++); }   
}
void main()
{
   while(1)
    {
      if(P3^5==1)
           {
               delay_1ms(2);
                   if(P3^5==1)
                      {
                             P2=0x00;
                      }
           }
         
    }
}

程序没问题吧?
led是共阳接法,按键是独立对地键盘,可是只要把程序导入,所有的led就全亮了。请问这是何故啊?
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
19条回答
lovezjf234
1楼-- · 2019-07-16 06:20
 精彩回答 2  元偷偷看……
HARRY007
2楼-- · 2019-07-16 09:11
51单片机上电以后引脚是高电平,在IF语句里面检测高电平岂不是没有作用?,所以改为检测低电平(而且你的按键是独立对地的)。驱动普通LED一般最好加一个三极管将电流放大,单片机I/O口出来的电流很小的,三极管选择8550就可以的。   个人见解,有差错还请海涵~
936143922
3楼-- · 2019-07-16 14:02
你的开发板是买的成品板吧?是不是LED灯不是直接接在单片机的I/O口上,而是通过锁存器了。如果是的话,你的程序就有问题了,还要控制锁存器才行。
lstcspring
4楼-- · 2019-07-16 18:52
1、在主程序对P2口初始化,P2=0xFF;
2、你的按键程序响应后就一直把LED点亮,没有关LED,所以响应一次键后,P2就一直输出0,没有回到1;
按照上面两步处理了,应该就没有问题了!
364169355
5楼-- · 2019-07-16 19:38
如果你的  按键对地的话      if(P3^5==1)
    这里应该改成  0     if(P3^5==0)
banqiao
6楼-- · 2019-07-17 00:41
 精彩回答 2  元偷偷看……

一周热门 更多>