标题:
大一新人 怎么样编写程序在51单片机上的数码管显示不同的数字呢?
[打印本页]
作者:
wrecking
时间:
2015-7-25 21:36
标题:
大一新人 怎么样编写程序在51单片机上的数码管显示不同的数字呢?
怎么样编写程序在51单片机上的数码管显示不同的数字呢?
作者:
sxlwh
时间:
2015-7-25 22:04
要显示啥给对应的数码管显示段电平信号就行了么
作者:
时光溢彩
时间:
2015-7-25 22:52
首先得看你是用什么样的方法来点量数码管了,但是说到底都是操作IO口的电平,first共阳极数码管还是共阴极数码管,是单个数码管,还是多个在一起,其实都一样,接下来就是看你怎么样操作数码管了,我一般用两种方法,第一种是74ls573,但是比较浪费IO口,但是适合初学者,还有就是74Ls595移位寄存器,省端口,最好有数电的基础吧!
作者:
2534321412
时间:
2015-7-26 00:37
查一下说明书
作者:
SUNCE
时间:
2015-7-26 10:35
你要先了解数码管点亮原理,分共阴和共阳数码管,由于51单片机输出电流有限输出管脚有限,所以单片机控制数码管中间要有个桥梁,可理解成驱动,这个桥梁也有多种形式,三极管、锁存器、移位寄存器、等等,控制方法和接线各有不同,还有数码管根据不同接法要考虑到限流,否则会烧掉。 数码管显示不同的数码 是和他的段选有关,控制不同的引脚 显示不同的段,
作者:
AZONI
时间:
2015-7-26 12:41
动态扫描可以
作者:
可爱的梦扬
时间:
2015-7-26 14:29
利用人的视觉暂留效应,每次使一个数码管亮一下,然后再使第二个数码管亮一下时间如果很短的话,就相当于同时看到两个数码管在显示数字了,(位选用来选择第几个数码管,断选选择数码管当中的某一段亮)。同时要注意消影现象。消影就是一个延时,避免你在刚显示完一个断选后,立即选通下一个位选,这样当你再次选通第二个断选时会出现刚刚的数字。
作者:
1072247069
时间:
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--);
}
作者:
beautiful-life
时间:
2015-7-26 16:36
共阴极还是共阳极,一般用共阳极接法吧,如果一位数码管就简单的多,送上对应的电平信号就可以,如果是多位数码管,就得采用动态扫描,为了稳定无闪烁,一个扫描周期一般控制在16ms,比如4位数码管,一位显示的时间就控制在4ms.
作者:
h1314258
时间:
2015-7-27 11:30
液晶写数据一遍就够了。把主程序里的display1();放到while(1)前面。
作者:
Canva
时间:
2015-7-27 14:51
把不同数字编码写在一个数组里,要显示几就调用第几个就行了
作者:
Canva
时间:
2015-7-27 14:53
看下教程就懂了
作者:
abcbig
时间:
2015-7-27 15:24
数码管就是7段LED吗......
作者:
cryuncle
时间:
2015-7-27 20:23
有个数码管计算器的软件,上面可以计算显示字符相关的数码管电平,然后要用扫描的方法输出,节约IO口
作者:
CHASE
时间:
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);
}
}
作者:
fasefwegf
时间:
2018-1-10 20:20
CHASE 发表于 2015-7-28 11:13
显示不同的数字是动态数码管的显示,动态显示是多个数码管,交替显示,利用人的视觉暂停作用使人看到多个数 ...
有没有按键显示的
作者:
SIRRIAM
时间:
2018-1-11 12:16
动态扫描
作者:
wxzsd
时间:
2018-1-11 14:47
先让你的第一个数码管显示要显示的第一个数字,其他数码管关闭; 然后关闭第一个数码管显示; 然后让你的第二个数码管显示要显示的第二个数字,其他数码管关闭; 然后关闭第二个数码管; 然后让第三个数码管显示要显示的第三个数字,其他数码管关闭; 然后关闭第三个数码管; …… …… 依次类推,到最后一个后返回到第一个重新显示。 当显示的速度足够快的时候,你就看到所有的数码管都亮起来,显示了不同的数字。 这个叫扫描显示。 当你从头扫到尾的频率在25Hz之上的时候,看到的就都亮了,当然如果之后25Hz会感觉到抖动。 至于能跑到多少Hz要看你单片机的速度了。 我们电脑显示屏一般在60Hz。
作者:
於晓凯
时间:
2018-1-11 15:29
网上很多教程,看一看 就好了
作者:
漫步经心
时间:
2018-1-11 15:50
建议先自己仔细学习和操作后再来问别人。
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1