找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2164|回复: 7
收起左侧

单片机动态扫描需要显示三位数,但只能显示第一位数

[复制链接]
ID:490109 发表于 2019-3-14 16:08 | 显示全部楼层 |阅读模式
2E9B85FC6D786A233715655BCF633407.png

单片机源程序如下:
  1. #include<reg52.h>
  2. #define uint unsigned int
  3. #define uchar unsigned char
  4. void delay(uint z);
  5. sbit wela=P2^7;
  6. sbit dula=P2^6;
  7. void delay(uint z);

  8. uchar code table[]={
  9. 0x3f,0x06,0x5b,0x4f,
  10. 0x66,0x6d,0x7d,0x07,
  11. 0x7f,0x6f,0x77,0x7c,
  12. 0x39,0x5e,0x79,0x71};

  13. uint bai,shi,ge,temp,numdu;

  14. void main()
  15. {        
  16.         numdu=0;
  17.         temp=111;


  18.            bai=temp%100;
  19.                    shi=temp%100/10;
  20.                 ge=temp%10;
  21.                    while(1)
  22.         {
  23.                 dula=1;
  24.                 P0=table[bai];
  25.                 dula=0;

  26.                 wela=1;
  27.                 P0=0xfe;
  28.                 wela=0;
  29.                           
  30.                 delay(5);

  31.                 dula=1;
  32.                 P0=table[shi];
  33.                 dula=0;

  34.                 wela=1;
  35.                 P0=0xfe;
  36.                 wela=0;
  37.                           
  38.                 delay(5);

  39.                 dula=1;
  40.                 P0=table[ge];
  41.                 dula=0;

  42.                 wela=1;
  43.                 P0=0xfe;
  44.                 wela=0;
  45.                           
  46.                 delay(5);
  47.         
  48.    }
  49. }
  50.         void delay(uint z)
  51.         {
  52.         uint x,y;
  53.         for(x=z;x>0;x++)
  54.                 for(y=110;y>0;y++);
  55.         }

复制代码


回复

使用道具 举报

ID:485458 发表于 2019-3-14 18:56 | 显示全部楼层
因为你始终让位选信号P0=0xfe了
回复

使用道具 举报

ID:374464 发表于 2019-3-14 22:15 | 显示全部楼层
P0=0xfe;

一直位选第一位。。。。
回复

使用道具 举报

ID:472242 发表于 2019-3-15 04:58
你一直在原地踏步,他怎么会动呢?

ID:490109 发表于 2019-3-15 10:38 | 显示全部楼层
2678254412 发表于 2019-3-14 18:56
因为你始终让位选信号P0=0xfe了

谢谢
回复

使用道具 举报

ID:490109 发表于 2019-3-15 10:39 | 显示全部楼层
XIUAOJEI 发表于 2019-3-14 22:15
P0=0xfe;

一直位选第一位。。。。

谢谢
回复

使用道具 举报

ID:213173 发表于 2019-3-15 11:21 | 显示全部楼层
你错的不是一点点,给你改好了。
#include<reg52.h>
#define uint unsigned int
#define uchar unsigned char
//void delay(uint z);
sbit wela=P2^7;
sbit dula=P2^6;
void delay(uint z);

uchar code table[]={
0x3f,0x06,0x5b,0x4f,
0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x77,0x7c,
0x39,0x5e,0x79,0x71};

//uint bai,shi,ge,temp,numdu;
uchar bai,shi,ge,temp;

void main()
{        
//        numdu=0;
        temp=111;
       
//        bai=temp%100;
        bai=temp/100;
        shi=temp%100/10;
        ge=temp%10;

        while(1)
        {
                P0=0xfe;
                wela=1;
                wela=0;

                P0=table[bai];
                dula=1;
                dula=0;
                delay(5);
               
//                P0=0xfe;
                P0=0xfd;
                wela=1;
                wela=0;

                P0=table[shi];
                dula=1;
                dula=0;               
                delay(5);

//                P0=0xfe;
                P0=0xfb;
                wela=1;
                wela=0;

                P0=table[ge];
                dula=1;
                dula=0;               
                delay(5);
        }
}
void delay(uint z)
{
        uint x,y;
//        for(x=z;x>0;x++)
//                for(y=110;y>0;y++);
        for(x=z;x>0;x--)
                for(y=110;y>0;y--);
}
回复

使用道具 举报

ID:490109 发表于 2019-3-15 14:36 | 显示全部楼层
wulin 发表于 2019-3-15 11:21
你错的不是一点点,给你改好了。
#include
#define uint unsigned int

你好,你这代码和我在书上看的代码都是为了避免出现乱码么
你的代码
                P0=0xfe;
                wela=1;
                wela=0;

                P0=table[bai];
                dula=1;
                dula=0;
                delay(5);
书上的代码
                dula=1;
                P0=table[bai];
                dula=0;
                 P0=0xff;   //多出来的代码
                wela=1;
                P0=0xfe;
                wela=0;
                          
                delay(5);
回复

使用道具 举报

ID:213173 发表于 2019-3-15 21:36 | 显示全部楼层
陈立123 发表于 2019-3-15 14:36
你好,你这代码和我在书上看的代码都是为了避免出现乱码么
你的代码
                P0=0xfe;

TX-1C开发板段、位码共用P0+573驱动数码管,如果书上这么写的话那就是错的,共阴数码管消隐要用P0=0x00; 共阳数码管消隐要用P0=0xff; 否则鬼影更严重!如果要完全消除鬼影还可以这样写:

               P0=0x00;
                dula=1;//送段消隐
                dula=0;

                P0=0xfe;
                wela=1;//送位码
                wela=0;

                P0=table[bai];
                dula=1;//送段码
                dula=0;
                delay(2);//2ms延时不要太长,否则会闪烁

                下同
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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