51单片机 您所在的位置:网站首页 15024金封管引脚图 51单片机

51单片机

2023-08-14 22:54| 来源: 网络整理| 查看: 265

51单片机-8段四位数码管 8段数码管工作原理8段四位数码管工作方式下面是本人自写的四位数码管模板程序模板程序应用方法

8段数码管工作原理

在这里插入图片描述         我们最常用的是七段式和八段式LED数码管,八段比七段多了一个小数点,其他的基本相同。所谓的八段就是指数码管里有八个小LED发光二极管,通过控制不同的LED的亮灭来显示出不同的字形。 数码管又分为共阴极和共阳极两种类型

共阴极就是将八个LED的阴极连在一起,让其接地,这样给任何一个LED的另一端高电平,它便能点亮。共阳极就是将八个LED的阳极连在一起。

其中引脚图的两个COM端连在一起,是公共端,共阴数码管要将其接地,共阳数码管将其接正5伏电源。

8段四位数码管工作方式

图 1         四位数码管有四位,其四位是可以分别控制的,叫做位选,由上图的1、2、3、4分别控制一位,a-g则是控制数码管显示的内容,叫做段选。数码管静态显示就是让全使能位选,或者指定位选使能,使得数码管全显示相同字母或者是指定位显示字母,缺点很明确,不能让多位数码管同时(相对的)显示不同的字母,解决这个缺点的方法之一则是数码管的动态显示。数码管的动态显示原理是短时间的对指定位数码管分别静态显示不同字母或数字或者显示相同字母或数字(伪静态显示)。 在这里插入图片描述

下面是本人自写的四位数码管模板程序

(现在是仅适用于51单片)

//共阳极显示 unsigned char led[16]={0xc0,0xf9,0xa4,0xb0,\ 0x99,0x92,0x82,0xf8,\ 0x80,0x90,0x88,0x83,\ 0xc6,0xa1,0x86,0x8e}; unsigned char led[16]={0x3f,0x06,0x5b,0x4f,\ 0x66,0x6d,0x7d,0x07,\ 0x7f,0x6f,0x77,0x7c,\ 0x39,0x5e,0x79,0x71}; 模板程序 /** * 这是一个关于数码管显示的程序 * @param first 第一个数码管的示数 * @param second 第二个数码管的示数 * @param third 第三个数码管的示数 * @param four 第四个数码管的示数 * @param dot 所加小数点的位置 * @param delayms() 延时函数指针 * @return NONE */ #define wbicPort P2 //位选端口(控制哪个数码管显示) #define DataPort P0 //段选端口(控制显示的字母和数字) #define HIGH_WBIC //如果位选接在了高八位就用该宏 //#define LOW_WBIC //如果位选接在了低八位就用该宏 #define COMMON_POS //选择4位7段数码管共阳 //#define COMMON_NEG //选择4位7段数码管共阴 //填写4位7段数码管的位选引脚 #ifdef HIGH_WBIC #define W1 0x7f #define W2 0xbf #define W3 0xdf #define W4 0xef #endif #ifdef LOW_WBIC #define W1 0xf7 #define W2 0xfb #define W3 0xfd #define W4 0xfe #endif #ifdef COMMON_POS unsigned char led[16]={0xc0,0xf9,0xa4,0xb0,\ // 0,1,2,3, 0x99,0x92,0x82,0xf8,\ // 4,5,6,7, 0x80,0x90,0x88,0x83,\ // 8,9,A,B, 0xc6,0xa1,0x86,0x8e}; // C,D,E,F #endif #ifdef COMMON_NEG unsigned char led[16]={0x3f,0x06,0x5b,0x4f,\ // 0,1,2,3, 0x66,0x6d,0x7d,0x07,\ // 4,5,6,7, 0x7f,0x6f,0x77,0x7c,\ // 8,9,A,B, 0x39,0x5e,0x79,0x71}; // C,D,E,F #endif void Tube_Light(unsigned char first,unsigned char second,unsigned char third,unsigned char four,unsigned char dot,void (*delayms)()){ #ifdef HIGH_WBIC wbicPort = 0xf0|wbicPort; #endif #ifdef LOW_WBIC wbicPort = 0x0f|wbicPort; #endif wbicPort = W1; if (dot==1) DataPort = led[first]&0x7f; else DataPort = led[first]; delayms(); wbicPort = W2; if (dot==2)DataPort = led[second]&0x7f; else DataPort = led[second]; delayms(); wbicPort = W3; if (dot==3)DataPort = led[third]&0x7f; else DataPort = led[third]; delayms(); wbicPort = W4; if (dot==4)DataPort = led[four]&0x7f; else DataPort = led[four]; delayms(); } 应用方法 #include #include "模板程序.h" //添加模板程序 void delaysm(){ /* 自己实现延时函数程序,如果想要延时程序, 看我的另一篇。(有可能还未写呢[^v^]) ~~~^v^~~ 语法问题自己搞定(一般百度就能搞定了) */ } void (*p)(void); //定义一个延时函数的指针 void main(){ p = delayms; //为指针赋值; while(1){ Tube_Light(1,2,3,4,1,p); } }


【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有