找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 25184|回复: 19
收起左侧

大一新人 怎么样编写程序在51单片机上的数码管显示不同的数字呢?

  [复制链接]
ID:86845 发表于 2015-7-25 21:36 | 显示全部楼层 |阅读模式
怎么样编写程序在51单片机上的数码管显示不同的数字呢?
回复

使用道具 举报

ID:84598 发表于 2015-7-25 22:04 | 显示全部楼层
要显示啥给对应的数码管显示段电平信号就行了么

回复

使用道具 举报

ID:74441 发表于 2015-7-25 22:52 | 显示全部楼层
首先得看你是用什么样的方法来点量数码管了,但是说到底都是操作IO口的电平,first共阳极数码管还是共阴极数码管,是单个数码管,还是多个在一起,其实都一样,接下来就是看你怎么样操作数码管了,我一般用两种方法,第一种是74ls573,但是比较浪费IO口,但是适合初学者,还有就是74Ls595移位寄存器,省端口,最好有数电的基础吧!
回复

使用道具 举报

ID:86861 发表于 2015-7-26 00:37 | 显示全部楼层
查一下说明书
回复

使用道具 举报

ID:86873 发表于 2015-7-26 10:35 | 显示全部楼层
你要先了解数码管点亮原理,分共阴和共阳数码管,由于51单片机输出电流有限输出管脚有限,所以单片机控制数码管中间要有个桥梁,可理解成驱动,这个桥梁也有多种形式,三极管、锁存器、移位寄存器、等等,控制方法和接线各有不同,还有数码管根据不同接法要考虑到限流,否则会烧掉。 数码管显示不同的数码 是和他的段选有关,控制不同的引脚 显示不同的段,
回复

使用道具 举报

ID:86863 发表于 2015-7-26 12:41 | 显示全部楼层
动态扫描可以
回复

使用道具 举报

ID:85124 发表于 2015-7-26 14:29 | 显示全部楼层
利用人的视觉暂留效应,每次使一个数码管亮一下,然后再使第二个数码管亮一下时间如果很短的话,就相当于同时看到两个数码管在显示数字了,(位选用来选择第几个数码管,断选选择数码管当中的某一段亮)。同时要注意消影现象。消影就是一个延时,避免你在刚显示完一个断选后,立即选通下一个位选,这样当你再次选通第二个断选时会出现刚刚的数字。
回复

使用道具 举报

ID:86891 发表于 2015-7-26 15:06 | 显示全部楼层
#include<reg52.h>
#define uint unsigned int
#define uchar unsigned char
sbit dula=P2^6;
sbit wela=P2^7;
uchar num;
uchar code table[]={
0x3f,0x06,0x5b,0x4f,
0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x77,0x7c,
0x39,0x5e,0x79,0x71};
void delay(uint z);
void main()
{
        wela=1;//11101010
        P0=0xea;
        wela=0;
        while(1)
        {
                for(num=0;num<16;num++)
                        {
                                dula=1;
                                P0=table[num];
                                dula=0;
                                delay(1000);       
                        }
        }
}

void delay(uint z)
{
        uint x,y;
        for(x=z;x>0;x--)
                for(y=110;y>0;y--);       
}
回复

使用道具 举报

ID:70839 发表于 2015-7-26 16:36 | 显示全部楼层
共阴极还是共阳极,一般用共阳极接法吧,如果一位数码管就简单的多,送上对应的电平信号就可以,如果是多位数码管,就得采用动态扫描,为了稳定无闪烁,一个扫描周期一般控制在16ms,比如4位数码管,一位显示的时间就控制在4ms.
回复

使用道具 举报

ID:86938 发表于 2015-7-27 11:30 | 显示全部楼层
液晶写数据一遍就够了。把主程序里的display1();放到while(1)前面。
回复

使用道具 举报

ID:86972 发表于 2015-7-27 14:51 | 显示全部楼层
把不同数字编码写在一个数组里,要显示几就调用第几个就行了
回复

使用道具 举报

ID:86972 发表于 2015-7-27 14:53 | 显示全部楼层
看下教程就懂了
回复

使用道具 举报

ID:86979 发表于 2015-7-27 15:24 | 显示全部楼层
数码管就是7段LED吗......
回复

使用道具 举报

ID:86976 发表于 2015-7-27 20:23 | 显示全部楼层
有个数码管计算器的软件,上面可以计算显示字符相关的数码管电平,然后要用扫描的方法输出,节约IO口
回复

使用道具 举报

ID:87047 发表于 2015-7-28 11:13 | 显示全部楼层
显示不同的数字是动态数码管的显示,动态显示是多个数码管,交替显示,利用人的视觉暂停作用使人看到多个数码管同时显示的效果。就像我们看的电影是有一帧一帧的画面显示的,当速度够快的时候我们看到它就是动态的。当我们显示数码管的速度够快的时候,也就可以看到它们是同时显示了。动态扫描显示是指轮流向各位数码管送出段选(字形码)和位选,由于人眼的视觉残留作用,使人的感觉好像各位数码管同时都在显示。
下面的例程可以参考一下:
/*********************************************************************************
*实验名   :数码管动态显示
*实验效果        :8位数码管显示数字12345678
*注意   : 每位数码管显示之间延迟时间小于3ms可看见8位数码管同时点亮
*
*********************************************************************************/
#include<reg52.h>
#define uchar unsigned char
#define uint unsigned int

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

uchar code sz[17]={0x3f , 0x06 , 0x5b ,0x4f , 0x66 , 0x6d ,0x7d ,
                   0x07 , 0x7f , 0x6f ,0x77 , 0x7c , 0x39 ,
                   0x5e , 0x79 , 0x71 , 0x00};         //0-9&A-F&“不显示”  字型码

void delay(uint xms)                  //xms等于几就延迟几毫秒
{
    uint i,j;
        for(i=xms;i>0;i--)
            for(j=112;j>0;j--);
}

void main()
{
    while(1)
        {
            P0=sz[8];        //数字8
                DU=1;
                DU=0;
                P0=0x7f;
                WE=1;
                WE=0;
                delay(2);                //延迟小于3ms人眼则看到8位数码管同时点亮

                P0=sz[7];        //数字7
                DU=1;
                DU=0;
                P0=0xbf;
                WE=1;
                WE=0;
                delay(2);

                P0=sz[6];        //数字6
                DU=1;
                DU=0;
                P0=0xdf;
                WE=1;
                WE=0;
                delay(2);

                P0=sz[5];        //数字5
                DU=1;
                DU=0;
                P0=0xef;
                WE=1;
                WE=0;
                delay(2);

                P0=sz[4];        //数字4
                DU=1;
                DU=0;
                P0=0xf7;
                WE=1;
                WE=0;
                delay(2);

                P0=sz[3];        //数字3
                DU=1;
                DU=0;
                P0=0xfb;
                WE=1;
                WE=0;
                delay(2);

                P0=sz[2];        //数字2
                DU=1;
                DU=0;
                P0=0xfd;
                WE=1;
                WE=0;
                delay(2);

                P0=sz[1];        //数字1
                DU=1;
                DU=0;
                P0=0xfe;
                WE=1;
                WE=0;
                delay(2);



        }
}




















回复

使用道具 举报

ID:274500 发表于 2018-1-10 20:20 | 显示全部楼层
CHASE 发表于 2015-7-28 11:13
显示不同的数字是动态数码管的显示,动态显示是多个数码管,交替显示,利用人的视觉暂停作用使人看到多个数 ...

有没有按键显示的
回复

使用道具 举报

ID:274741 发表于 2018-1-11 12:16 | 显示全部楼层
动态扫描
回复

使用道具 举报

ID:274635 发表于 2018-1-11 14:47 | 显示全部楼层
先让你的第一个数码管显示要显示的第一个数字,其他数码管关闭; 然后关闭第一个数码管显示; 然后让你的第二个数码管显示要显示的第二个数字,其他数码管关闭; 然后关闭第二个数码管; 然后让第三个数码管显示要显示的第三个数字,其他数码管关闭; 然后关闭第三个数码管; …… …… 依次类推,到最后一个后返回到第一个重新显示。 当显示的速度足够快的时候,你就看到所有的数码管都亮起来,显示了不同的数字。 这个叫扫描显示。 当你从头扫到尾的频率在25Hz之上的时候,看到的就都亮了,当然如果之后25Hz会感觉到抖动。 至于能跑到多少Hz要看你单片机的速度了。 我们电脑显示屏一般在60Hz。
回复

使用道具 举报

ID:274833 发表于 2018-1-11 15:29 | 显示全部楼层
网上很多教程,看一看 就好了
回复

使用道具 举报

ID:193818 发表于 2018-1-11 15:50 | 显示全部楼层
建议先自己仔细学习和操作后再来问别人。
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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