LED显示器分为共阴极(发光二极管所有的阴极连接在一起)和共阳极(所有的阳极都连接在一起)两种。
共阴高电平有效
共阳低电平有效

char led[] = {0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
共阴接法0~9
共阳取反就行

静态显示

#include <REGX52.H>
#include <intrins.h>
unsigned char led[] = {0x3f,0x06,0x5b,0x4f,0x66,0x7d,0x07,0x7f,0x6f}; // 1~9
void delay(unsigned int time)       //@11.0592MHz
{unsigned char i, j;while(time){_nop_();i = 2;j = 199;do{while (--j);} while (--i);time--;
}
}
void seg()
{int i = 0;for(i = 0;i<5;i++){P2=led[i];delay(500);}
}
void main()
{while(1){seg();}
}

led从0~9依次显示

动态显示:利用视觉暂留

#include <REGX52.H>
#include <intrins.h>
unsigned char led[] = {0x3f,0x06,0x5b,0x4f,0x66,0x7d,0x07,0x7f,0x6f}; // 1~9
unsigned char str[] = {0x76,0x79,0x38,0x38,0x3f};//hello
unsigned char bi[] = {0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07}; //0~1
void delay(unsigned int time)       //@11.0592MHz
{unsigned char i, j;while(time){_nop_();i = 2;j = 199;do{while (--j);} while (--i);time--;
}
}void seg()
{int i = 0;for(i = 0;i<5;i++){P3=bi[i];P2=str[i];delay(5);}
}
void main()
{while(1){seg();}
}


Proteus里数码管用7seg搜
U2是一个38译码器,E1接高电平,E2,E3接低电平,译码器开始工作
这个led的12345678是片选,就是led中的8个数码管能不能用,接高电平就代表能用。A~G还有DP是位选。
看起来是一个HELLO的一起显示,实际上是单独分别显示的,只是因为太快了骗过了眼睛。所以delay的延时时间要比较短。


这是普中开发板的原理图。具体内容就是74HC138是一个38译码器.根据P24P23P22的顺序,如果这里输入000,那么Y0非被选中,LED1就是低电平,LED2~8是高电平。低电平驱动效率比较好,所以大多数都是低电平驱动。LED1对应第8个数码管。这里同样是分位选和片选,38译码器主要是选择第几个数码管亮,而数码管怎么亮取决于P00-P07.然后看数码管是共阴还是共阳接法。
共阴
char led[] = {0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
按abcdefg的顺序编码然后形成0~9

#include <REGX52.H>
unsigned int m[] = {0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};//0~9数码管void delay(unsigned int ms){int i,j;for(i=0;i<ms;i++){for(j=0;j<130;j++);}
}
void sed(unsigned char location,number){  //位置,数字switch(location){case 1:P2_4=1;P2_3=1;P2_2=1;break; //7 LED8 第一片case 2:P2_4=1;P2_3=1;P2_2=0;break; //6 LED7 2case 3:P2_4=1;P2_3=0;P2_2=1;break; //5      3case 4:P2_4=1;P2_3=0;P2_2=0;break; //4      4case 5:P2_4=0;P2_3=1;P2_2=1;break; //3      5case 6:P2_4=0;P2_3=1;P2_2=0;break; //2      6case 7:P2_4=0;P2_3=0;P2_2=1;break; //1      7case 8:P2_4=0;P2_3=0;P2_2=0;break; //0      8}P0=m[number];
}
void main()
{while(1){sed(1,2);//第一位显示2}
}


动态显示

#include <REGX52.H>
unsigned int m[] = {0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};//0~9数码管void delay(unsigned int ms){int i,j;for(i=0;i<ms;i++){for(j=0;j<130;j++);}
}
void sed(unsigned char location,number){  //位置,数字switch(location){case 1:P2_4=1;P2_3=1;P2_2=1;break; //7 LED8 第一片case 2:P2_4=1;P2_3=1;P2_2=0;break; //6 LED7 2case 3:P2_4=1;P2_3=0;P2_2=1;break; //5      3case 4:P2_4=1;P2_3=0;P2_2=0;break; //4      4case 5:P2_4=0;P2_3=1;P2_2=1;break; //3      5case 6:P2_4=0;P2_3=1;P2_2=0;break; //2      6case 7:P2_4=0;P2_3=0;P2_2=1;break; //1      7case 8:P2_4=0;P2_3=0;P2_2=0;break; //0      8}P0=m[number];
}
void main()
{while(1){sed(1,2);delay(4);sed(2,2);delay(4);sed(3,4);delay(4);sed(4,7);delay(4);
}}

延时不能太慢,那样就变成挨个闪烁了
也不能不用延时,会有重影出错

51单片机LED数码管相关推荐

  1. 基于51单片机——LED数码管秒表的制作

    设计要求: 制作一个LED数码管显示的秒表,用2位数码管显示时间,最小计时单位为"百毫秒",计时范围0.1~9.9s.第一次按下并松开按键,开启计时功能:第二次按下并松开按键,停止 ...

  2. 51单片机学习 数码管 倒计时

    51单片机学习 数码管 倒计时 简介 1.硬件部分 普中单片机 开发板 (138译码器控制)数码管 2.软件部分 keil软件 硬件部分 138译码器 简介 74LS138 为3 线-8线译码器,共有 ...

  3. 单片机学习笔记————51单片机实现数码管中的倒计时程序

    一.使用proteus绘制简单的电路图,用于后续仿真 二.编写程序 /***************************************************************** ...

  4. 51单片机控制数码管显示

    前言 今天学习51单片机的数码管模块 我的学习板上面的数码管是4为一体由12个引脚控制的模块. 今天就编程控制它显示我们想要的输出. 数码管本质上是由8个LED拼接而成的,他们分别叫做a,b,c,d, ...

  5. 51单片机八位数码管1到F动态滚动显示仿真及程序

    51单片机八位数码管1到F动态滚动显示仿真及程序 动态滚动显示仿真及程序 #include<reg51.h> #define uchar unsigned char #define uin ...

  6. 51单片机+DS18B20+数码管显示+串口通讯+Proteus仿真

    51单片机+DS18B20+数码管显示+串口通讯+Proteus仿真 本实验通过51单片机读取DS18B20温度传感器的温度,然后通过数码管显示,并通过串口,将读取到的温度数据发送出去. 本案例需要使 ...

  7. 51单片机-LED模块-来回流水灯

    51单片机-LED模块-来回流水灯 1. 视频 哔哩哔哩视频地址: https://www.bilibili.com/video/av89552821 51单片机-LED模块-来回流水灯 2. 文件 ...

  8. 51单片机LED模拟交通灯

    51单片机LED模拟交通灯 文章目录 51单片机LED模拟交通灯 实验环境 仿真图 代码解析 效果演示 实验环境 实验软件: Keil5 + Proteus7 实验元件: AT89C51 * 1, L ...

  9. 51单片机实现数码管显示小数

    51单片机实现数码管显示小数 要求 1 Proteus 面向编程的模型搭建 2 代码实现 2.1. 实现数码管刷新 2.2 对小数进行分解的函数 3 测试用例 4 仿真结果 要求 要求1:根据整数部分 ...

最新文章

  1. 实战分析 RocketMQ事务消息
  2. 如何在Marketing Cloud的弹出UI窗口里添加扩展字段
  3. 计算机软件复用意义何在,2009计算机科学技术导论复习要点.pdf
  4. 删除顽固文件夹cygwin的方法,挺折腾的
  5. 关于计算机网络维护毕业论文,计算机专业毕业论文---计算机网络故障处理及维护方法...
  6. java this 代替_关于JAVA中this的使用方法小结
  7. hdu4757(可持久化 Trie )
  8. 关于intel六代/七代CPU安装win7系统解决USB3.0驱动的镜像文件
  9. 关于Linux内核学习
  10. B站最专业的DC漫威UP主,深度挖掘漫威故事内容。
  11. 网站背景音乐隐藏按钮自动播放
  12. 我的世界服务器神秘修改节点,我的世界神秘节点指令 | 手游网游页游攻略大全...
  13. 如果你是12306网站架构师,你会如何设计网站的软件架构和硬件系统架构?
  14. 微信公众号平台-自定义菜单
  15. Ubuntu安装Lua
  16. 关于crawl DZDP的城市商场名称和地址的参考
  17. 游戏盾,有效解决游戏行业安全管理问题
  18. CSDN日报20170407 ——《嘿,程序猿,你该学点经济学了!》
  19. 什么是云存储?它的优势在哪里
  20. POIExcel--狂神

热门文章

  1. C++三目运算符(简述)
  2. 多因子模型(MFM)
  3. 地址转换成百度经纬度,数据太多!不愿意花钱?
  4. 清除异常关闭进程的任务栏托盘区残留图标
  5. android酷狗缓存目录,酷狗缓存的歌曲在哪个文件夹_酷狗音乐缓存的歌曲在电脑哪个目录-win7之家...
  6. 学历对于程序员找工作重要吗?我来分享一下看法
  7. 可爱得小工具-jvm
  8. STM32硬件I2C的一点心得(AT24C32C和AT24C64C)
  9. GaussDB数据库安装详解
  10. php spry文本域_SPRY验证文本域之时间及浏览器设置