不一样的8位数码管显示驱动程序--蓝桥杯--CT107D

懒人专属,可不用要看程序,直接调用函数就可以用!


前言

每次遇到8位数码管,就知道程序又要多敲几行了,恰巧,本次针对CT107D板子,不忍每次显示数据都要敲那么多行代码,我便写了更为简便的代码,也希望用到的各位在用到数码管时不至于那么费劲。

一、使用方法

例如要显示“1.2.3-4567”,可直接用many_data(0,“1.2.3-4567”),若要显示某个变量值,需要进行格式化输出,如

a=0;

sprintf(temp,"da-%d",a);

many_data(0,temp);

其中第一个参数代表哪一位数码管开始显示,如0,就是左边第一位开始,7就是最右边那位;

二、程序代码

1.c文件

代码如下(示例):使用前请看下注释内容

/**********************************

    用 到 的 
#include "sumaguan.H"
one_data(pos,dat);//显示一位
many_data(pos,da[]);//显示多位

下面的可以不用管,调用上述对应函数即可
**********************************/
#include <stc15f2k60s2.h>
#include "sumaguan.H"

#define Duan     0xe0
#define WEI   0xc0
const uchar DM[18]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e,0x7f,0xbf};//0-9:0-9;10-15:A-f,后面16-17为'.''-'
const uchar WM[8] ={0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80};//(第0-7位)
unsigned char prior;
char flag=0;
void Dy3ms()        //@12.000MHz
{
    unsigned char i, j;
    i = 20;
    j = 169;
    do
    {
        while (--j);
    } while (--i);
}
//显示一位(位置,数据)规定a-f都为小写
void one_data(uchar pos,uchar dat)
{

    if(dat<47)//(符号)
    {
        if(dat =='.')//小数点处理
          {    
              flag = 1;
            P0 =prior&DM[16];
            }
            else if(dat =='-')
            {
            flag =0;
                P0 = DM[17];
              prior = DM[17];
            }
            else 
            {
                flag =0;
                P0 = 0xff;
            }
    }
     else if(dat<58)//数字0-9      
     {    
            flag =0;
            P0 = DM[dat-48];
            prior = DM[dat-48];
     }
     else 
     {    
            flag =0;
         P0 = DM[dat-87];//字符a-f 
         prior = DM[dat-87];
     }
     
    P2 = Duan;//端锁存器        
    P2 = 0X00;//恢复锁存
    P2 = WEI;//位锁存器
    P0 = WM[pos - flag];
    P2 = 0x00;
      Dy3ms();
}
//显示多位(位置,位数,数据)
void many_data(uchar pos,uchar da[])
{
    uchar  x,i,ac=0;
    for(i=0,x=0;da[i]!='\0'&&x<8;i++)
    {    
        if(flag == 1)
            x--;
            one_data(pos+x,da[i]);
        x++;
    }
}

2.H文件

代码如下(示例):加入程序文件夹即可,不用看

#ifndef __SUMAGUAN_H__
#define __SUMAGUAN_H__
#define  uchar unsigned char

void one_data(uchar pos,uchar dat);
void many_data(uchar pos,uchar da[]);

#endif

该处使用的url网络请求的数据。


效果演示

注:要到sprintf()函数时,需要加#include<stdio.h>

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值