标题: 为什么单片机没有命令,数码管和led会都亮? [打印本页]

作者: 周鑫鑫鑫666    时间: 2017-12-6 11:50
标题: 为什么单片机没有命令,数码管和led会都亮?
      //新手求问            

     自己的本意是打算做一组交通灯,所以先把led的控制代码写好,顺手测试一下。可是为什么我一开始只让4个led灯亮,可是刚打开时8个led灯和数码管都亮了?是程序哪里出了问题




            #include <reg52.h>
   sbit led1_1=P1^0;
   sbit led1_2=P1^1;
   sbit led1_3=P1^2;
   sbit led1_4=P1^3;                                 //          定义led灯
   sbit led2_1=P1^4;
   sbit led2_2=P1^5;
   sbit led2_3=P1^6;
   sbit led2_4=P1^7;                               //位定义
   sbit shumaguan1_1=P2^0;
   sbit shumaguan1_2=P2^1;
   sbit shumaguan2_1=P2^3;
   sbit shumaguan2_2=P2^4;   //对数码管的位定义

                                                                                                                        
    void led_display()
    {
         led1_1=1;
         led1_2=1;
         led1_3=1;
         led1_3=1;

    }                           //      led亮的函数


   

    void iint()                              //初始化函数
    {
      TMOD=0x11;
      TH0=(65536-50000)/256;
      TL0=(65536-50000)%256;
      EA=1;
      ET0=1;
      TR0=1;
    }         
   
      
     void main()
     {
               iint();
              led_display();
     }        
     
     
              void T0_time() interrupt 1               //定时中断函数
    {         
               static count=1;
               TH0=(65536-50000)/256;
               TL0=(65536-50000)%256;
               count++;
               if(count==20)
               {
                count=0;
                led1_1=~led1_1;
                led1_2=~led1_2;
                led1_3=~led1_3;
                led1_4=~led1_4;
               }

                           
    }         


作者: yzwzfyz    时间: 2017-12-6 12:13
只要它得到适当的电流就会亮,管你这个机那个鸡。
作者: 周鑫鑫鑫666    时间: 2017-12-6 13:18
yzwzfyz 发表于 2017-12-6 12:13
只要它得到适当的电流就会亮,管你这个机那个鸡。

老师你好!我是刚学单片机的不是很懂。不是只有令led=1;led才会亮吗?
作者: wulin    时间: 2017-12-6 13:30
单片机复位后IO口都是呈高电平。没有操作改变其状态将一直保持不变。
作者: david888    时间: 2017-12-6 13:45
IO 状态没有初始化状态吧,
作者: wdysanyang    时间: 2017-12-6 14:27
IO 状态没有初始化状态吧
作者: le51    时间: 2017-12-6 15:13
IO口在没进行操作时默认输出为高,而你的led是共地连接的,所以形成通路,led中有电流流过
作者: 周鑫鑫鑫666    时间: 2017-12-6 16:43
le51 发表于 2017-12-6 15:13
IO口在没进行操作时默认输出为高,而你的led是共地连接的,所以形成通路,led中有电流流过

那要怎么解决好呢?是修改程序还是修改一下电路,请麻烦点明一下!!
作者: lithium    时间: 2017-12-6 16:54
IO状态没有初始化,再仔细检查一下程序,
作者: 知白守黑    时间: 2017-12-6 17:05
IO口呈高电平
作者: 杭城新人    时间: 2017-12-6 17:59
周鑫鑫鑫666 发表于 2017-12-6 16:43
那要怎么解决好呢?是修改程序还是修改一下电路,请麻烦点明一下!!

在main函数里先把P1口拉低就可以了
作者: 安心1x2    时间: 2017-12-6 18:14
完全正常吧,一般在上电的时候会有一个默认初始化过程,比如你上电后不进行任何操作也会输出IO高电平,所以你需要先把相应IO拉低才算是初始化完成。IO如果是输出状态总得有个电平值吧,你看看上电后你不用的IO引脚是什么状态,一下就清楚了。
作者: ahshmj    时间: 2017-12-6 19:12
单片机上电启动时,首先初始化各IO口。
作者: 周鑫鑫鑫666    时间: 2017-12-6 19:15
谢谢大家!我理解了!我刚刚把在程序中把IO口拉低后就好了!蟹蟹你们!
作者: 066800    时间: 2017-12-6 19:17
先了解你这个是共阴极还是共阳极
作者: le51    时间: 2017-12-7 10:05
周鑫鑫鑫666 发表于 2017-12-6 16:43
那要怎么解决好呢?是修改程序还是修改一下电路,请麻烦点明一下!!

修改电路让LED灯换成共阳连接把数码管换成共阳数码管也可以,或者修改程序让led灯或者数码管高电平点亮
作者: linkin00a    时间: 2017-12-7 11:52
这个不用管,有电流就会亮
作者: harverli    时间: 2017-12-7 15:04
上电后IO应该初始化为低电平
作者: 大三和弦    时间: 2017-12-7 16:28
好!!!!!!!!!!!
作者: 123.21    时间: 2017-12-7 17:43
IO口是高电平
作者: ccz1    时间: 2020-6-25 16:10
没有初始化

作者: hyfwyy    时间: 2020-6-27 17:45
你的数码管都是共地,给高电平就会全部点亮,而上电复位后默认输出高电平,你可以看引脚对应的方框,红色是高电平,蓝色是低电平,黄色是短路




欢迎光临 (http://www.51hei.com/bbs/) Powered by Discuz! X3.1