电子开发网

电子开发网电子设计 | 电子开发网Rss 2.0 会员中心 会员注册
搜索: 您现在的位置: 电子开发网 >> 电子开发 >> 单片机实例 >> 正文

51单片机数码管显示程序, 共阴数码管显示程序 数码管原理(显示)及编码(段码)

作者:佚名    文章来源:本站原创    点击数:    更新时间:2023/5/18
#include <reg51.h>
sbit dula=P2^6;
sbit wela=P2^7;
sbit P34=P3^4;
  char Tab [10]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};   //共阴极数码管0到f的短编码
unsigned char Dat[4]={0xf7,0xfb,0xfd,0xfe};
    unsigned char Second=0;
unsigned long i,c=0;
void main()
{        
        char t;
    char b[2];
TMOD=0x01;        
    TR0=1;            
    TH0=(65536-46080)/256;
    TL0=(65536-46080)%256;
    ET0=1;                            //允许T0中断
    EA=1;                       //允许所有中断
   while(1)
    {
    b[3]=c/1000;     //千
  b[2]=c/100%10;    //百
 b[1]=c/10%10;     //十
  b[0]=c%10;       //个
for(t=0;t<2;t++){ //t是多少个数码管显示
        P0=Tab[b[t]];
dula=1;dula=0;
    P0=Dat[t];
    wela=1;wela=0;
for(i=0;i<2;i++);
    P0=0xFF;    
}}}
/*定时器0中断服务子程序*/
void time0() interrupt 1
{
    TH0= (65536-46080)/256;
    TL0= (65536-46080)%256;
        i++;
    if(i==1){
        i=0;
    c++;
    if(c>=20) c=0;        //计数到20秒自动回0
    }
}

 

数码管原理(显示)及编码(段码)

常用的7段数码管由发光二极管(组合)构成,如下图:


不带小数点的共阴数码管驱动 

分为:共阳极和共阴极(如上图)

如果显示“0”,共阳极为:abcdefg dp ,dp为对应最高位,a为对应最低位,编码:11000000 ,16进制0xC0,共阴极正好相反:00111111,16进制0x3f。

以此类推。

共阳极数码管的0 到f的段编码:
0xc0,0xf9,0xa4,0xb0,//0~3
0x99,0x92,0x82,0xf8,//4~7
0x80,0x90,0x88,0x83,//8~b
0xc6,0xa1,0x86,0x8e //c~f

共阴极数码管0到f的短编码:
0x3f,0x06,0x5b,0x4f,    //0~3
0x66,0x6d,0x7d,0x07,    //4~7
0x7f,0x6f,0x77,0x7c,    //8~b
0x39,0x5e,0x79,0x71    //c~f

这段代码是一个基于单片机的数字时钟,具体实现了以下功能:

  1. 通过四个共阴数码管显示当前时刻,每秒更新一次;
  2. 使用定时器0作为计时器,每隔50ms产生一次中断,从而实现秒表计时功能;
  3. 将计时结果(单位为秒)以“xx.xx”形式显示在第一个数码管上,最多可以计时20秒。

下面是对这段代码的详细分析:

首先,在 main 函数中,定义了一些变量,包括:

  • Tab:数字 0~9 在数码管上的显示码表;
  • Dat:数码管控制位模式表;
  • Second:用于存储当前时间的秒数,初始值为 0;
  • i:用于计时的计数器,初始值为 0;
  • c:用于秒表计时的计数器,初始值为 0。

接着,在 main 函数中,初始化定时器0,并开启 T0 中断和全局中断使能。

随后进入主循环,其中先通过将计数值 c 格式化为四个数字,存储在数组 b 中。循环遍历数组 b,依次将每个数字通过选择相应的码表值和数码管控制位模式,发送给数码管进行显示。

在 T0 中断服务子程序 time0 中,首先重新加载定时器初值,然后每隔一定周期执行一次计时操作:将计数值 i 加 1,如果 i 达到指定阈值(50ms),则将当前秒表计数值 c 加 1,并判断是否超过20秒,如果超过则将其清零。

需要注意的是,此代码仅仅是一个简单的实现,还存在一些问题。例如,由于使用了延时函数,这会影响程序的实时性。而且,由于只在主循环中更新时钟显示,如果程序在处理其他任务时比较繁忙,则可能导致时钟显示出现明显的卡顿或错误。因此,在实际应用中需要对代码进行进一步的优化和改进。

Tags:七段数码管,51单片机  
责任编辑:admin
  • 上一篇文章:
  • 下一篇文章: 没有了
  • 相关文章列表
    三菱PLC和数码管链接和控制程序(初学者珍藏)plc控制数码管显示
    七段数码管显示原理研究_数码管显示0~9对应的段码
    西门子PLC控制数码管显示,停车场PLC程序实例!七段编码指令SEG,
    51单片机学习笔记直流电机驱动(PWM)C语言程序
    MCU-51单片机直流电机驱动(PWM)51单片机驱动直流电机
    先学51还是先学STM32?STM32和51单片机的区别
    51单片机和STM32单片机的结构有什么不同
    51单片机、AVR单片机和PIC单片机的IO口操作
    LED数码管的检测,LED七段数码管检测
    关于51单片机IO引脚的驱动能力与上拉电阻
    51单片机“呼吸灯”程序
    51单片机入门之静态数码管电路设计
    单片机数码管显示原理
    AT89C51,51单片机1602液晶显示时钟程序
    4位单片机数字钟 电子钟制作
    51单片机4位数码管电子钟源程序
    AT89C2051电脑机箱风扇智能温控仪,AT89C2051 Temperature contro
    51单片机温控风扇(含程序+原理图+仿真+PCB)
    51单片机蜂鸣器播放音乐代码
    利用单片机AT89S51与ADC0809设计数字电压表,Voltmeter
    单片机制作的纯正弦波逆变器,12V Pure Sine Wave Inverter
    51单片机00-59秒计时器 0-59s Timer
    51单片机按键程序中 while(!key)的作用
    51系列单片机寻址方式
    认识单片机引脚【详解】
    用51单片机设计的无线防盗报警器技术
    51单片机汇编模拟串口通信程序
    51单片机双极型PWM 的软件实现
    用51单片机制作的厨房定时器
    51单片机的液晶显示温度计程序
    请文明参与讨论,禁止漫骂攻击,不要恶意评论、违禁词语。 昵称:
    1分 2分 3分 4分 5分

    还可以输入 200 个字
    [ 查看全部 ] 网友评论
    关于我们 - 联系我们 - 广告服务 - 友情链接 - 网站地图 - 版权声明 - 在线帮助 - 文章列表
    返回顶部
    刷新页面
    下到页底
    晶体管查询