单片机学习(二)数码管的应用

一.如何点亮一个数码管,使其实现数字

原理:数码管内由8个灯组成(包括小数点),每个灯通过控制个别灯的亮暗来显示数字

使用一个排阻,(相当于串一个电阻),这样可以使数码管亮点

数码管有共阴级(共地,给高电平亮),共阳极(接Vcc,给低电平亮)

#include<reg52.h>
#include<intrins.h>
#define uchar unsigned char
#define uint unsigned int
uchar code DSY_CODE[]=
{
    0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0x82,0xf8,0x80
};
void DelayMS(uint x)
{
    uchar t;
    while(x--)
    for(t=120;t>0;t--);

}
void main()
{
    uchar i =0;
    P0=0x00;
    while(1)
    {
        P0=~DSY_CODE[I];//在P0的地方赋值
        i=(i+1)%10;/*显示0-9*/
        DelayMS(200);

   }
}

要找到对应的IO,要显示1,即对应的abcdefgh 为01100000 

 

 2.多个数码管

 二.多个数码管(与上面原理相同)

 首先要做的是控制这8个输入端

先把公共端选了,然后控制8*8=64个变量,然后控制这8个电路

电路:采用NPN放大电路,提高单片机的驱动能力,还要接上电阻,这样就k'y把数码管驱动起来

#include<reg52.h>
#include<intrins.h>
#define uchar unsigned char
#define uint unsigned int
uchar code DSY_CODE[]=
{
    0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0x82,0xf8,0x80//还有一个数
};
void DelayMS(uint x)
{
    uchar t;
    while(x--)
    for(t=200;t>0;t--);

}
void main()
{
    uchar i,k =0x80;
    while(1)
    {
        for(i=8;i>0;i--)
        {
            P2 =0xff;//先把P2全亮
            k=_crol_(k,1);//P2移位点亮
            P0=DSY_CODE[8-i];//段选使能位
            P2=k;//片选使能位
            DelayMS(3);//延时(人眼能识别的分别率是50ms)所以需要挨个点亮//动态显示


        }


    }
}

做设计不用数码管(要焊接的线太多,用LCD,OLED多些)

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值