找回密码
 立即注册

QQ登录

只需一步,快速开始

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

怎么第一位显示的不是0而是8

[复制链接]
跳转到指定楼层
楼主
代码:
#include "reg51.h"
#define uchar unsigned char
uchar code table_numberP[] = {0xfe,0xfd,0xfa,0xf7,0xef,0xdf,0xaf,0x7f};
uchar code table[] = {0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};
void delay_ms(int);
void init_P();
void main()
{
int num;
for (num=2;num>=0;num--)
{
init_P();
P1 = table_numberP[num];
P0 = table[num];
delay_ms(5);
}

}
void init_P()
{
  P1 = 0xff;
P0 = 0x00;
}
void delay_ms(int num)
{
int i,j;
for (i=num;i>0;i--)
  for(j=110;j>0;j--);
}
问题:
当num=1时,显示0,1正常
当num=2时,显示为8,1,2
为什么会出现这个问题

备注:原理图及接线图

IMG_1753.JPG (2.2 MB, 下载次数: 70)

IMG_1753.JPG

EM3_V3.0原理图.pdf

316.22 KB, 下载次数: 5

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:201949 发表于 2017-5-31 15:43 | 只看该作者
不懂你是什么情况,for (num=2;num>=0;num--)这里num>=0去掉=看看。
回复

使用道具 举报

板凳
ID:149988 发表于 2017-5-31 16:06 | 只看该作者

RE: 怎么第一位显示的不是0而是8

看一下普中原配程序:
/*******************************************************************************
*                 
*                                        普中科技
--------------------------------------------------------------------------------
* 实 验 名                 : 动态数码管显示试验
* 实验说明       : 8位数码管显示0~7
* 连接方式       : 见连接图
* 注    意                 :
*******************************************************************************/

#include<reg51.h>

//--定义使用的IO口--//
#define GPIO_DIG   P0        //段选
#define GPIO_PLACE P1        //位选

//--定义全局变量--//
unsigned char code DIG_PLACE[8] = {
0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};//位选控制   查表的方法控制
unsigned char code DIG_CODE[17] = {
0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};
//0、1、2、3、4、5、6、7、8、9、A、b、C、d、E、F的显示码
unsigned char DisplayData[8];
//用来存放要显示的8位数的值

//--声明全局函数--//
void DigDisplay(); //动态显示函数

/*******************************************************************************
* 函 数 名         : main
* 函数功能                   : 主函数
* 输    入         : 无
* 输    出         : 无
*******************************************************************************/

void main(void)
{
        unsigned char i;

        for(i=0; i<8; i++)
        {
                DisplayData[i] = DIG_CODE[i];       
        }
        while(1)
        {
                DigDisplay();
        }                               
}

/*******************************************************************************
* 函 数 名         : DigDisplay
* 函数功能                   : 使用数码管显示
* 输    入         : 无
* 输    出         : 无
*******************************************************************************/

void DigDisplay()
{
        unsigned char i;
        unsigned int j;

        for(i=0; i<8; i++)
        {
                GPIO_PLACE = DIG_PLACE[i];         //发送位选
                GPIO_DIG = DisplayData[i];     //发送段码
                j = 10;                                                 //扫描间隔时间设定
                while(j--);       
                GPIO_DIG = 0x00;//消隐
        }
}
回复

使用道具 举报

地板
ID:205061 发表于 2017-5-31 17:42 | 只看该作者
liushuiwuqing 发表于 2017-5-31 15:43
不懂你是什么情况,for (num=2;num>=0;num--)这里num>=0去掉=看看。

和这个没关系吧
回复

使用道具 举报

5#
ID:201949 发表于 2017-5-31 17:47 | 只看该作者
或许要消影,就是打开位选,发送数据,再关闭位选。
回复

使用道具 举报

6#
ID:205061 发表于 2017-5-31 17:51 | 只看该作者
你在扫描的时候先关位选,再关段选试试
回复

使用道具 举报

7#
ID:205939 发表于 2017-5-31 21:45 | 只看该作者
liushuiwuqing 发表于 2017-5-31 15:43
不懂你是什么情况,for (num=2;num>=0;num--)这里num>=0去掉=看看。

这个循环只是让前三个数码管显示0,1,2;如果去掉=的话,只能显示第二和第三个数码管
回复

使用道具 举报

8#
ID:205939 发表于 2017-5-31 21:46 | 只看该作者
不倒翁.WZT 发表于 2017-5-31 16:06
看一下普中原配程序:
/***************************************************************************** ...

这个不错,我是新手,还是这个规范。可是我写的那个哪里有问题呢?只有找到了原因,才能防止后面出现相同的错误
回复

使用道具 举报

9#
ID:205939 发表于 2017-5-31 21:47 | 只看该作者
liushuiwuqing 发表于 2017-5-31 17:47
或许要消影,就是打开位选,发送数据,再关闭位选。

int_P()这个初始化相当于消影吧
回复

使用道具 举报

10#
ID:205939 发表于 2017-5-31 21:48 | 只看该作者
taipingxinjing 发表于 2017-5-31 17:51
你在扫描的时候先关位选,再关段选试试

请问,这个是基于什么原理呢?
回复

使用道具 举报

11#
ID:205939 发表于 2017-6-1 13:11 | 只看该作者
搞定了,程序没有错,只是table错了
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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