找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索

请问一个关于单片机sbit定义的io的问题

查看数: 1887 | 评论数: 6 | 收藏 0
关灯 | 提示:支持键盘翻页<-左 右->
    组图打开中,请稍候......
发布时间: 2019-10-24 16:04

正文摘要:

用sbit定义位变量的时候如果定义了两个位变量,当它们协同工作的时候。比如数码管的动态显示时在一些延时的时候他们的闪烁频率并不一样,甚至在延时过小时会发生一个常亮一个不亮的现象。现在我知道用字节赋值可以解 ...

回复

ID:629496 发表于 2019-10-25 15:53
wulin 发表于 2019-10-24 22:07
两个问题:1.没有消隐  2.延时过长

谢谢大佬。延时过长明白了,但是为什么没有消隐会导致这样呢?
ID:213173 发表于 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. }
复制代码
ID:123289 发表于 2019-10-24 20:24
你并未真正地弄清楚显示的原理。弄清楚后就不会提这样的问题了。
ID:105364 发表于 2019-10-24 18:47
用实物吧,proteus仿真就不要这么较真了。
ID:235200 发表于 2019-10-24 18:22
是因为延时时间过长,应该把delay(70)改为delay(3)左右
ID:275826 发表于 2019-10-24 18:14
程序的问题哟,没有消隐

小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表