📄 api.c
字号:
/************************************************************************************
* Copyright (c), 2004-2007,西安铭朗电子科技有限责任公司
* All rights reserved.
*
* Http: www.mlarm.com
* Email: mlarm@mlarm.com
*
* File name: api.c
*
* Project : ML-F020ICB
* Processor: C8051F020
* Compiler : Keil C51 Compiler
*
* Author: EagleC
* Version: 1.00
* Date: 2007.07.05
* Email:
*
* Description: 本文件是自定义的一些api函数
*
* Others: none;
*
* Function List:
*
* History:
* 1. Author: Eagle Cao
* Version: 1.00
* Date: 2007.07.05
* Modification: 建立文件
*
*************************************************************************************/
/************************************************************************************/
// 引用外部头文件
#include "driver.h"
#include "api.h"
#include "ASCIIData.h"
unsigned long code X10[10] ={1,10,100,1000,10000,100000,1000000,10000000,100000000,1000000000};
// 将数据转换为ASCII码放到字符串中。
unsigned char Format_I(long nData, char *ptr, unsigned char nMaxLen, unsigned char nMinLen, unsigned char nFill, unsigned char nType)
{
char i;
unsigned char flag;
unsigned char nFor;
unsigned char k;
if(nMaxLen<=0) return nFor;
switch(nType) {
case 'h':
case 'H':
nFor = 0;
if(nData>0)
{
flag = 1;
k=0;
for (i=9; i>=0; i--)
{
if (flag)
{
if ((nData/X10[i])>0)
{
flag = 0;
nFor = i+1;
if(nMaxLen < nFor) return 0;
if(nFor<nMinLen)//填充nFill
{
for(k=0; k<nMinLen-nFor;k++)
{
ptr[nFor-i-1+k] = nFill;
}
ptr[nFor-i-1+k] = 0x30+(unsigned char)(nData/X10[i]);
}
else
ptr[0] = 0x30+(unsigned char)(nData/X10[i]);
}
}
else
ptr[nFor-i-1+k] = 0x30+(unsigned char)(nData%X10[i+1]/X10[i]);
}
}
else if(nData==0)
{
k=0;
nFor = 1;
if(nMaxLen < nFor) return 0;
if(nFor<nMinLen)//填充nFill
{
for(k=0; k<nMinLen-nFor;k++)
{
ptr[nFor-1+k] = nFill;
}
ptr[nFor-1+k] = 0x30+(unsigned char)(nData/X10[0]);
}
else
ptr[0] = 0x30+(unsigned char)(nData/X10[0]);
}
else
{
ptr[0] = '-';
nData = ~nData + 1;
flag = 1;
k=0;
for (i=9; i>=0; i--)
{
if (flag)
{
if ((nData/X10[i])>0)
{
flag = 0;
nFor = i+2;
if(nMaxLen < nFor) return 0;
if(nFor<nMinLen)//填充nFill
{
if(nFill=='0')//如果是'0',则不需要改变'-'的位置
{
for(k=0; k<nMinLen-nFor;k++)
{
ptr[k+1] = nFill;
}
ptr[k+1] = 0x30+(unsigned char)(nData/X10[i]);
}
else//如果不是'0',则改变'-'的位置到数据前面
{
for(k=0; k<nMinLen-nFor;k++)
{
ptr[k] = nFill;
}
ptr[k] = '-';
k++;
ptr[k] = 0x30+(unsigned char)(nData/X10[i]);
k--;
}
}
else
ptr[1] = 0x30+(unsigned char)(nData/X10[i]);
}
}
else
ptr[nFor-i-1+k] = 0x30+(unsigned char)(nData%X10[i+1]/X10[i]);
}
}
break;
//其它方式的数字显示方式请自行完成
case 'b':
case 'B':
case 'x':
case 'X':
case 'o':
case 'O':
default:
break;
}
return nFor+k;
}
// 向LCD写入一串字符串
void LCDB_DispFWord (unsigned int x, y, unsigned char *pt)
{
unsigned int page;
unsigned int local;
unsigned long addrtemp;
unsigned char xdata diptemp[32];
if (y>=320 || x>=240) return;
while (*pt)
{
if(*pt>0x7f)//如果不是ASCII码,则到Flash字库中查找
{
if (y+16>320)
{
y = 0;
x = x+16;
if (x>=240)
return;
}
page = *pt-0xa0-1;
local = *(pt+1)-0xa0-1;
addrtemp = ((unsigned long)(page*94+local))*32;
Flash_Read (addrtemp, diptemp, 32);
LCDB_ShowHZxy (x, y, 16, 16, diptemp);
pt += 2;
y += 16;
}
else if(*pt >= 0x20)//如果是ASCII码,在数组nAsciiDot中查找
{
page = (*pt-0x20)*0x10;
LCDB_ShowHZxy (x, y, 16, 8, nAsciiDot+page);
pt++;
y += 8;
}
if (y>=320)// 换行
{
y = 0;
x = x+16;
if (x>=240)
return;
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -