找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索

共阳极数码管 段选位与上 0xf7 后小数点显示 数字却不显示了 是什么原因

查看数: 8531 | 评论数: 16 | 收藏 0
关灯 | 提示:支持键盘翻页<-左 右->
    组图打开中,请稍候......
发布时间: 2018-7-28 18:10

正文摘要:

#include<reg52.h> #include<intrins.h> #define uchar unsigned char #define MAIN_Fosc                11059200UL typedef unsigned int INT16U; sbit DU = P ...

回复

ID:377512 发表于 2018-7-31 11:22
wulin 发表于 2018-7-31 05:35
这与使用八数码管没有什么关系,程序是显示六位,后两位闲置而已。

一直没出来这样的效果
ID:213173 发表于 2018-7-31 05:35
李博文 发表于 2018-7-30 19:46
我用八位共阳极的数码管怎么 只显示小数点 和后两位数

这与使用八数码管没有什么关系,程序是显示六位,后两位闲置而已。


ID:377512 发表于 2018-7-30 19:46
wulin 发表于 2018-7-30 17:53
楼上好多朋友是瞎猜,此程序的共阳数码管加点当然是 P0 = table[z] & 0x7f; 。由于段码与位码共用P0,不 ...

我用八位共阳极的数码管怎么 只显示小数点 和后两位数
ID:213173 发表于 2018-7-30 17:53
李博文 发表于 2018-7-30 10:43
要是或的话 数据有一位是0和1或之后是 1 改变了数据的值 比如 1010 1010按位或0111 1111 变成 1111 1111  ...

楼上好多朋友是瞎猜,此程序的共阳数码管加点当然是 P0 = table[z] & 0x7f; 。由于段码与位码共用P0,不加消隐指令肯定会出问题。楼主认为去掉 & 0x7f就显示正常的说法是不正确的,只是楼主用仿真软件看不出来,要是实际电路就可以看出问题来了。给你改了一下,你试试。#include<reg52.h>
#include<intrins.h>
#define uchar unsigned char
#define MAIN_Fosc                11059200UL

typedef unsigned int INT16U;

sbit DU = P2^6;
sbit WE = P2^7;

uchar code table[]={
//         0                1           2          3                  4                5
        0xc0,  0xf9,  0xa4,  0xb0,  0x99,  0x92,  
//         6                 7                8           9          .                 关显示
    0x82,  0xf8,  0x80,  0x90,  0x7f,   0xff
};
uchar code T_COM[] = {
//1      2     3       4     5      6
0x01,  0x02,  0x04,  0x08,  0x10,  0x20
};
void Delay_Ms(INT16U ms)
{
     INT16U i;
         do{
              i = MAIN_Fosc / 96000;
                  while(--i);   //96T per loop
     }while(--ms);
}
void Display(uchar z)
{        
//------------------------------
        P0 = 0xff;
        DU = 0;
        DU = 1;
        P0 = table[z];               
        DU = 1;                                                
        DU = 0;                                                        

        P0 = T_COM[0];                                   
        WE = 1;                                                
        WE = 0;                                                
        Delay_Ms(3);
//-------------------------------
        P0 = 0xff;
        DU = 0;
        DU = 1;
        P0 = table[z] & 0x7f;  
        DU = 1;
        DU = 0;

        P0 = T_COM[1];                          
        WE = 1;
        WE = 0;
        Delay_Ms(3);
//------------------------------
        P0 = 0xff;
        DU = 0;
        DU = 1;                                                     
        P0 = table[z];               
        DU = 1;                                                
        DU = 0;                                                        

        P0 = T_COM[2];                                   
        WE = 1;                                                
        WE = 0;                                                
        Delay_Ms(3);
//-------------------------------
        P0 = 0xff;
        DU = 0;
        DU = 1;
        P0 = table[z] & 0x7f;
        DU = 1;
        DU = 0;

        P0 = T_COM[3];                        
        WE = 1;
        WE = 0;
        Delay_Ms(3);
//------------------------------
        P0 = 0xff;
        DU = 0;
        DU = 1;                                                        
        P0 = table[z];               
        DU = 1;                                                
        DU = 0;                                                        

        P0 = T_COM[4];                                   
        WE = 1;                                                
        WE = 0;                                                
        Delay_Ms(3);
//-------------------------------
        P0 = 0xff;
        DU = 0;
        DU = 1;
        P0 = table[z] & 0x7f;
        DU = 1;
        DU = 0;

        P0 = T_COM[5];                          
        WE = 1;
        WE = 0;
        Delay_Ms(3);

}
void main()
{
        while(1)       
        {
                Display(0);
        }
}



评分

参与人数 2黑币 +15 收起 理由
NPC-1024 + 8 回帖助人的奖励!
李博文 + 7 很给力!

查看全部评分

ID:377512 发表于 2018-7-30 10:43
lids 发表于 2018-7-30 09:34
段码”或“0x7f才能显示,才是正解,

要是或的话 数据有一位是0和1或之后是 1 改变了数据的值 比如 1010 1010按位或0111 1111 变成 1111 1111 或有一个值为1 则为1

评分

参与人数 1黑币 +20 收起 理由
admin + 20 回帖助人的奖励!

查看全部评分

ID:140489 发表于 2018-7-30 09:34
段码”或“0x7f才能显示,才是正解,
ID:261288 发表于 2018-7-29 20:40
段码”或“0x7f才能显示
ID:377512 发表于 2018-7-29 13:10
去了小数点就可以完全显示
ID:377512 发表于 2018-7-29 13:07
angmall 发表于 2018-7-29 12:16
要数码显示, 你把Delay_Ms(3);  设置成Delay_Ms(9);

设置成9之后数码管交替显示 还是不是一起显示 延时的时间太长了
ID:377512 发表于 2018-7-29 12:42
guangshi_wq 发表于 2018-7-29 10:50
问题在这里,因为这个点不是在每个位上,如果要显示小数点的时候,先要判断这个位有没有小数点

共阳极 直接和 0x7f与 最高位为0 数据的最高位也为0 这样就不需要判断了
ID:155507 发表于 2018-7-29 12:16
要数码显示, 你把Delay_Ms(3);  设置成Delay_Ms(9);
ID:375003 发表于 2018-7-29 10:50
问题在这里,因为这个点不是在每个位上,如果要显示小数点的时候,先要判断这个位有没有小数点

评分

参与人数 1黑币 +20 收起 理由
admin + 20 回帖助人的奖励!

查看全部评分

ID:213173 发表于 2018-7-29 10:37
楼主要在显示程序里每位送段码前加消隐语句!
        P0 = 0xff;//消隐
        DU = 1;//开段选
        DU = 0;//关段选
        P0 = table[z];//送段码
        DU = 1;//开段选
        DU = 0;//关段选
       
        WE = 0;//赘句
        P0 = T_COM[0];//送位码
        WE = 1;//开位选
        WE = 0;//关位选
        Delay_Ms(3);

评分

参与人数 1黑币 +20 收起 理由
admin + 20 回帖助人的奖励!

查看全部评分

ID:380415 发表于 2018-7-29 10:29
在实际中要做消影操作
ID:377512 发表于 2018-7-29 08:45
wc86110 发表于 2018-7-29 03:13
楼主列出的二进制也不完全对啊

哪里不对
ID:96682 发表于 2018-7-29 03:13
楼主列出的二进制也不完全对啊

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

Powered by 单片机教程网

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