单片机C51 之(7)GPIO 显示

编程入门 行业动态 更新时间:2024-10-06 14:29:09

<a href=https://www.elefans.com/category/jswz/34/1769836.html style=单片机C51 之(7)GPIO 显示"/>

单片机C51 之(7)GPIO 显示

数码管的一种是半导体发光器件,数码管可分为七段数码管和八段数码管,区别在于八段数码管比七段数码管多一个用于显示小数点的发光二极管单元DP(decimal point),此时,发光二极管的外观是长条型,而不是常见的圆柱形。
可以理解成几个LED按照一定的位置摆放在一起的一个器件而已,包括类似于“米”型的数码管原理都是类似的,以及后面的点阵等。


按照连接方式 分为共阴共阳。由于51 单片机GPIO默认是高电平、GPIO的电流驱动力有限,所以一般使用共阳比较多。

显示不同的数字,就是让不同位置的LED亮起来:

#include <reg51.h>
#define uchar unsigned charvoid DelayTime10ms(unsigned int DelayValue);
uchar code SegCode[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e,0xff};  //共阳极0-9 a-f
void main()
{int i;for(;;)	{	for(i=0;i<16;i++)	{ //从0显示到F,每秒切换P0 = SegCode[i];DelayTime10ms(100);}}
}void DelayTime10ms(unsigned int DelayValue)
{unsigned int a,b;for(a=0;a<DelayValue;a++)for(b=0;b<1828;b++);	
}


一个数码管已经亮了,两个、三个也是比较简单的:
做个简单的6分钟倒计时

#include <reg51.h>
#define uchar unsigned charsfr AAA=0x80;
sfr BBB=0x90;
sfr CCC=0xA0;
sfr DDD=0xB0;
void DelayTime10ms(unsigned int DelayValue);
uchar code SegCode[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e,0xff};  //共阳
void main()
{int sec,min;sec = 00;min = 6;for( ; ; )	{	DDD=SegCode[sec % 10];   //拆分个位与十位CCC=SegCode[sec / 10];BBB=SegCode[min % 10] & 0x7f;   //在分钟的末尾加上一个小数点,区分分钟与秒钟AAA=SegCode[min / 10];DelayTime10ms(100);if(sec == 00){sec = 59;min --;if(min < 0||min > 7) {min = min = 0;}}else sec--;		}
}void DelayTime10ms(unsigned int DelayValue)
{unsigned int a,b;for(a=0;a<DelayValue;a++)for(b=0;b<1828;b++);	
}


这里加上按键,启动、暂停、清零,就可以做一个简单的秒表了。

更多推荐

单片机C51 之(7)GPIO 显示

本文发布于:2024-02-27 23:20:19,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1767258.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:单片机   GPIO

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!