共阴级四位数码管

对于共阴极数码管来说,当某个发光二极管的阳极为高电平时,发光二极管点亮,相应的段被显示。同样,共阳极数码管的阳极连接在一起,公共阳极接+5V,当某个发光二极管的阴极接低电平时,该发光二极管被点亮,相应的段被显示。

结构原理

共阴极数码管是把所有led的阴极连接到共同接点COM,而每个led的阳极分别为a、b、c、d、e、f、g及h(小数点),如下图所示。图中的8个led分别与上面那个图中的a~h各段相对应,通过控制各个led的亮灭来显示数字,1、2、3、4分别为控制每个数码管位置,共阴1~4直接接地。

功能实验演示

设备:共阴极数码管,芯片,电源(当前芯片电压足点亮LED,不需要三极管辅助)

         

单个晶体管显示数字倒数代码

/**************************************************************************************
*                    共阴级四位数码管实验                                               *
***************************************************************************************/#include "reg52.h"             //此文件中定义了单片机的一些特殊功能寄存器
typedef unsigned int u16;     //对数据类型进行声明定义
typedef unsigned char u8;#define SPEED 50000sbit led_a = P0^0;
sbit led_b = P0^1;
sbit led_c = P0^2;
sbit led_d = P0^3;
sbit led_e = P0^4;
sbit led_f = P0^5;
sbit led_g = P0^6;
sbit led_h = P0^7;  /*******************************************************************************
* 函 数 名         : delay
* 函数功能         : 延时函数,i=1时,大约延时10us
*******************************************************************************/
void delay(u16 i)
{while(i--);
}void setNum(u16 num){if(num == 0){led_a =1;led_b =1;led_c =1;led_d =1;led_e =1;led_f =1;led_g =0;} else if(num == 1){led_a =0;led_b =1;led_c =1;led_d =0;led_e =0;led_f =0;led_g =0;} else if(num == 2){led_a =1;led_b =1;led_c =0;led_d =1;led_e =1;led_f =0;led_g =1;} else if(num == 3){led_a =1;led_b =1;led_c =1;led_d =1;led_e =0;led_f =0;led_g =1;} else if(num == 4){led_a =0;led_b =1;led_c =1;led_d =0;led_e =0;led_f =1;led_g =1;} else if(num == 5){led_a =1;led_b =0;led_c =1;led_d =1;led_e =0;led_f =1;led_g =1;} else if(num == 6){led_a =1;led_b =0;led_c =1;led_d =1;led_e =1;led_f =1;led_g =1;} else if(num == 7){led_a =1;led_b =1;led_c =1;led_d =0;led_e =0;led_f =0;led_g =0;} else if(num == 8){led_a =1;led_b =1;led_c =1;led_d =1;led_e =1;led_f =1;led_g =1;}  else if(num == 9){led_a =1;led_b =1;led_c =1;led_d =1;led_e =0;led_f =1;led_g =1;}}/*******************************************************************************
* 函 数 名       : main
* 函数功能       : 主函数
* 输    入       : 无
* 输    出         : 无
*******************************************************************************/
void main()
{while(1){delay(SPEED);setNum(9);delay(SPEED);setNum(8);delay(SPEED);setNum(7);delay(SPEED);setNum(6);delay(SPEED);setNum(5);delay(SPEED);setNum(4);delay(SPEED);setNum(3);delay(SPEED);setNum(2);delay(SPEED);setNum(1);delay(SPEED);setNum(0);delay(SPEED);}
}

进阶版多个晶体管操作

a~g只有一组,怎么同时给4个晶体管显示对应的数字?可以先令其中一个晶体设置数字,之后再关闭,再设置第二个,再关闭,只要间隔时间短,就可以实现4个晶体管输出不一样的值(人眼在24帧的速率下,看到的东西都是连续的,所以间隔足够少就可以了)

多晶体管显示代码

(代码输出的是0621,是我的一个重要日志,纪念我逝去的青春,哈哈~)

/**************************************************************************************
*                    共阴级四位数码管多管实验                                                 *
***************************************************************************************/#include "reg52.h"             //此文件中定义了单片机的一些特殊功能寄存器
typedef unsigned int u16;     //对数据类型进行声明定义
typedef unsigned char u8;#define SPEED 50000sbit led_a = P0^0;
sbit led_b = P0^1;
sbit led_c = P0^2;
sbit led_d = P0^3;
sbit led_e = P0^4;
sbit led_f = P0^5;
sbit led_g = P0^6;
sbit led_h = P0^7; sbit led_1 = P2^0;
sbit led_2 = P2^1;
sbit led_3 = P2^2;
sbit led_4 = P2^3;   /*******************************************************************************
* 函 数 名         : delay
* 函数功能         : 延时函数,i=1时,大约延时10us
*******************************************************************************/
void delay(u16 i)
{while(i--);
}void setNum(u16 num){if(num == 0){led_a =1;led_b =1;led_c =1;led_d =1;led_e =1;led_f =1;led_g =0;} else if(num == 1){led_a =0;led_b =1;led_c =1;led_d =0;led_e =0;led_f =0;led_g =0;} else if(num == 2){led_a =1;led_b =1;led_c =0;led_d =1;led_e =1;led_f =0;led_g =1;} else if(num == 3){led_a =1;led_b =1;led_c =1;led_d =1;led_e =0;led_f =0;led_g =1;} else if(num == 4){led_a =0;led_b =1;led_c =1;led_d =0;led_e =0;led_f =1;led_g =1;} else if(num == 5){led_a =1;led_b =0;led_c =1;led_d =1;led_e =0;led_f =1;led_g =1;} else if(num == 6){led_a =1;led_b =0;led_c =1;led_d =1;led_e =1;led_f =1;led_g =1;} else if(num == 7){led_a =1;led_b =1;led_c =1;led_d =0;led_e =0;led_f =0;led_g =0;} else if(num == 8){led_a =1;led_b =1;led_c =1;led_d =1;led_e =1;led_f =1;led_g =1;}  else if(num == 9){led_a =1;led_b =1;led_c =1;led_d =1;led_e =0;led_f =1;led_g =1;}}/*******************************************************************************
* 函 数 名       : main
* 函数功能       : 主函数
* 输    入       : 无
* 输    出         : 无
*******************************************************************************/
void main()
{     led_h = 0;while(1){led_1 = led_2 = led_3 = led_4 = 1;led_1   = 0;setNum(0);delay(500);led_1 = led_2 = led_3 = led_4 = 1;led_2   = 0;setNum(6);delay(500);led_1 = led_2 = led_3 = led_4 = 1;led_3   = 0;setNum(2);delay(500);led_1 = led_2 = led_3 = led_4 = 1;led_4   = 0;setNum(1);delay(500);}
}

总结不好多多担待,文章只单纯个人总结,如不好勿喷,技术有限,有错漏麻烦指正提出。本人QQ:373965070

【单片机基础篇】共阴级四位数码管相关推荐

  1. 两位数码管30秒倒计时c语言,基于51单片机共阴两位数码管显示倒计时

    <基于51单片机共阴两位数码管显示倒计时>由会员分享,可在线阅读,更多相关<基于51单片机共阴两位数码管显示倒计时(2页珍藏版)>请在人人文库网上搜索. 1.基于51单片机共阴 ...

  2. 数码管的共阳级和共阴级编码

      数码管分为共阳级和共阴级,其编码如下: 共阳级编码为0xc0, 0xf9, 0xa4, 0xb0, 0x99, 0x92, 0x82, 0xf8, 0x80, 0x90, 0x88, 0x83, ...

  3. 嵌入式单片机基础篇(一)之stm32F1GPIO详解

    嵌入式单片机基础篇(一)之stm32F1GPIO详解 stm32F1GPIO详解 下面以stm32f103zet6以及51单片机为例,讲解单片机最基本部分IO口 第一部分:stm32 STM32 的 ...

  4. 嵌入式单片机基础篇(八)之两只看门狗

    嵌入式单片机基础篇(八)之两只看门狗 独立看门狗与窗口看门狗 第一部分:stm32 .STM32 内部自带了 2 个看门狗:独立看门狗(IWDG)和窗口看门狗(WWDG). (一)独立看门狗 STM3 ...

  5. 谷粒商城基础篇(保姆级总结)

    谷粒商城基础篇 文章目录 谷粒商城基础篇 项目相关基础 知识介绍 微服务架构图和项目描述 **微服务划分图** Vrgrant systemctl命令 配置环境 Docker自启动命令 下载mysql ...

  6. 基于51单片机的温度采集系统的设计四位数码管显示温度

    资源链接:加我QQ:1271370903 一.摘要 随着微机测量和控制技术的迅速发展与广泛应用,以单片机为核心的温度采集系统与控制系统的研发与应用在很大程度上提高了生产生活中对温度的控制水平.本设计论 ...

  7. 51单片机定时器中断怎么用-------51单片机基础篇

    首先,什么时定时器,简单来说可以比喻为一个闹钟,当你把他打开以后,他就会每秒动一下,+1,+1,+1,+1,如果你设置了某一个时间点闹钟会向以后,那么当闹钟的时间点+1,+1,+1,+到了你设置的时间 ...

  8. 嵌入式单片机基础篇(三十九)之CAN通讯以及STM32F1单片机程序

    CAN通讯以及STM32F1单片机程序 1.CAN通讯基本概念: (1)定义: CAN是Controller Area Network 的缩写(以下称为CAN),是ISO国际标准化的串行通信协议.由德 ...

  9. 【单片机基础篇】74HC595芯片详解

    74HC595芯片详解 芯片简述:74HC595是一个8位串行输入.并行输出的位移缓存器:并行输出为三态输出.在SCK 的上升沿,串行数据由SER输入到内部的8位位移缓存器,并由QA~QH'输出,而并 ...

  10. 嵌入式单片机基础篇(二十七)之Stm32F103单片机给蓝牙模块发送AT指令程序

    Stm32F103单片机给蓝牙模块发送AT指令程序 #include "stm32f10x.h" #include "string.h" #include &q ...

最新文章

  1. HTML5 canvas画图
  2. win7如何取消计算机管理员权限,win7如何删除需要管理员权限的文件夹
  3. springmvc处理流程
  4. Docker Review - Docker 部署 Spring Boot 项目
  5. Java 内部类 和 匿名内部类
  6. asp.net中的加密方法
  7. NB-IoT四大关键特性及实现告诉你,为啥NB
  8. jetbrain rider 逐渐完美了,微软要哭了么?
  9. linux运行程序时,中途出现意外怎么办?
  10. Android开发 使用HBuilder的缓存方法
  11. 对象行为型 - Observer观察者模式
  12. java出现中文乱码_JAVA中文显示乱码问题
  13. shared pool 和buffer pool 详解(之二, Cache Buffers LRU Chain、Cache Buffers LRU Chain闩锁竞争与解决)
  14. docker 下安装oracle
  15. 英语口语收集(二十五)
  16. php 检测链接,PHP检测链接是否存在的代码实例分享
  17. 数据库之Mysql索引、事务与存储引擎
  18. 逻辑思维语音01——麦当劳
  19. 企查查企业详情爬虫(自动模拟登录企业详情页法律风险爬取)
  20. 【码农学编曲】Cubase乐器轨音频轨各种轨没声音的终极解决方案

热门文章

  1. OPPO R9sPlus MIFlash线刷TWRP Recovery ROOT详细教程
  2. Trilateration三边测量定位算法
  3. 风物长宜放眼量,人间正道是沧桑 - 一位北美 IT 技术人破局
  4. java实现调用百度图像识别API,批量识别车辆车型、颜色等信息
  5. Cesium gltf(1.70)三维人物动画制作
  6. Unity人物动画问题
  7. Minidwep-gtk字典 破 WPA
  8. sprintf函数的用法
  9. 鸡兔同笼编程语言c,鸡兔同笼用c语言编程
  10. js检查ie低版本浏览器,并跳转更新页面