懒人专属,可不用要看程序,直接调用函数就可以用!
前言
每次遇到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>