⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 api.c

📁 C8051F020单片机开发板演示程序
💻 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 + -