打印
[51单片机]

求助51单片机汇编数码管不能显示问题

[复制链接]
1797|22
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
zbybass|  楼主 | 2017-2-13 15:49 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
新人一枚,如题。用C编程效果出来了,按着思路用汇编试了下死活出不来,究竟是哪里的问题呢?
        ORG 0000H
        AJMP MAIN
        ORG 0030H
MAIN:
        MOV P0,0C0H;给p0口字形码一个用来测试
        MOV P2,0FFH ;全部位选通
         SJMP 0030H ;循环
         END
顺便附上C的方法,送字形码后先给0再延时,干嘛用的呢?
#include <reg52.h>
#define uchar unsigned char
sbit P2_0 = P2^0;
sbit P2_1 = P2^1;
sbit P2_2 = P2^2;
sbit P2_3 = P2^3;

uchar code table[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,
                        0xf8,0x80,0x90};
//void delay(uchar i)
//{
//uchar j,k;
// for(j=i;j>0;j--)
   // for(k=125;k>0;k--);
//}

void display()
{
  
   P0=table[0];
   P2_0 = 0;
   //delay(5);
  P2_0 = 1;

   P0=table[1];
  // P2_1 = 0;
  // delay(5);
   P2_1 = 1;

   P0=table[2];
  // P2_2 = 0;
  // delay(5);
   P2_2 = 1;

    P0=table[3];
  // P2_3 = 0;
//  delay(5);
   P2_3 = 1;
   
}

/*演示主程序*/
void main(void)
{
    unsigned int  a;
   
//while(1)
//{

  // for(a=100;a>0;a--)
   //{
     display();
  // }

//}
}

shuma.JPG (56.08 KB )

shuma.JPG

相关帖子

沙发
NE5532| | 2017-2-13 15:54 | 只看该作者
你的C和汇编等价么?C有延时,汇编的延时在哪里?那个送0叫“消隐”。

使用特权

评论回复
板凳
icesongjie| | 2017-2-13 16:07 | 只看该作者
最简单的方法就是把现成的C放到编译器里编译一下,看编译出来的汇编

使用特权

评论回复
地板
continueloveyou| | 2017-2-13 16:17 | 只看该作者
P0=table[0];
   P2_0 = 0;                 //程序单步执行到这里后,数码管是可以亮的,但是程序很快就执行到了,P2_0 = 1;,又把数码管关闭了,由于这直接
                      //的时间很短,用眼睛基本上不出来,所以可以先把P2_0 = 1;屏蔽看看。还有要看看你用的是共阴还是共阳的数码管。

   //delay(5);
  P2_0 = 1;

使用特权

评论回复
5
continueloveyou| | 2017-2-13 16:19 | 只看该作者
P0=table[0];
   P2_0 = 0;                 //程序单步执行到这里后,数码管是可以亮的,但是程序很快就执行到了,P2_0 = 1;,又把数码管关闭了,由于这直接
                      //的时间很短,用眼睛基本上不出来,所以可以先把P2_0 = 1;屏蔽看看。还有要看看你用的是共阴还是共阳的数码管。

   //delay(5);

使用特权

评论回复
6
ningling_21| | 2017-2-13 16:23 | 只看该作者
continueloveyou 发表于 2017-2-13 16:19
P0=table[0];
   P2_0 = 0;                 //程序单步执行到这里后,数码管是可以亮的,但是程序很快就执 ...

C中低电平点亮一位数码管,汇编中没有低电平

使用特权

评论回复
7
ayb_ice| | 2017-2-13 16:32 | 只看该作者
汇编的move指令传递立即数要加#符号

使用特权

评论回复
8
continueloveyou| | 2017-2-13 16:47 | 只看该作者
ningling_21 发表于 2017-2-13 16:23
C中低电平点亮一位数码管,汇编中没有低电平

C中低电平点亮一位数码管,汇编中没有低电平   顶

使用特权

评论回复
9
ningling_21| | 2017-2-13 17:35 | 只看该作者
continueloveyou 发表于 2017-2-13 16:47
C中低电平点亮一位数码管,汇编中没有低电平   顶

同时修正7楼指出的错误
例:MOV P2,#0FEH

使用特权

评论回复
10
zbybass|  楼主 | 2017-2-13 17:52 | 只看该作者
NE5532 发表于 2017-2-13 15:54
你的C和汇编等价么?C有延时,汇编的延时在哪里?那个送0叫“消隐”。

感谢指导,c的延时注销后也能显示,C里的程序是静态显示吧,这个能叫消隐吗?

使用特权

评论回复
11
zbybass|  楼主 | 2017-2-13 17:53 | 只看该作者
icesongjie 发表于 2017-2-13 16:07
最简单的方法就是把现成的C放到编译器里编译一下,看编译出来的汇编

感谢指导,我百度下方法试试看,我用的是keil

使用特权

评论回复
12
zbybass|  楼主 | 2017-2-13 18:14 | 只看该作者
continueloveyou 发表于 2017-2-13 16:17
P0=table[0];
   P2_0 = 0;                 //程序单步执行到这里后,数码管是可以亮的,但是程序很快就执 ...

p2.0~2.3控制三极管的基极,高电平激发后位选通,我把他们都设成了高电平,然后p0口给任何一个字形码也是应该能亮的,C中的延时注销后也是可以用的

使用特权

评论回复
13
zbybass|  楼主 | 2017-2-13 18:16 | 只看该作者
ayb_ice 发表于 2017-2-13 16:32
汇编的move指令传递立即数要加#符号

感谢指导。折腾到最后,有点晕了,竟然忘了加#号 ,但是补上也不行啊

使用特权

评论回复
14
zbybass|  楼主 | 2017-2-13 18:33 | 只看该作者
ayb_ice 发表于 2017-2-13 16:32
汇编的move指令传递立即数要加#符号

问题解决了,加上的 #号后,又加上了一句MOV p2,#00H,把位选关闭后再打开才能显示,不过表示不明白这是为什么?

使用特权

评论回复
15
ningling_21| | 2017-2-13 18:50 | 只看该作者
zbybass 发表于 2017-2-13 18:33
问题解决了,加上的 #号后,又加上了一句MOV p2,#00H,把位选关闭后再打开才能显示,不过表示不明白这是 ...

前面说过,是低电平驱动点亮某位数码管,不是高电平点亮
PS:电路用的是PNP 的三极管

使用特权

评论回复
16
zbybass|  楼主 | 2017-2-13 19:43 | 只看该作者
本帖最后由 zbybass 于 2017-2-13 20:03 编辑
ningling_21 发表于 2017-2-13 18:50
前面说过,是低电平驱动点亮某位数码管,不是高电平点亮
PS:电路用的是PNP 的三极管
...

明白了,三极管没看清类型,PNP的基极低电平时才导通

使用特权

评论回复
17
zbybass|  楼主 | 2017-2-13 19:44 | 只看该作者
continueloveyou 发表于 2017-2-13 16:47
C中低电平点亮一位数码管,汇编中没有低电平   顶

感谢回复,这个延时注释后也能出效果

使用特权

评论回复
18
czr012| | 2017-2-13 20:10 | 只看该作者
zbybass 发表于 2017-2-13 19:43
明白了,三极管没看清类型,PNP的基极低电平时才导通

P2控制位码,P0控制断码,  你的原理图应该是(1) P20为低电平时,P0口写入段码,D1对应的数码管显示。
(2)P21为低电平时,P0口写入段码,D2对应的数码管显示,..........

使用特权

评论回复
19
zbybass|  楼主 | 2017-2-13 20:31 | 只看该作者
czr012 发表于 2017-2-13 20:10
P2控制位码,P0控制断码,  你的原理图应该是(1) P20为低电平时,P0口写入段码,D1对应的数码管显示。
...

是的,感谢指导

使用特权

评论回复
20
NE5532| | 2017-2-14 09:29 | 只看该作者
4个数码管,肯定是动态扫描,不是静态,延时是必须的,请先想清楚扫描显示的基本原理,再动手,撞对的不算。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

3

主题

14

帖子

0

粉丝