标题: 新手求助!!单片机点亮1,3,5,7这四个发光管,如何用总线操作完成 [打印本页]

作者: z214135221    时间: 2016-12-26 11:18
标题: 新手求助!!单片机点亮1,3,5,7这四个发光管,如何用总线操作完成
点亮1,3,5,7这四个发光管,如何用总线操作完成。我自己是这样的。
#include<reg52.h>
void main()
{
     P1=0xfe;
     P1=0xfc;
     P1=0xef;
     P1=0xcf;
}
不知道哪里出了问题。。

作者: kkfy888    时间: 2016-12-27 10:48
如果只是一次点亮1357用一条语句就行了
作者: daxionghhh    时间: 2016-12-27 11:39
多试几次
作者: zl2168    时间: 2016-12-27 21:30
本帖最后由 zl2168 于 2016-12-27 21:32 编辑

中间要有延时,而且要循环显示。
花样循环灯



花样循环1

全亮2秒;

从上至下依次暗灭(间歇约0.5秒),每次减少一个,直至全灭;

从上至下依次点亮(间歇约0.5秒),每次增加一个,直至全亮;

闪烁5次(亮暗时间各约0.5秒);

重复上述过程,不断循环。

花样循环2

全亮,全暗,并重复一次;

从上至下,每次亮2个,并重复一次;

从上至下,每次亮4个,并重复一次;

从上至下,每次间隔亮2个(亮灯中间暗一个),并重复一次;

从上至下,每次间隔亮4个(亮灯中间暗一个),并重复一次;

上述过程更新间隔0.5秒,不断循环重复。


Proteus仿真一下,确认有效
实例28 花样循环灯(3种控制程序).rar (35.78 KB, 下载次数: 10)

以上摘自张志良编著《单片机实验实训100例》 ISBN978-7-5124-1603-1,北航社出版
书中电路和程序设计有详细说明,程序语句条条有注解。






作者: qw5554959    时间: 2016-12-28 11:05
你的这段都不是这个意思
作者: z214135221    时间: 2016-12-31 15:41
本帖最后由 z214135221 于 2016-12-31 15:47 编辑

#include<reg52.h>
void main()
{
        P1=0xfe,
        P1=0xfb,
        P1=0xef,
        P1=0xbf;  }                                 
为什么其他3个没有第4个亮啊?


作者: 不倒翁.WZT    时间: 2016-12-31 17:30
标题: RE: 新手求助!!单片机点亮1,3,5,7这四个发光管,如何用总线操作完成
试试这个程序怎么样。
#include<reg52.h>         
#include<intrins.h>
void Delay10ms(unsigned int a)  
{
  unsigned int b,c;
  for(c=a;c>0;c--)
    for(b=2000;b>0;b--);  
}   
main()
{
        unsigned char LED;
        LED=0x80;          
        while(1)
        {
    P0=LED;
    Delay10ms(50);
    LED=_crol_(LED,2);   
        }
}

作者: qq23412    时间: 2016-12-31 21:08
同学,你p1在第一条语句里点亮了第一个灯,但同时也灭了其他的灯
作者: qq23412    时间: 2016-12-31 21:09
qq23412 发表于 2016-12-31 21:08
同学,你p1在第一条语句里点亮了第一个灯,但同时也灭了其他的灯

第二条语句点亮的第二个,同时也灭了其他灯。不信你可以留四条赋值语句中的其中一条试试
作者: qq23412    时间: 2016-12-31 21:11
要正确的点亮1357 你可以赋值0x55
作者: zhangli019    时间: 2016-12-31 22:10
执行完之后应该最后一条有效吧,然后程序就跑飞了
作者: vb123    时间: 2017-1-1 11:38
while 来一个循环
作者: z214135221    时间: 2017-1-4 12:53
已经弄明白了,多谢各位的帮助!!
作者: 大大    时间: 2017-1-4 13:02
你这个肯定不对三  你不觉得少了东西?
作者: MRbaozha    时间: 2017-1-4 14:41
其实你差不多了,再仔细研究一下
作者: lids    时间: 2017-1-13 11:26
//点亮1,3,5,7这四个发光管
#include<reg52.h>
void main()
{   
     while(1)
    {
     P1=0xaa;
     )
}
作者: cuihaodianzi    时间: 2017-1-13 16:09
你只点亮了一瞬间 没有保持
while(1)
   {
     P1=0xfe;
     P1=0xfc;
     P1=0xef;
     P1=0xcf;
   }
作者: 电子酷爱    时间: 2017-1-13 16:28
感觉都没有循环,虽然我是刚接触,但还是能看懂一点,呵呵
作者: 317317    时间: 2017-1-14 17:16
  如果只是一次点亮1357用一条语句就行了
作者: 31213123    时间: 2017-1-14 22:40
.meiyou 问题吧
作者: 认真学    时间: 2021-7-14 10:57
void  main()

     P1=Oxfe;Oxfb;Oxef;Oxbf;

  }

是这样的吗

作者: 名字不是重点    时间: 2021-7-14 15:29
认真学 发表于 2021-7-14 10:57
void  main()

     P1=Oxfe;Oxfb;Oxef;Oxbf;

你的名字起的真不错!我只能这么说了。。。按你的名字来吧!
作者: 开心就好hhhh    时间: 2021-7-14 15:39
void main()
{
    whilw(1)
{
     P1=0xaa;
}
}
这样就可以了,一次点亮就行,如果要依次点亮就不是这样写
作者: 16639745810    时间: 2021-7-14 18:38
按照程序执行顺序,11111110执行到11111100到11101111到11001111然后结束,每一条重新执行速度非常快,你感受不到,在现实中就是单片机只显示了第四行功能,也就是只亮两个灯
作者: 单片机爱好者223    时间: 2021-7-14 19:58
MOV P0,H0FE




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