173 2438 5004
KEROS加密芯片——品牌直销 | 免费样品 | 技术支持
当前位置:网站首页 > 资讯中心 正文 资讯中心

单片机数码管显示流程图

htxw 2023-03-14 资讯中心 10 ℃

单片机:K1~K4控制数码管加减演示 流程图!!!

看了你的程序,真让人无语啊,一个简单的加减数程序竟然能编写成这么繁琐

首先,你的数码管编码不对,除非你是自己做的硬件电路

再有,你的按键处理部分不好,也许可以实现你的功能吧,我没有验证

玩单片机这么久了,从没见过这样进行按键处理的

别的不多说了,给你一个我自己编写的加减数程序吧

端口已经按照你的板子连线改好了,至于数码管的编码,如果不对,你再自行修改吧

如果看不懂,或任何疑问,可以随时追问,也可私密我加个好友

#includereg52.h

sbit K1=P1^0; sbit K2=P1^1; sbit K3=P1^2;//按键端口定义

unsigned  int count;//数码管显示用变量

char table[10]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};//数码管显示编码

/***************************************************************************/

void delay(char x) {char j;for(;x0;x--){for(j=100;j0;j--);}}//延时

/***************************************************************************/

void display(int xs)//四位数码管显示

{

char d1,d2,d3,d4;

d1=(xs/1)%10;       d2=(xs/10)%10;

d3=(xs/100)%10;   d4=(xs/1000)%10;

P0=table[d1]; P2=0x01; delay(5); P2=0x00;

P0=table[d2]; P2=0x02; delay(5); P2=0x00;

P0=table[d3]; P2=0x04; delay(5); P2=0x00;

P0=table[d4]; P2=0x08; delay(5); P2=0x00;

}

/***************************************************************************/

void key()//按键处理

{

if(K1==0){delay(10);if(K1==0){count++;}while(!K1){display(count);}}//加一

if(K2==0){delay(10);if(K2==0){count--;}while(!K2){display(count);}}//减一

if(K3==0){delay(10);if(K3==0){count=0;}while(!K3){display(count);}}//清零

display(count); if(count9999){count=0;}//调用显示函数 及 防止溢出

}

/***************************************************************************/

void main(){count=1234; while(1){key();}}//主函数

/***************************************************************************/

根据参考程序3写单片机数码管动态显示流程图

常通对于一个较复杂的程序,在写程序之前,有些人习惯画流程图,或者说,是某些老教材上所讲的内容,一些人写毕业没计拿流程图凑数,一部分人写程序水平较一般才画流程图,你都有程序了,还要流程图,是为了凑页数?

单片机数码管显示

告诉你步骤

1、根据原理图布局连线 比如S1是左下角第一键,那么就知道他按下是P3口的值

2、扫描P3口 if(P3==0xnn)---延时20-50ms(按键消抖)----- 再if(P3==0xnn)

在if语句下面内容大概这样

1)20160101数对应的显示真值表数组位 SMG[]={0xnn.0x00,0xnn------},比如2就对应smg[2]

2)具体用for循环

for(i=0;i8;i++)

{

P1=INDEX[I];//这个数值一开始要声明初始化,就是具体哪个位的数码管显示

P0=SMG[I]//这个数组一开始也要声明初始化,这个就是对应位显示的数字

DELAY(10)//延时5-10MS就是每个20-30MS每个数码管依次点亮显示内容,全部显示完不超多100ms,人眼在这个时间范围内会认为是全部点亮

}

51单片机加八个数码管设计一个单片机显示系统,要求八只管分别显示1~8。求这个程序的流程图,没有图

8个数码管的话一般都是由一个三八译码器控制,而且有三个i/o口作为选择数码管的钥匙,三个i/o口按一定顺序组合成的二进制000~111即是数字为0~7的8个数码管分别对应的三极管(开关),三个i/o口对应哪个数字就打开哪个数字的开关从而对应的数码管就会亮,其他一定会灭,所以为i/o口的一次赋值,就只开一个数码管。所以要求8个数码管分别显示1~8其实就是很快地轮次开闭8个数码管的开关,不断循环往复,切换开关的速度让肉眼无法识别有闪动感,而且每切换一次开关之前记得先消除鬼影

如何快速切换开关?

1.定时器中断或定时器中断函数

2.普通的延时函数(延时要自己测试)

3.不延时(开关切换之前要消除鬼影)

如何利用单片机让4位数码管显示?

程序如下(用的是STC89C52芯片):

#includereg52.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(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;x0;x--)

for(y=110;y0;y--);

}

扩展资料

led数码管是由多个发光二极管封装在一起组成“8”字型的器件,引线已在内部连接完成,只需引出它们的各个笔划,公共电极。led数码管常用段数一般为7段有的另加一个小数点,还有一种是类似于3位“+1”型。

位数有半位,1,2,3,4,5,6,8,10位等等,led数码管根据LED的接法不同分为共阴和共阳两类,了解LED的这些特性,对编程是很重要的,因为不同类型的数码管,除了它们的硬件电路有差异外,编程方法也是不同的。

参考资料来源:百度百科-数码管

使用单片机实现四位八段的数码管显示,显示出852.6如何实现,请写出实现流程

有两种方式,一种是动态扫描,假设你数码管有COM1,COM2,COM3,COM4,然后有8个段,常见的是7个控制数码管段还有一个小数点一共8个段

那么这里就描述单片机一次扫描4位的过程,首先,如果你的数码管是共阳,那么显示第一位就将COM1引脚拉到高电平,然后8个引脚接到单片机IO口上,你说你要显示852.6,那么第一位是8,7个段全亮,所以7个IO全部拉低电平就行,随后延迟差不多1ms左右

接下来就是显示第二个数码管,和之前一样,COM2拉高,然后你要显示5的话有两个段是不亮的,所以哪两个脚你不想让他亮,你直接把对应的IO拉高就行,你要让剩下哪5个段亮直接拉高电平即可,随后再延时1ms左右

接下来两位和上面一样,对应位的COM口拉高电平,对应的字段IO你要让哪个段亮就把哪个拉低电平,哪个段不想亮就拉高电平,最后延时1ms就行

最后程序外面套个while(1)就可以实现无限循环了

还有一种方式就是用74HC595和4个数码管连接起来,74HC595是一个串行锁存寄存器,只需要4个74HC595和4个数码管就行,最少只占用单片机2个IO

这里就说明一下74HC595的控制方式

首先74HC595应该有个EN口,拉低,然后时钟拉高,循环8次,再把时钟信号拉低,用一个AND运算,如你要传输一个0XAA,那么就是

void InputData(0XAA)

{

for(int i=0;i8;i++)

{

if(dat0x01==1)

{

digitalWrite(SCK,LOW);

digitalWrite(DAT,HIGH);

delayMicroseconds(10);

}

else

{

digitalWrite(SCK,LOW);

digitalWrite(DAT,LOW);

delayMicroseconds(10);

}

dat=dat1;

digitalWrite(SCK,HIGH);

}

}

这里我是直接复制我以前写的一个arduino驱动74HC595的程序,SCK是时钟,DAT是数据

建议你把单片机和你数码管的电路图发出来,你说如何实现我不知道你是怎么接的数码管

单片机数码管显示流程图的介绍就聊到这里吧,感谢您花时间阅读,谢谢。

本文标签:单片机数码管显示流程图

<