找回密码
 立即注册

QQ登录

只需一步,快速开始

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

简单的单片机二位数码管显示程序为什么运行不起来?

[复制链接]
跳转到指定楼层
楼主
大神帮我看一下,这个简单的程序为什么功能是错误的,编译没有问题。
  1. #include<reg52.h>

  2. sbit SMG_SEG=P0;
  3. sbit SMG_GPIO=P2;

  4. unsigned char code SEG[10]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
  5. unsigned char code GPIO[8]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};
  6. unsigned char DisplayData[2];







  7. void DigDisplay()
  8. {
  9.         unsigned char i;
  10.         unsigned int j;
  11.         for(i=0;i<2;i++)
  12.         {
  13.                 SMG_GPIO = GPIO[i];
  14.                 SMG_SEG = DisplayData[i];
  15.                 j=50;        
  16.                 while(j--);        
  17.                 SMG_SEG =0x00;
  18.         }
  19. }

  20. void Display()
  21. {
  22.         DisplayData[0] = SEG[0];
  23.         DisplayData[1] = SEG[1];
  24.         DigDisplay();
  25. }

  26. void main()
  27. {
  28. while(1)
  29. {
  30.         Display();
  31. }
  32. }
复制代码


51hei截图20210816142505.png (9.86 KB, 下载次数: 114)

51hei截图20210816142505.png
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:161164 发表于 2021-8-16 15:30 | 只看该作者
粗心大意
看看第3行的代码和你的仿真图有什么不同
回复

使用道具 举报

板凳
ID:96682 发表于 2021-8-16 15:39 来自手机 | 只看该作者
就算是程序有问题也与P3无关
回复

使用道具 举报

地板
ID:844772 发表于 2021-8-16 15:40 | 只看该作者
为啥这么简单的东西,会出这么多问题啊,比如接线就错了,Eg. sbit SMG_SEG=P0; 还有你好歹接上电源啊。还有程序的延时太短了
回复

使用道具 举报

5#
ID:161164 发表于 2021-8-16 16:28 | 只看该作者
glinfei 发表于 2021-8-16 15:40
为啥这么简单的东西,会出这么多问题啊,比如接线就错了,Eg. sbit SMG_SEG=P0; 还有你好歹接上电源啊。还 ...

Proteus单片机仿真可以不接电源
回复

使用道具 举报

6#
ID:950830 发表于 2021-8-16 16:36 | 只看该作者
lkc8210 发表于 2021-8-16 15:30
粗心大意
看看第3行的代码和你的仿真图有什么不同

确实粗心了,但是为什么我把那两行改过后还是有问题
回复

使用道具 举报

7#
ID:161164 发表于 2021-8-16 16:55 | 只看该作者
boboj 发表于 2021-8-16 16:36
确实粗心了,但是为什么我把那两行改过后还是有问题

我也粗心了,如地板所說的不是sbit
而是
#define XXX P3
#define XXX P2

j=50;太短了
回复

使用道具 举报

8#
ID:824490 发表于 2021-8-16 17:40 | 只看该作者
#include<reg52.h>

#define SMG_SEG P3  //这里错了
#define  SMG_GPIO P2 //这里也错了

unsigned char code SEG[10]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
unsigned char code GPIO[8]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};
unsigned char DisplayData[2];







void DigDisplay()
{
        unsigned char i;
        unsigned int j;
        for(i=0;i<2;i++)
        {
                SMG_GPIO = GPIO;
                SMG_SEG = DisplayData;
                j=50000;         //延时要加大才能看到变化
               while(j--);        
                SMG_SEG =0x00;
        }
}

void Display() //这段代码其实可以与上面的合并
{
        DisplayData[0] = SEG[0];
        DisplayData[1] = SEG[1];
        DigDisplay();
}

void main()
{
while(1)
{
        Display();
}
}
回复

使用道具 举报

9#
ID:950830 发表于 2021-8-17 09:52 | 只看该作者
lkc8210 发表于 2021-8-16 16:55
我也粗心了,如地板所說的不是sbit
而是
#define XXX P3

真的,非常感谢
回复

使用道具 举报

10#
ID:950830 发表于 2021-8-17 09:53 | 只看该作者
名字不是重点 发表于 2021-8-16 17:40
#include

#define SMG_SEG P3  //这里错了

非常感谢
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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