如何用单片机让数码管显字

作者&投稿:宰平 (若有异议请与网页底部的电邮联系)
如何利用单片机让4位数码管显示?~

程序如下(用的是STC89C52芯片):
#include//52系列单片机头文件
#define uchar unsigned char
#define uint unsigned int
uint x,y;
uchar code table[]={
0x3f,0x06,0x5b,0x4f,
0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x77,0x7c,
0x39,0x5e,0x79,0x71};//共阴极数码管编码
void display(uchar,uchar,uchar,uchar);//声明子函数
void delay(int);//声明子函数
void main()
{
while(1)
{
display(1,2,3,4);//主程序始终调用数码管显示子程序
}
}
void display(uchar a,uchar b,uchar c,uchar d)
{
P2=0xef;
P0=table[a];//给第一个数码管送"a"
delay(1);//延时1ms
P2=0xdf;
P0=table[b];//给第二个数码管送"b"
delay(1);//延时1ms
P2=0xbf;
P0=table[c];//给第三个数码管送"c"
delay(1);//延时1ms
P2=0x7f;
P0=table[d];//给第三个数码管送"d"
delay(1);//延时1ms
}
void delay(uint z)//延时子函数
{
uint x,y;
for(x=z;x>0;x--)
for(y=110;y>0;y--);
}

扩展资料
led数码管是由多个发光二极管封装在一起组成“8”字型的器件,引线已在内部连接完成,只需引出它们的各个笔划,公共电极。led数码管常用段数一般为7段有的另加一个小数点,还有一种是类似于3位“+1”型。
位数有半位,1,2,3,4,5,6,8,10位等等,led数码管根据LED的接法不同分为共阴和共阳两类,了解LED的这些特性,对编程是很重要的,因为不同类型的数码管,除了它们的硬件电路有差异外,编程方法也是不同的。
参考资料来源:百度百科-数码管

从电路图来看,是需要数码管共阳极的,哪一位的三极管导通,则该位的数码管就有被点亮的机会。
那么七段码数据,低电平的位对应该笔画的LED亮。

大致代码:
P2=0xff;
P0=s_code[1]; //0xF9
P2=0xfe; // P2.0=0
delay_ms();
P2=0xff;
P0=s_code[2]; //0xA4
P2=0xfd; // P2.1=0
delay_ms();
P2=0xff;
P0=s_code[3]; //0xB0
P2=0xfb; // P2.2=0
delay_ms();
P2=0xff;
P0=s_code[4]; //0x99
P2=0xf7; // P2.3=0
delay_ms();

LED静态显示接口
数码管工作在静态显示方式时,共阴极(共阳极)的公共端COM连接在一起接地(电源)。每位的段选线与一个8位并行口相连。只要在该位的段选线上保持段选码电平,该位就能保持相应的显示字符。这里的8位并行口可以直接采用并行I/O接口片(例如80C51的P1端口、8155和8255的I/O端口等),也可以采用串行输入/并行输出的移位寄存器。考虑到若采用并行I/O接口,占用I/O资源较多,因而静态显示方式常采用串行接口方式,外接8位移位寄存器74HCl64构成显示电路,图2是通过串行口扩展8位LED显示器静态驱动电路,在TXD(P3.1)运行时钟信号,将显示数据由RXD(P3.0)口串行输出,串行口工作在移位寄存器方式(方式0)。

图2中使用的是共阴极数码管,因而各数码管的公共极COM端接地,要显示某字段,则相应的移位寄存器74HC164的输出线必须是高电平。 显然,要显示某字符,首先要把这个字符转换成相应的字形码,然后再通过串行口发送到74HC164。74HC164把串行口收到的数变为并行输出加到数码管上。先建立一个字形码表,以十六进制数的次序存放它们的相应字形码,共阴极字形码表如表1所示。
考虑到本设计成本问题,静态电路需要对应于每一个数码管LED接一个移位寄存器74HC164芯片。而且TXD、RXD端口在上位机通信中要用到,而如果界别的端口,编码就变得比较复杂了,所以静态显示就放弃了。

如要显示字符6,查表可知6的字形码为0x7d,把0x7d送到8位移位寄存器74HC164即可。显然,要显示字符0~9、A~F,其高4位为全0,而低4位为十六进制数。如果要显示的数高半字节不是0,则要通过程序加以变换。这种静态LED显示法有着显示亮度大,软件较为简单的特点,但硬件上使用芯片多,每个LED显示器需要一个驱动电路。

晕。你太懒了吧,什么都要现成的可能吗。
给你思路
硬件设计方面:看你的数码管的资料,一般就几个数据线,地址线等。与单片机的普通IO相连就可以了。
软件设计方面:建立一个字库表,然后直接,然后控制与数码管相连的IO就行了。
如果你没有弄个单片机程序,建议你先学习下,要不想学习,就想不劳而获,建议你改行。

去看单片机教程吧,搜索郭天祥的吧

这样做学问是学不来的!
建议自己先充电!
充电过程中如果有不会或者是不明白的,我们可以商讨!

我刚好才学完单片机,AT89S52是我上手的芯片,我没法发图,要的话给我邮箱,我发给你。程序先给你吧,四个,先静态,后动态,第四个时钟形式自加
1。 #include<reg52.h>
sbit dula=P2^6;
sbit wela=P2^7;

void main()
{
wela=1;
P0=0xc0;
wela=0;

dula=1;
P0=0x06;
dula=0;
while(1);
}

2。 #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--);
}

3。 #include<reg52.h>
#define uint unsigned int
#define uchar unsigned char
sbit dula=P2^6;
sbit wela=P2^7;
sbit d1=P1^0;
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()
{
EA=1;//开总中断
EX0=1;//开外部中断0
//IT0=1;
TCON=0x01;
wela=1;//11101010
P0=0xea;
wela=0;
while(1)
{
for(num=0;num<16;num++)
{
d1=1;
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--);
}

void exter0() interrupt 0
{
d1=0;
}

4。 #include<reg52.h>
#define uint unsigned int
#define uchar unsigned char
sbit dula=P2^6;
sbit wela=P2^7;
sbit d1=P1^0;
uchar num,num1;tt;
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()
{
num=0;
tt=0;
TMOD=0x11;//设置定时器0为工作方式1
TH0=(65536-10000)/256;
TL0=(65536-10000)%256;
TH1=(65536-20000)/256;
TL1=(65536-20000)%256;
// EA=1;//开总中断
ET0=1;//开定时器0中断
ET1=1;
TR0=1;//启动定时器0
TR1=1;
wela=1;//11101010
P0=0xea;
wela=0;
dula=1;
P0=0x3f;
dula=0;
while(1)
{
if(num1==25)
{
num1=0;
P1=~P1;
}
if(tt==100)
{
tt=0;
num++;
if(num==16)
num=0;
dula=1;
P0=table[num];
dula=0;
}
}
}

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

void time0() interrupt 1
{
TH0=(65536-10000)/256;
TL0=(65536-10000)%256;
tt++;
}
void time1() interrupt 3
{
TH1=(65536-20000)/256;
TL1=(65536-20000)%256;
num1++;
}

要图得用邮箱了。


怎样用单片机控制数码管的显示?
首先,假设你有一个共阴极数码管,并且它连接到单片机的P0口。每个数码管的段(a, b, c, d, e, f, g, dp)通过限流电阻连接到P0口的相应位。共阴极数码管的公共端(阴极)连接到地。在这个例子中,我们定义了一个段码表seg_table,它包含了数字0到9对应的7段数码管的段码。在主循环中,我们...

如何用单片机控制LED数码管?
DIS_DIGIT EQU 40H;位选通值, 传送到P2口用于选通当前数码管的数值,; 如等于0xfe时, 选通P2.0口数码管DIS_INDEX DATA 41H;显示索引, 用于标识当前显示的数码管和缓冲区的偏移量DIS_BUF DATA 50H;显于缓冲区起始地址ORG 0000HAJMP MAINORG 000BHAJMP INTT0ORG 0100HMA...

单片机89c52如何控制多个数码管?
只想用P3口的话,必须另加控制元件。1一种方法是用两个锁存器来锁存数码管的段码和位码,进行动态扫描显示。2另一方法是,用P3口的4位接一个BCD译码器控制数码管的段码,再P3口的3位接一个3-8译码器来控制数码管的位进行动态扫描。3再就是可以用P3口的两根串行线接串并转换IC,来驱动数码管...

单片机控制数码管显示电路图的运行原理是什么?
用引脚输出高低电平来控制数码管的8个子管的亮灭,达到数字和小数点显示的效果,通常要给每个数字做一个转换表,以便在编程的时候忽略转换过程,达到快速编程的目的,转换表一般采用枚举的方式,具体转换数字和你电路里面的连接方式有关系,用二进制写出来,再换算成16进制就好了。数码管,也称作辉光管,是...

单片机的数码管怎么点亮的?
3、确认代码无误后,进入下一步,就是在这一行代码(箭头所指)的地方,将这四个字删去。4、然后如图所示,四个字已经删去,只要改成数字相应的代码即可。5、这里改成的是代表数字0的代码,如图所示。6、最后写好代码后,将生成的hex文件写进单片机,数码管显示的数字就变成0了。

怎么用单片机控制一个数码管??
2、不用单片机,用数字电路实现很容易呀。用一片10线-4线编码器,接10个按键,输出为BCD码,再用一片74LS247,七段译码器\/驱动器,输出接一个共阳数码管即可,按几号键,数码管就显示几了。下表就是74LS147的真值表。3、LS147是优先编码器,从高位起,为0的就输出对应的编码的反码值。而其后...

如何利用单片机让4位数码管显示
3.4.1 步骤一:PROTEUS电路设计,单片机控制四位共阴极数码管动态扫描显示的原理图如图5-17所示。图5-17 四位共阴极数码管动态扫描显示的原理图 1、选取元器件 ①单片机:AT89C52 ②带公共端的排阻:RESPACK-8 ③四位共阴极数码管:7SEG-MPX4-CC 2、放置元器件、放置电源和地、连线、元器件属性...

如何用单片机让数码管显字
74HC164把串行口收到的数变为并行输出加到数码管上。先建立一个字形码表,以十六进制数的次序存放它们的相应字形码,共阴极字形码表如表1所示。考虑到本设计成本问题,静态电路需要对应于每一个数码管LED接一个移位寄存器74HC164芯片。而且TXD、RXD端口在上位机通信中要用到,而如果界别的端口,编码就...

51单片机如何控制LED数码管循环左移?
1根据需要,可以定义一个 8 位或者 16 位的整型变量,用于存储待移位的数值。比如可以定义 uint8_t num = 0x7F;。2在程序中初始化相应的数码管端口,以便将二进制数值输出到数码管上。比如可以使用 P0 端口和 P2 端口控制两个数码管,可以通过将相应的端口设置为输出模式并全部清零来初始化端口。...

如何利用单片机让4位数码管显示?
程序如下(用的是STC89C52芯片):include<reg52.h>\/\/52系列单片机头文件 define uchar unsigned char define uint unsigned int uint x,y;uchar code table[]={ 0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};\/\/共阴极数码管编码 void display...

江华瑶族自治县13545791579: 单片机试验数码管上如何显示数字 -
定梁和爽: 解决方法: 试验数码管上显示数字( 单片机直接实现位选 共阴极) . 解决方式: 连接方法:P0与J12 用8PIN排线连接 P1与JP16 用排线连接 . 代码:#include#define uint unsigned int #define uchar unsigned char void delay(uint z) ...

江华瑶族自治县13545791579: 怎样用单片机驱动LED数码管显示 -
定梁和爽: 数码管是由若干个led发光字段组成,当不同字段点亮时可形成不同的数字或字符.所有字段的led阳极接在一起,点亮字段靠控制led阴极的称共阳极数码管,反之为共阴极数码管.单片机就是通过输出端口控制数码管不同字段的亮暗完成字符显示的(有时要加电流驱动电路).对于多位数码管显示器在显示方式上分为静态显示(多位同时显示)和动态显示(扫描各位依次显示).如果你有单片机学习板的话最好,自己看教程学习,这方面你可以看吴鉴鹰单片机开发板,教程和板子功能做得全面

江华瑶族自治县13545791579: 52单片机如何让数码管同时显示12345678并一起闪烁? -
定梁和爽: 数码管本身可能就是动态显示,相当于每个数码管都在闪烁,只是我们的眼睛分辨不出来而感觉不到闪烁,动态显示再加上闪烁,稍微有点复杂.但是还是可以实现的,因为你已经成能让数码管动态的显示数字了,那么你就一段时间让数码管显示正常的数字,一段时间让数码管全灭(假设你的数码管是共阳极的话,简单点实现就是此时位选的值全是高电平),这样就能完成动态数码管的闪烁功能,但是这个时间还需要实际调试

江华瑶族自治县13545791579: 请问怎么用单片机控制三位数码管,让它显示一个值?需要用到驱动吗? -
定梁和爽: 用轮询的方法,送第一位显示数据时,给第一位通电,送第二位显示数据时,给第二位通电,送第三位显示数据时,给第三位通电,至少驱动,普通的数码管可以直接通过单片机的IO驱动

江华瑶族自治县13545791579: 怎样点亮数码管怎样用51单片机点亮数码管 -
定梁和爽: 数码管分共阴极和共阳极 如果是常用的共阴极,把com端接地 然后数码管的abcdefg接到单片机P1口,a对P1.0, g对P1.6 然后P1口输出3F,看到就是0,输出06,看到就是1

江华瑶族自治县13545791579: MSP430单片机如何不用中断实现数码管显示,急求程序 -
定梁和爽: 1、动态显示:通过主程序调用数码管显示程序,定时更新; 2、静态显示:通过引脚直接驱动即可. 以上2种方法都不需要定时器中断.

江华瑶族自治县13545791579: 用单片机c语言写一个数码管从00到99的数字显示,要用到锁存器!!!求大神指教 -
定梁和爽: /*******************************************************************************************************//*******************************************************************************************************/#include //通用89C52头文件 sbit AA=P3^4;//数码管显示用IO端...

江华瑶族自治县13545791579: 51单片机怎么让数码管继续显示原有的数字 -
定梁和爽: 你是想显示一个新数字之后,再回来显示原来的数字吗?那开一块空间,把原来的数字暂时存放,然后设定一个标志.当符合条件时,就显示原来的数字.

江华瑶族自治县13545791579: 单片机如何用c语言使数码管显示3 -
定梁和爽: #include #define uint unsigned int main() { uint i; P1=0x00; while(1) { P1=0x4f; //共阴极数码管,接在P1口 } }

江华瑶族自治县13545791579: 用51单片机,怎么让数码管显示一串矩阵键盘按下的键代表的数(0~f)? -
定梁和爽: 这种显示方式就和手机拨号时,按下号码的显示是一样,第一个数码先在右边显示,再按键,依此向左移动显示.要是6位数码管,就保留6位显示了,按键超过6位时,先按的自然丢掉了.

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 星空见康网