找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索

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

查看数: 3947 | 评论数: 10 | 收藏 0
关灯 | 提示:支持键盘翻页<-左 右->
    组图打开中,请稍候......
发布时间: 2017-5-31 07:45

正文摘要:

代码: #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 ...

回复

ID:205939 发表于 2017-6-1 13:11
搞定了,程序没有错,只是table错了
ID:205939 发表于 2017-5-31 21:48
taipingxinjing 发表于 2017-5-31 17:51
你在扫描的时候先关位选,再关段选试试

请问,这个是基于什么原理呢?
ID:205939 发表于 2017-5-31 21:47
liushuiwuqing 发表于 2017-5-31 17:47
或许要消影,就是打开位选,发送数据,再关闭位选。

int_P()这个初始化相当于消影吧
ID:205939 发表于 2017-5-31 21:46
不倒翁.WZT 发表于 2017-5-31 16:06
看一下普中原配程序:
/***************************************************************************** ...

这个不错,我是新手,还是这个规范。可是我写的那个哪里有问题呢?只有找到了原因,才能防止后面出现相同的错误
ID:205939 发表于 2017-5-31 21:45
liushuiwuqing 发表于 2017-5-31 15:43
不懂你是什么情况,for (num=2;num>=0;num--)这里num>=0去掉=看看。

这个循环只是让前三个数码管显示0,1,2;如果去掉=的话,只能显示第二和第三个数码管
ID:205061 发表于 2017-5-31 17:51
你在扫描的时候先关位选,再关段选试试
ID:201949 发表于 2017-5-31 17:47
或许要消影,就是打开位选,发送数据,再关闭位选。
ID:205061 发表于 2017-5-31 17:42
liushuiwuqing 发表于 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:201949 发表于 2017-5-31 15:43
不懂你是什么情况,for (num=2;num>=0;num--)这里num>=0去掉=看看。

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

Powered by 单片机教程网

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