当前位置: 首页 > news >正文

作业2:6位数码管静动态显示

文章目录

  • 一.6位数码管都输出9
    • 图片
    • 实现代码:
  • 二.数码管左一位和右一位显示7
    • 图片
    • 实现代码:
  • 三.6位数码管轮播0-9
    • 图片
    • 实现代码:
  • 四.数码管中间两位轮播0-9
    • 图片
    • 实现代码:
  • 五.数码管依次显示1-6
    • 图片
    • 实现代码:
      • 1.数码管轮流显示0-5
  • 六.6位数码管显示13.14.15
    • 图片
    • 实现代码:

一.6位数码管都输出9

图片

实现代码:

#include<reg52.h>// 头文件// 定义锁存器控制引脚sbit dula=P3^4;// 锁存器U2(段选)sbit wela=P1^6;// 锁存器U2(位选)// 主函数voidmain(){// 1.位选控制wela=1;// 打开位选P0=0xc0;// 位选6个数码管 1100 0000(低6位有效,对应6个数码管)wela=0;// 关闭位选// 2.段选控制dula=1;// 打开段选P0=0x6f;// 数码管显示"9" 0110 1111(a,b,c,d,f,g段亮)dula=0;// 关闭段选// 3.保持while(1);}

二.数码管左一位和右一位显示7

图片

实现代码:

#include<reg52.h>sbit dula=P3^4;// 段选sbit wela=P1^6;// 位选voiddelay(unsignedintt);voidmain(){while(1){// ===== 第1位显示7 =====P0=0xff;// 【消隐】发送位选前清空P0,避免鬼影wela=1;P0=0xfe;// 选中第1位 (1111 1110) - 注意:根据你的电路,如果是高电平选通则用0x01wela=0;dula=1;P0=0x07;// 共阴极7的段码dula=0;delay(2);// 动态扫描延时通常在1-5ms// ===== 第2-5位熄灭 (实际上直接跳过即可,或者显式关闭) =====// 如果想让中间彻底黑掉,最简单的办法是不去扫描它们// 或者像下面这样发送一个全灭的段码// ===== 第6位显示7 =====P0=0xff;// 【消隐】wela=1;P0=0xdf;// 选中第6位 (1101 1111) - 若为高电平选通则用0x20wela=0;dula=1;P0=0x07;// 显示7dula=0;delay(2);}}voiddelay(unsignedintt){unsignedintx,y;for(x=t;x>0;x--)for(y=110;y>0;y--);

三.6位数码管轮播0-9

图片

实现代码:

#include<reg52.h>sbit dula=P3^4;sbit wela=P1^6;// 共阴极段码表 0-9unsignedcharcode table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};// 位选表:分别选中第1, 2, 3, 4, 5, 6位 (高电平有效)unsignedcharcode wheeltable[]={0x01,0x02,0x04,0x08,0x10,0x20};voiddelay(unsignedintt){while(t--);}voidmain(){unsignedcharnum=0;// 当前要显示的数字unsignedintcrystal=0;// 用于控制数字切换频率的计数器unsignedchari;// 扫描索引while(1){// 动态扫描循环:快速轮流点亮 1-6 位for(i=0;i<6;i++){// --- 位选操作 ---wela=1;P0=wheeltable[i];// 依次选中每一位wela=0;// --- 段选操作 ---dula=1;P0=table[num];// 显示当前的数字dula=0;delay(100);// 短暂留存,保证亮度// --- 消隐 ---dula=1;P0=0x00;// 关掉段选,防止重影dula=0;}// 控制数字变换的速度crystal++;if(crystal>50){// 数值越大,0-9 变化越慢crystal=0;num++;if(num>9)num=0;}}}

四.数码管中间两位轮播0-9

图片

实现代码:

#include<reg52.h>sbit dula=P3^4;// 段选sbit wela=P1^6;// 位选// 标准共阴极 0-9 段码表unsignedcharcode table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};voiddelay(unsignedintt){while(t--);}voidmain(){unsignedcharnum=0;unsignedintspeed_cnt=0;while(1){// --- 核心逻辑:分时操作总线,严防干扰 ---// 1. 处理位选P0=0xff;// 清空总线数据wela=1;// 开启位选锁存器P0=0xf3;// 送入位选(低电平选通中间两位:1111 0011)wela=0;// 锁存:此时中间两位的公共端已经接通// 2. 处理段选P0=0x00;// 清空总线数据(关键:防止位选数据冲进段选)dula=1;// 开启段选锁存器P0=table[num];// 送入0-9段码dula=0;// 锁存:此时数字段码已送达// 3. 维持显示delay(500);// 4. 轮播控制speed_cnt++;if(speed_cnt>200){speed_cnt=0;num++;if(num>9)num=0;// 0-9 循环}}}

五.数码管依次显示1-6

图片

实现代码:

#include<reg52.h>#defineucharunsignedchar#defineuintunsignedint// 定义锁存器控制引脚sbit dula=P3^4;// 段选锁存器U2sbit wela=P1^6;// 位选锁存器U3// 数码管共阴极段码表 (0-9)uchar code TableDula[]={0x3F,// 00x06,// 10x5B,// 20x4F,// 30x66,// 40x6D,// 50x7D,// 60x07,// 70x7F,// 80x6F// 9};// 数码管位码表 (选中第1到第6位,低电平有效)uchar code TableWela[]={0xFE,// 1111 1110 -> 选中第1位0xFD,// 1111 1101 -> 选中第2位0xFB,// 1111 1011 -> 选中第3位0xF7,// 1111 0111 -> 选中第4位0xEF,// 1110 1111 -> 选中第5位0xDF// 1101 1111 -> 选中第6位};/** * @brief 延时函数 * @param x 延时毫秒数 (近似) */voiddelay(uchar x){uchar j;while(x--){for(j=0;j<125;j++);}}voidmain(){uchar i;while(1){// 动态扫描循环for(i=0;i<6;i++){// --- 1. 处理位选 ---P0=TableWela[i];// 送入位码wela=1;// 打开位选锁存器wela=0;// 锁定当前位// --- 2. 处理段选 ---P0=TableDula[i+1];// 送入段码 (i+1 对应显示数字 1,2,3,4,5,6)dula=1;// 打开段选锁存器dula=0;// 锁定当前数字笔画// --- 3. 视觉暂留 ---delay(2);// 每一位点亮约 2ms// --- 4. 消隐 (非常重要:防止位选切换时产生重影) ---P0=0x00;// 段码清零dula=1;// 写入全灭状态dula=0;}}}

1.数码管轮流显示0-5


实现代码:

#include<reg52.h>sbit dula=P3^4;sbit wela=P1^6;// 0-5 的共阴极段码unsignedcharcode table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d};// 选中第 1 到第 6 位的位选码 (低电平 0 选中)unsignedcharcode wei[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf};voiddelay(unsignedintt){unsignedintx,y;for(x=t;x>0;x--)for(y=110;y>0;y--);}voidmain(){unsignedchari;while(1){for(i=0;i<6;i++){// 1. 位选:选中当前的第 i 位P0=0xff;// 消隐wela=1;P0=wei[i];wela=0;// 2. 段选:显示对应的数字P0=0x00;// 清空总线dula=1;P0=table[i];dula=0;// 3. 核心:长延时。决定了数字“跳动”的速度// 延时约 500ms,这样肉眼就能清楚看到数字在移动delay(500);}}}

六.6位数码管显示13.14.15

图片

实现代码:

#include<reg52.h>#defineucharunsignedchar#defineuintunsignedintsbit dula=P3^4;sbit wela=P1^6;// 存储“13.14.15”对应的段码// 注意:最后一位是 0x6D (数字5),没有加小数点uchar code DisplayData[]={0x06,// 10xCF,// 3.0x06,// 10xE6,// 4.0x06,// 10x6D// 5 (注意此处没有小数点)};// 位码表(低电平有效)uchar code TableWela[]={0xFE,0xFD,0xFB,0xF7,0xEF,0xDF};voiddelay(uchar x){uchar j;while(x--){for(j=0;j<125;j++);}}voidmain(){uchar i;while(1){for(i=0;i<6;i++){// --- 1. 位选 ---P0=TableWela[i];wela=1;wela=0;// --- 2. 段选 ---P0=DisplayData[i];dula=1;dula=0;delay(2);// 保持显示// --- 3. 消隐 ---P0=0x00;dula=1;dula=0;}}}
http://www.jsqmd.com/news/616433/

相关文章:

  • mac 右键快速新建文件
  • 2026年热门的锅炉水节能剂/锅炉给水除氧剂精选厂家推荐 - 行业平台推荐
  • 鸡翅Club项目学习文档 - 第一部分
  • OpenClaw年终总结:我的Qwen3-32B自动化效率提升报告
  • 2026年评价高的宁波防爆电磁阀/宁波高压电磁阀/气控电磁阀优质公司推荐 - 行业平台推荐
  • OpenClaw开源贡献指南:为千问3.5-27B开发新技能并提交
  • 别积累那些不能赚钱的技能和头衔
  • 【26年4月耳机推荐清单】教父级游戏耳机选购指南!24款入耳式/头戴式/耳夹式/电竞式耳机精准卡位!
  • PPT讲解视频怎么做?3种常见方案对比
  • Z-Image-Turbo-辉夜巫女一文详解:Xinference模型注册、卸载与版本回滚
  • 2026年评价高的玉米加工设备公司推荐:玉米糁加工设备/玉米设备/玉米面加工设备/全自动玉米加工设备/选择指南 - 优质品牌商家
  • 2026企业宣传片技术全解析:画质到全链路的核心标准 - 优质品牌商家
  • MySQL主从延迟根因诊断法技术
  • django基于k-means算法的校园美食推荐系统_j4eg7g7z
  • 别矜持-点进来-这一期教大家如何画饼
  • 【笔试真题】- 小红书-2026.04.05
  • 2026年评价高的塑料电磁阀/电磁阀/二位二通电磁阀横向对比厂家推荐 - 行业平台推荐
  • OpenClaw更新策略:千问3.5-9B模型与框架的版本管理
  • OpenClaw办公自动化:千问3.5-9B驱动会议纪要生成实践
  • django基于Hadoop大数据的出行方式推荐系统_w5ya1557_zl011
  • 机械设计行业SolidWorks许可证资源池化共享分点方案
  • 别看不起这个看不起那个-真的自己落地的时候一地鸡毛
  • Oracle19C将普通表转为分区表
  • LeetCode 最长回文子串:python 题解写
  • Qwen3-TTS语音设计世界保姆级教程:音频格式导出与API封装
  • 2025年年底总结-里-
  • 2026神兽h5微信棋牌渗透——中篇
  • 别看不上那些一眼蠢得东西-如果一直存在-说明真的很赚钱
  • 坤灵奇迹 MU客户端 高清补丁 + 最佳画质设置指南
  • OpenClaw自动化质检:用gemma-3-12b-it检查代码仓库的合规性