找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1444|回复: 6
打印 上一主题 下一主题
收起左侧

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

[复制链接]
跳转到指定楼层
楼主
用sbit定义位变量的时候如果定义了两个位变量,当它们协同工作的时候。比如数码管的动态显示时在一些延时的时候他们的闪烁频率并不一样,甚至在延时过小时会发生一个常亮一个不亮的现象。现在我知道用字节赋值可以解决这个问题,但是我想知道为什么用sbit定义位变量达不到相同效果。希望大神们能带带我!

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

代码

代码

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

运行

运行
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:275826 发表于 2019-10-24 18:14 | 只看该作者
程序的问题哟,没有消隐
回复

使用道具 举报

板凳
ID:235200 发表于 2019-10-24 18:22 | 只看该作者
是因为延时时间过长,应该把delay(70)改为delay(3)左右
回复

使用道具 举报

地板
ID:105364 发表于 2019-10-24 18:47 | 只看该作者
用实物吧,proteus仿真就不要这么较真了。
回复

使用道具 举报

5#
ID:123289 发表于 2019-10-24 20:24 | 只看该作者
你并未真正地弄清楚显示的原理。弄清楚后就不会提这样的问题了。
回复

使用道具 举报

6#
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. }
复制代码
回复

使用道具 举报

7#
ID:629496 发表于 2019-10-25 15:53 | 只看该作者
wulin 发表于 2019-10-24 22:07
两个问题:1.没有消隐  2.延时过长

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

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

Powered by 单片机教程网

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