找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2460|回复: 13
收起左侧

我想问一下如何用delay函数做出一个动态扫描数码管。郭天祥的板子。我逻辑那错了?

[复制链接]
ID:632567 发表于 2019-11-4 14:38 | 显示全部楼层 |阅读模式
#include<reg52.h>
#include<intrins.h>
#define uchar unsigned char
#define uint unsigned int
sbit dula=P2^6;
sbit wela=P2^7;
uchar num2;
uchar num;
uchar code table[]={
0x3f,0x06,0x5b,0x4f,                                                                                                                          
0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x77,0x7c,
0x39,0x5e,0x79,0x71};
void delay (uchar z)
{
        uchar x,y;
        for(x=z;x>0;x--)
        for(y=110;y>0;y--);
}
void main()
{        
        num2=wela;   
        wela=0xfe;
        while(1)
        {
                for(num=1;num<7;num++)
                 {
                         wela=1;
                        P0=num2;
                        wela=0;
                        delay(1000);
                        num2=_crol_(num2,1);
                        dula=1;                        
                        P0=table[num];
                        dula=0;
                        if(num2==0xbf)
                        num2=0xfe;
                }
        }               
}

回复

使用道具 举报

ID:632567 发表于 2019-11-4 14:45 | 显示全部楼层
编辑没问题运行后六个管子一起亮一起显示由一变化到七
回复

使用道具 举报

ID:562525 发表于 2019-11-4 18:23 | 显示全部楼层
main的第一行
        num2=wela;   
        wela=0xfe;

很明显的时序错误,而且wela是sbit  类型,不应该赋0和1以外的值。

应修改为
        num2=0xfe;
回复

使用道具 举报

ID:89515 发表于 2019-11-4 20:00 来自手机 | 显示全部楼层
num2没有初值
回复

使用道具 举报

ID:89515 发表于 2019-11-4 20:08 来自手机 | 显示全部楼层
如果是共阴极数码管,必须用1移位取反
回复

使用道具 举报

ID:332444 发表于 2019-11-4 22:48 | 显示全部楼层
那你的问题是虾米?从你描述可以证明你已经做到了。
回复

使用道具 举报

ID:213173 发表于 2019-11-4 23:16 | 显示全部楼层
单片机在想peach 发表于 2019-11-4 14:45
编辑没问题运行后六个管子一起亮一起显示由一变化到七

赋值错误
       num2=wela;   
       wela=0xfe;
顺序错误
       wela=1;
       P0=num2;
       wela=0;
       delay(1000);//延时参数不可以超过uchar类型255
       num2=_crol_(num2,1);
       dula=1;                        
       P0=table[num];
       dula=0;
       if(num2==0xbf)
       num2=0xfe;
无标题.jpg

  1. #include<reg52.h>
  2. #include<intrins.h>
  3. #define uchar unsigned char
  4. #define uint unsigned int
  5. sbit dula=P2^6;
  6. sbit wela=P2^7;
  7. uchar num2;
  8. uchar num;
  9. uchar code table[]={
  10. 0x3f,0x06,0x5b,0x4f,
  11. 0x66,0x6d,0x7d,0x07,
  12. 0x7f,0x6f,0x77,0x7c,
  13. 0x39,0x5e,0x79,0x71};
  14. void delay (uchar z)
  15. {
  16.         uchar x,y;
  17.         for(x=z;x>0;x--)
  18.                 for(y=110;y>0;y--);
  19. }
  20. void main()
  21. {        
  22.         num2=0xfe;   
  23.         while(1)
  24.         {
  25.                 for(num=1;num<7;num++)
  26.                 {
  27.                         P0=0x00;//消除鬼影
  28.                         dula=1;
  29.                         dula=0;

  30.                         P0=num2;//送位码
  31.                         wela=1;
  32.                         wela=0;

  33.                         P0=table[num];//送段码
  34.                         dula=1;
  35.                         dula=0;
  36.                         delay(2);//延时2ms
  37.                         num2=_crol_(num2,1);
  38.                         if(num2==0xbf)
  39.                                 num2=0xfe;
  40.                 }
  41.         }               
  42. }
复制代码



回复

使用道具 举报

ID:453974 发表于 2019-11-4 23:47 | 显示全部楼层
单片机在想peach 发表于 2019-11-4 14:45
编辑没问题运行后六个管子一起亮一起显示由一变化到七

你想实现什么结果
回复

使用道具 举报

ID:453974 发表于 2019-11-4 23:52 | 显示全部楼层
#include<reg52.h>
#include<intrins.h>
#define uchar unsigned char
#define uint unsigned int
sbit dula=P2^6;
sbit wela=P2^7;
uchar num2;
uchar num;
uchar code table[]={
0x3f,0x06,0x5b,0x4f,                                                                                                                          
0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x77,0x7c,
0x39,0x5e,0x79,0x71};
void delay (uchar z)
{
        uchar x,y;
        for(x=z;x>0;x--)
        for(y=110;y>0;y--);
}
void main()
{        
              wela=0xfe;
        num2=wela;   

        while(1)
        {
                for(num=1;num<7;num++)
                 {
                         wela=1;
                        P0=num2;
                        wela=0;
                        delay(1000);
                        num2=_crol_(num2,1);
                        dula=1;                        
                        P0=table[num];
                        dula=0;
                        if(num2==0xbf)
                        num2=0xfe;
                }
        }               
}
这样应该就没问题了
回复

使用道具 举报

ID:437615 发表于 2019-11-5 08:21 来自手机 | 显示全部楼层
我来学习一下,我看到这个是共阴的数码管为什么位码只用一个就行了
回复

使用道具 举报

ID:632567 发表于 2019-11-5 19:59 | 显示全部楼层
wulin 发表于 2019-11-4 23:16
赋值错误
       num2=wela;   
       wela=0xfe;

对的解决了
回复

使用道具 举报

ID:632567 发表于 2019-11-5 19:59 | 显示全部楼层
_4061N_ 发表于 2019-11-4 18:23
main的第一行
        num2=wela;   
        wela=0xfe;

回复

使用道具 举报

ID:632567 发表于 2019-11-5 20:01 | 显示全部楼层
累不死的狗 发表于 2019-11-4 23:52
#include
#include
#define uchar unsigned char

后面修改了一下
这样就可以达成扫描数码管了
#include<reg52.h>
#include<intrins.h>
#define uchar unsigned char
#define uint unsigned int
sbit dula=P2^6;
sbit wela=P2^7;
uchar num2;
uchar num;
uchar code table[]={
0x3f,0x06,0x5b,0x4f,                                                                                                                          
0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x77,0x7c,
0x39,0x5e,0x79,0x71};
void delay (uchar z)
{
        uchar x,y;
        for(x=z;x>0;x--)
        for(y=100
                ;y>0;y--);
}
void main()
{      
                dula=0;
                wela=0;
        num2=0xfe;   
        while(1)
        {
                for(num=1;num<7;num++)
                 {
                        wela=1;
                        P0=num2;
                        wela=0;
                                                num2=_crol_(num2,1);
                        delay(10);              
                        dula=1;                        
                        P0=table[num];
                        dula=0;
                                                delay(10);
                        if(num2==0xbf)
                        num2=0xfe;
                                                wela=1;
                                                dula=1;
                                                P0=0x00;
                                                delay(5);
                                                wela=0;
                                                dula=0;         
                }
        }               
}
回复

使用道具 举报

ID:632567 发表于 2019-11-5 20:02 | 显示全部楼层
_4061N_ 发表于 2019-11-4 18:23
main的第一行
        num2=wela;   
        wela=0xfe;

对的然后再消影
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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