普中开源电子分享网

 找回密码
 立即注册
搜索
查看: 2989|回复: 5

动态数码管显示

[复制链接]

1

主题

2

帖子

7

积分

新手上路

Rank: 1

积分
7
发表于 2020-8-9 18:59:01 | 显示全部楼层 |阅读模式
1金钱
我做动态数码管实验的时候发现数码管显示有问题,是不是板子上的数码管接错了,我用的是V2.2版本的开发版,程序下载的教程程序,但显示不对

我知道答案 本帖寻求最佳答案回答被采纳后将获得系统奖励10 金钱 , 目前已有3人回答

附件: 您需要 登录 才可以下载或查看,没有帐号?立即注册
回复

使用道具 举报

1

主题

7

帖子

31

积分

新手上路

Rank: 1

积分
31
发表于 2020-8-9 20:29:26 | 显示全部楼层
是不是switch里的数打错了。
顺便上传一个结合开关的动态。按一下开关从0~7.
不知道为什么数字有点暗
//按键使动态数码管从0到7;
#include"reg52.h"
typedef unsigned char u8;
typedef unsigned int u16;
sbit LSA=P2^2;
sbit LSB=P2^3;
sbit LSC=P2^4;
sbit key=P3^0;
void moves(u16 n);//定义函数名(独立按键函数在)
unsigned char smg[16]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,
                      0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};//阴极段码
void delay_ms(unsigned int  n)
{
  unsigned int i=0,j=0;
  for(i=0;i<n;i++)
  for(j=0;j<123;j++)
  {
    ;
  }
}
//独立按键
void keypros(u16 i)
{   
       
        if(key==0)//判断按键是否被按下
        {       
                delay_ms(5);//消抖(延时一般在5ms~10ms)
                if(key==0)//再次判断按键是否被按下
                {
                   i++;
                        if(i>7)
                                {
                                  i=0;
                                }
                }
                while(!key)//等待按键释放(key!=1)
                {
                        ;
                }
        }
        moves(i);
       
}
//动态数码管
void moves(unsigned int n)
{
  switch(n)
  {
        case(0)SA=0,LSB=0,LSC=0;break;//0
        case(1)SA=1,LSB=0,LSC=0;break;
        case(2)SA=0,LSB=1,LSC=0;break;
        case(3)SA=1,LSB=1,LSC=0;break;
        case(4)SA=0,LSB=0,LSC=1;break;
        case(5)SA=1,LSB=0,LSC=1;break;
        case(6)SA=0,LSB=1,LSC=1;break;
        case(7)SA=1,LSB=1,LSC=1;break;
  }
  P0=smg[n];
  delay_ms(50);
  P0=0x00;//消隐
  keypros(n);  
}

void main()
{   
    keypros(0);
}       
回复

使用道具 举报

1

主题

2

帖子

7

积分

新手上路

Rank: 1

积分
7
 楼主| 发表于 2020-8-10 10:33:41 | 显示全部楼层
xin16 发表于 2020-8-9 20:29
是不是switch里的数打错了。
顺便上传一个结合开关的动态。按一下开关从0~7.
不知道为什么数字有点暗

#include <reg52.h>                         
#define uint unsigned int   
#define uchar  unsigned char
sbit LSA=P2^2;
sbit LSB=P2^3;
sbit LSC=P2^4;
uchar code smgduan[17]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,
                                        0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};
void  delay(uint xms)
{
uint i,j;
for(i=xms;i>0;i--)
for(j=110;j>0;j--);
}
void  disdisply()
{
uchar a;
for(a=0;a<8;a++)
{
  switch(a)
  {
  case (0)SA=0;LSB=0;LSC=0;break;
  case (1)SA=1;LSB=0;LSC=0;break;
  case (2)SA=0;LSB=1;LSC=0;break;
  case (3)SA=1;LSB=1;LSC=0;break;
  }
  P0=smgduan[a];
  delay(1);
  P0=0x00;
}
}
void main()
{
while(1)
{
  disdisply();
}
}
大佬,这是我的程序,连线也没问题,就是显示不对
回复

使用道具 举报

1

主题

7

帖子

31

积分

新手上路

Rank: 1

积分
31
发表于 2020-8-10 11:37:27 | 显示全部楼层
本帖最后由 xin16 于 2020-8-10 11:38 编辑
墨染眼眸 发表于 2020-8-10 10:33
#include                          
#define uint unsigned int   
#define uchar  unsigned char

for循环改成a<4,因为你只写了4个case,只能点亮前4个数码管,如果a<8,导致第四个数码管最终为p0=smgduan[7];
回复

使用道具 举报

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

本版积分规则

关闭

站长推荐上一条 /1 下一条

Archiver|手机版|小黑屋|普中开源电子分享网 粤ICP备16123577号-2

GMT+8, 2024-4-27 09:04 , Processed in 0.107925 second(s), 36 queries .

Powered by 论坛搭建 X3.4

Copyright © 2001-2021, Tencent Cloud.

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