标题: 请问一个关于单片机sbit定义的io的问题 [打印本页]

作者: 清廉正直    时间: 2019-10-24 16:04
标题: 请问一个关于单片机sbit定义的io的问题
用sbit定义位变量的时候如果定义了两个位变量,当它们协同工作的时候。比如数码管的动态显示时在一些延时的时候他们的闪烁频率并不一样,甚至在延时过小时会发生一个常亮一个不亮的现象。现在我知道用字节赋值可以解决这个问题,但是我想知道为什么用sbit定义位变量达不到相同效果。希望大神们能带带我!

捕获2.PNG (158.88 KB, 下载次数: 51)

代码

代码

捕获.PNG (182.13 KB, 下载次数: 42)

运行

运行

作者: tyrl800    时间: 2019-10-24 18:14
程序的问题哟,没有消隐
作者: csmyldl    时间: 2019-10-24 18:22
是因为延时时间过长,应该把delay(70)改为delay(3)左右
作者: 47okey    时间: 2019-10-24 18:47
用实物吧,proteus仿真就不要这么较真了。
作者: yzwzfyz    时间: 2019-10-24 20:24
你并未真正地弄清楚显示的原理。弄清楚后就不会提这样的问题了。
作者: wulin    时间: 2019-10-24 22:07
两个问题:1.没有消隐  2.延时过长
  1. #include<reg51.h>

  2. sbit D0=P1^0;
  3. sbit D1=P1^1;

  4. unsigned char code led_ge[]={0x3f,0x06,0x5b,0x4f,0x66,
  5.                    0x6d,0x7d,0x07,0x7f,0x6f};
  6. unsigned int i=0;

  7. void delay(unsigned int time)
  8. {
  9.         unsigned int j;
  10.         for(;time>0;time--)
  11.                 for(j=0;j<125;j++);
  12. }

  13. void main()
  14. {
  15.         IT0=1;
  16.         EX0=1;
  17.         EA=1;
  18.         while(1)
  19.         {
  20.                 P2=0x00;  //消隐
  21.                 D0=0;D1=1;//送位码               
  22.                 P2=led_ge[i/10];//送段码
  23.                 delay(5);//延时5ms
  24.                 P2=0x00;  //消隐
  25.                 D0=1;D1=0;//送位码       
  26.                 P2=led_ge[i%10];//送段码
  27.                 delay(5);//延时5ms
  28.         }
  29. }
  30. void getKey() interrupt 0
  31. {
  32.         i++;
  33.         if(i>=100)
  34.                 i=0;
  35. }
复制代码

作者: 清廉正直    时间: 2019-10-25 15:53
wulin 发表于 2019-10-24 22:07
两个问题:1.没有消隐  2.延时过长

谢谢大佬。延时过长明白了,但是为什么没有消隐会导致这样呢?





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