51单片机数码管显示数字及小数点

51单片机数码管显示(共阴极)


1.先看一下显示的结果:

在这里插入图片描述
源代码:

#include <reg51.h>

typedef unsigned int u16;
typedef unsigned char u8;

u8 code smg[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};//共阴极
u16 num=2021;//要显示的数字
/*延时函数*/
void delay(u16 i)
{	
	while(i--);
}
/*显示函数*/
void display()
{
    u16 x = 0;
    while(1)
    {
        switch(x)
        {
            case 0:P2 = 0x0e;P0 = smg[num / 1000];break;              //显示2
            case 1:P2 = 0x0d;P0 = smg[(num % 1000) / 100];break;      //显示0
            case 2:P2 = 0x0b;P0 = smg[(num % 1000) % 100 / 10];break; //显示2
            case 3:P2 = 0x07;P0 = smg[num % 10]; break;               //显示1
        }
        delay(100);//延时,增大延时我们可以看到数码管是交替点亮的
        P0=0x00;//消隐(消隐一定要在延时函数后)
        x = ++x % 4;//取模,当x=4时,通过与4取模就让x的值重新变回0
    }
}
/*主函数*/
void main()
{
		display();
}

2.如何在数码管显示小数点呢?

        对与共阴极数码管来说,直接将要显示的数字与0x80相或
        例如:
                 要想在数码管上显示数字2,对于本电路图来说,直接让P0=0x5b即可; 0x5b=01011011,
                 但怎么显示'2.'呢? 对于共阴极数码管来说,只需要让P0=0x5b | 0x80, 即P0=11011011,即点亮dp位

显示结果:在这里插入图片描述
源代码:

 #include <reg51.h>

typedef unsigned int u16;
typedef unsigned char u8;

u8 code smg[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};//共阴极
u16 num=2021;//要显示的数字
/*延时函数*/
void delay(u16 i)
{	
	while(i--);
}
/*显示函数*/
void display()
{
    u16 x = 0;
    while(1)
    {
        switch(x)
        {
            case 0:P2 = 0x0e;P0 = smg[num / 1000]|0x80;break;         //显示2.  只修改了此语句
            case 1:P2 = 0x0d;P0 = smg[(num % 1000) / 100];break;      //显示0
            case 2:P2 = 0x0b;P0 = smg[(num % 1000) % 100 / 10];break; //显示2
            case 3:P2 = 0x07;P0 = smg[num % 10]; break;               //显示1
        }
        delay(100);//延时,增大延时我们可以看到数码管是交替点亮的
        P0=0x00;//消隐(消隐一定要在延时函数后)
        x = ++x % 4;//取模,当x=4时,通过与4取模就让x的值重新变回0
    }
}
/*主函数*/
void main()
{
		display();
}
                     

一个问题:

之前我是在proteus上进行仿真的,没有进行消隐运行结果也是正确的,但是放到开发板上就有些看不清出,添加消隐处理就正常了.由此我们要知道用proteus仿真的结果正确,但在开发板上运行就不一定正确,大家学习硬件最好还是用实物!!!.
未消隐处理:

请添加图片描述

消隐处理:

请添加图片描述


以上就是51单片机数码管显示数字及小数点了,但仅仅以共阴极数码管为例,大家还可以思考一下如何用共阳极数码管实现

proteus中数码管: 7-SEG-MPX4 (CC是共阴极,CA是共阳极)

评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值