前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >单个数码管显示0-9

单个数码管显示0-9

作者头像
pigeon
发布2022-04-11 19:58:21
1.7K0
发布2022-04-11 19:58:21
举报
文章被收录于专栏:电子荣耀电子荣耀

一、实验要求

使用51单片机控制单个数码管,使其循环显示0-9.

二、实验原理

数码管(Segment Displays)由多个发光二极管封装在一起组成“8”字型的器件,引线已在内部连接完成,只需引出它们的各个笔划,公共电极。数码管实际上是由七个发光管组成8字形构成的,加上小数点就是8个。这些段分别由字母a,b,c,d,e,f,g,dp来表示。

(数码管原理图)

(数码管共阴极接法)

(数码管共阳极接法)

(LED字形显示代码)

三、仿真图

1、proteus仿真图

2、proteus仿真效果图

四、程序

代码语言:javascript
复制
#include <reg52.h>
#include <intrins.h>
#define uchar unsigned char
#define uint unsigned int
uchar code DSY_CODE[]=
{
     0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F   
};

void DelayMS(uint x)
{
     uchar t;
    while(x--)
    for(t=;t>;t--);
}

void main()
{
     uchar i=;
    P0=0x00;
    while()
    {
        P0=DSY_CODE[i];
        i=(i+)%;/*显示0-9*/
        DelayMS();
    }
}

解析:

1、由于仿真图采用的是共阴极数码管,故代码也需要保持一致,采用共阴极字形代码;当然也可以采用共阳极字形代码,但最会需要取反,使其变成共阴极:

P0=~DSY_CODE[i];//~是取反的标志。

2、这里需要用到延时函数。

void DelayMS(uint x) { uchar t; while(x--) for(t=110;t>0;t--); } 这个延时函数的核心是一个whiLe和for循环嵌套,例如让x=10,cpu会在这里循环10*10次,这些时间大概就是10ms(但并不精确)。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2021-05-21,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 电子荣耀 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档