常用程序源代码集

时间:2020-12-01 00:27:18

1.延时程序

/****************************************************************************
* 函 数 名: DelayMS_16M()
* 功    能: 以毫秒为单位延时,系统时钟不配置时默认为16M(用示波器测量相当精确)
* 入口参数: msec 延时参数,值越大,延时越久
* 出口参数: 无
****************************************************************************/
void DelayMS(uint16 msec)
{ 
    uint16 i,j;
    for (i=0; i<msec; i++)
        for (j=0; j<535; j++);
}

/****************************************************************************
* 函 数 名: DelayMS_32M()
* 功    能: 以毫秒为单位延时,系统时钟为32MHz
* 入口参数: msec 延时参数,值越大,延时越久
* 出口参数: 无
****************************************************************************/
void DelayMS(uint msec)
{ 
    uint i,j;
    for (i=0; i<msec; i++)
        for (j=0; j<1070; j++);
}

2.十六进制转字符串

/****************************************************************************
* 函 数 名: Hex_To_Str()
* 功    能: 十六进制进制转字符串
* 入口参数: pHex:十六进制的数据
*          len:数据长度
* 出口参数: str:修改后的字符串
****************************************************************************/
char* Hex_To_Str( uint8 *pHex,uint8 len )
{
  char hex[] = "0123456789ABCDEF";    
  static char str[100];    
  char *pStr = str;    
   
  for ( uint8 i = 0; i < len; i++ )    
  {    
    *pStr++ = hex[*pHex >> 4];    
    *pStr++ = hex[*pHex++ & 0x0F];    
  }    
    
  return str;
}

3.获取本机蓝牙地址

/****************************************************************************
* 函 数 名: Read_Mac()
* 功    能: 读取本机MAC 
* 入口参数: *ownAddress:存放地址变量           
* 出口参数: 无
****************************************************************************/
static void Read_Mac(uint8 *ownAddress)     
{  
    ownAddress[5] = *(unsigned char *)(0x780E); // 直接指向指针内容     
    ownAddress[4] = *(unsigned char *)(0x780F);    
    ownAddress[3] = *(unsigned char *)(0x7810);    
    ownAddress[2] = XREG(0x7811);                    
    ownAddress[1] = XREG(0x7812);    
    ownAddress[0] = XREG(0x7813);   
} 

4.随机数发生器(8位)

/****************************************************************************
* 函 数 名: random_numCB()
* 功    能: 8位随机数产生器
* 入口参数: 无            
* 出口参数: 8位随机数
****************************************************************************/
static uint8 random_numCB()
{ 
    uint8 random_num = 0;
    ADCCON1 |= 0x04; 
    random_num = RNDL;
    return( random_num );
}

5.串口打印函数

/****************************************************************************
* 函 数 名: printf()
* 功    能: 打印函数
* 入口参数: 需要打印的字符串            
* 出口参数: ulLen:打印的字符串长度
****************************************************************************/
int printf(const char*fmt, ...)
{
    uint32  ulLen;
    va_list ap;

    char *pBuf = (char*)osal_mem_alloc(50);  //开辟缓冲区
    va_start(ap, fmt);
    ulLen = vsprintf(pBuf, fmt, ap);         //用虚拟打印函数实现
    va_end(ap);
    
    osal_pwrmgr_device(PWRMGR_ALWAYS_ON);    //不开启低功耗功能
    HalUARTWrite(NPI_UART_PORT, (uint8*)pBuf, ulLen); //从串口x输出
    osal_mem_free(pBuf);                     //释放内存空间
    return ulLen;
}