📄 44blib.c
字号:
int i;
Uart_GetString(string);
if(string[0]=='-')
{
minus=1;
string++;
}
if(string[0]=='0' && (string[1]=='x' || string[1]=='X'))
{
base=16;
string+=2;
}
lastIndex=strlen(string)-1;
if( string[lastIndex]=='h' || string[lastIndex]=='H' )
{
base=16;
string[lastIndex]=0;
lastIndex--;
}
if(base==10)
{
result=atoi(string);
result=minus ? (-1*result):result;
}
else
{
for(i=0;i<=lastIndex;i++)
{
if(isalpha(string[i]))
{
if(isupper(string[i]))
result=(result<<4)+string[i]-'A'+10;
else
result=(result<<4)+string[i]-'a'+10;
}
else
{
result=(result<<4)+string[i]-'0';
}
}
result=minus ? (-1*result):result;
}
return result;
}
//***************************************************************************
/****************************************************************************
【功能说明】向串口发送一个字节的整型数
****************************************************************************/
void Uart_SendByte(int data)
{
if(whichUart==0)
{
if(data=='\n')
{
while(!(rUTRSTAT0 & 0x2));
Delay(10); //because the slow response of hyper_terminal
WrUTXH0('\r');
}
while(!(rUTRSTAT0 & 0x2)); //Wait until THR is empty.
Delay(5);
WrUTXH0(data);
}
else
{
if(data=='\n')
{
while(!(rUTRSTAT1 & 0x2));
Delay(10); //because the slow response of hyper_terminal
rUTXH1='\r';
}
while(!(rUTRSTAT1 & 0x2)); //Wait until THR is empty.
Delay(5);
rUTXH1=data;
}
}
//***************************************************************************
/****************************************************************************
【功能说明】向串口送出一串字符
****************************************************************************/
void Uart_SendString(char *pt)
{
while(*pt)
Uart_SendByte(*pt++);
}
//***************************************************************************
/****************************************************************************
【功能说明】以标准输出格式向串口输出各种信息
****************************************************************************/
//if you don't use vsprintf(), the code size is reduced very much.
void Uart_Printf(char *fmt,...)
{
va_list ap;
char string[256];
va_start(ap,fmt);
vsprintf(string,fmt,ap);
Uart_SendString(string);
va_end(ap);
}
//***************************************************************************
/****************************************************************************
【功能说明】蜂鸣器鸣叫time个100us
****************************************************************************/
void Beep(unsigned int time)
{
rPDATE = (rPDATE | 0x08);
Delay(time); //延时若干个100us
rPDATE = (rPDATE & 0x1f7);
}
//***************************************************************************
/****************************************************************************
【功能说明】检测四个按键,有任何一个按键按下就让蜂鸣器鸣叫,否则不鸣叫
****************************************************************************/
void Key_Speaker(void)
{
unsigned int m;
m = rPDATG;
if((m & 0xf8) < 0xf8) {rPDATE = (rPDATE | 0x08);}
else {rPDATE = (rPDATE & 0x1f7);}
}
//***************************************************************************
/****************************************************************************
【功能说明】四个LED 点亮/熄灭状态设置(LedStatus低四位电平高低对应着四个LED亮/熄)
****************************************************************************/
void Led_Set(int LedStatus)
{
if((LedStatus&0x01)==0x01) //PE7状态设置
rPDATE=rPDATE&0x17f;
else
rPDATE=rPDATE|0x80;
if((LedStatus&0x02)==0x02) //PE6状态设置
rPDATE=rPDATE&0x1bf;
else
rPDATE=rPDATE|0x40;
if((LedStatus&0x04)==0x04) //PE5状态设置
rPDATE=rPDATE&0x1df;
else
rPDATE=rPDATE|0x20;
if((LedStatus&0x08)==0x08) //PE4状态设置
rPDATE=rPDATE&0x1ef;
else
rPDATE=rPDATE|0x10;
}
//***************************************************************************
/****************************************************************************
【功能说明】LED来回闪烁显示
****************************************************************************/
void Led_Disp(void)
{
Led_Set(0x08); //LED点亮/熄灭状态设置
Delay(500); //延时若干个100us
Led_Set(0x04); //LED点亮/熄灭状态设置
Delay(500); //延时若干个100us
Led_Set(0x02); //LED点亮/熄灭状态设置
Delay(500); //延时若干个100us
Led_Set(0x01); //LED点亮/熄灭状态设置
Delay(500); //延时若干个100us
Led_Set(0x02); //LED点亮/熄灭状态设置
Delay(500); //延时若干个100us
Led_Set(0x04); //LED点亮/熄灭状态设置
Delay(500); //延时若干个100us
Led_Set(0x08); //LED点亮/熄灭状态设置
Delay(500); //延时若干个100us
}
//***************************************************************************
/****************************************************************************
【功能说明】定时器启动
****************************************************************************/
void Timer_Start(int divider) //0:16us,1:32us 2:64us 3:128us
{
rWTCON=((MCLK/1000000-1)<<8)|(divider<<3);
rWTDAT=0xffff;
rWTCNT=0xffff;
// 1/16/(65+1),nRESET & interrupt disable
rWTCON=((MCLK/1000000-1)<<8)|(divider<<3)|(1<<5);
}
//***************************************************************************
/****************************************************************************
【功能说明】定时器停止
****************************************************************************/
int Timer_Stop(void)
{
// int i;
rWTCON=((MCLK/1000000-1)<<8);
return (0xffff-rWTCNT);
}
//***************************************************************************
/****************************************************************************
【功能说明】锁相环设置,修改系统主频
Fout = (8 + M_DIV) * Fin / [ (2+P_DIV) * (2^S_DIV) ]
****************************************************************************/
void ChangePllValue(int mdiv,int pdiv,int sdiv)
{
int i = 1;
rPLLCON = (mdiv << 12) | (pdiv << 4) | sdiv;
while(sdiv--)
i *= 2;
MCLK = (EXT_OSC_CLK*(mdiv+8))/((pdiv+2)*i);
}
//***************************************************************************
/****************************************************************************
【功能说明】
****************************************************************************/
void * malloc(unsigned nbyte)
/*Very simple; Use malloc() & free() like Stack*/
//void *mallocPt=Image$$RW$$Limit;
{
void *returnPt=mallocPt;
mallocPt= (int *)mallocPt+nbyte/4+((nbyte%4)>0); //to align 4byte
if( (int)mallocPt > HEAPEND )
{
mallocPt=returnPt;
return NULL;
}
return returnPt;
}
//***************************************************************************
/****************************************************************************
【功能说明】
****************************************************************************/
void free(void *pt)
{
mallocPt=pt;
}
//***************************************************************************
/****************************************************************************
【功能说明】
****************************************************************************/
void Cache_Flush(void)
{
int i,saveSyscfg;
saveSyscfg=rSYSCFG;
rSYSCFG=SYSCFG_0KB;
for(i=0x10004000;i<0x10004800;i+=16)
{
*((int *)i)=0x0;
}
rSYSCFG=saveSyscfg;
}
//***************************************************************************
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -