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

📄 common.c

📁 51开发板调试程序
💻 C
📖 第 1 页 / 共 3 页
字号:
void RandomRead(UCHARIDATA Data[],UCHARIDATA Address,UCHARIDATA Num)
{
    UCHARIDATA i;
    UCHARIDATA *PData;
    PData=Data;

    for(i=0;i<Num;i++)
    {
        Start();

        Send(0xa0);
        Ack();
        Send(Address+i); 
        Ack();

        Start();
        Send(0xa1);
        Ack();

        *(PData+i)=Read();
        mDelay(20);
        Scl=0;
        NoAck();

        Stop();
    }

    mDelay(10);
    
}

//////////////////////Current Address Read//////////////////////////////////
void CurrentAddressRead(UCHARIDATA *pData)
{
    UCHARIDATA *pTemp;
    pTemp=pData;

	Start();
    Send(0xa1);
    Ack();

   *pTemp=Read();
    mDelay(20);

	Scl=0;
    NoAck();

    Stop();
  
}


void SequentialRead(UCHARIDATA Data[],UCHARIDATA Num)
{
    UCHARIDATA i;
    UCHARIDATA *PData;
    PData=Data;

	Start(); /*发送启动信号*/
    Send(0xa1);
    Ack();

    for(i=0;i<Num-1;i++)
    {
        *(PData+i)=Read();
		mDelay(20);
        Scl=0;
        Ack();
		
    }

	*(PData+Num-1)=Read();
	mDelay(20);
    Scl=0;
    NoAck();

	Stop();
    
}
////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////
/****************AD_DA*******************/
void Delay(UINTDATA time)
{
    while(time--);
}

/************************DA****************************/
void DATrans(UINT da)//TLC5615DA转换
{
	UCHAR i;

	CS_DA = 1;
	_nop_();
    SPI_CLK=0;
	_nop_();
	CS_DA = 0;

	da<<=6;

	for (i=12;i>0;i--)
	{
		
		SPI_CLK=0;
		_nop_();
		DA_DATAIN=(bit)(da&0x8000);
		_nop_();
		SPI_CLK=1;
		da<<=1;
	}

	CS_DA=1;
	SPI_CLK=0;
} 
/******************************************************/

/************************AD****************************/
UCHAR ADTrans(void)//TLC549
{
	UCHAR i;
    UCHAR u;
    
    CS_AD = 0;
    Delay(5);

    for(i=0;i<8;i++) //read data 
    { 
        SPI_CLK=0; 
        u=(u<<=1)|AD_DATAOUT; 
        SPI_CLK=1; 
        _nop_(); 
    } 

    CS_AD=1; 
    Delay(20);
    //u = SBUF; 

	return(u); //return ad data 
}
/******************************************************/



/*********函数名称:ADCSelChannel********
*
*功能:转换指定通道的模拟量为数字量
*
*说明:
*
*位置:
*
****************************************/
unsigned char ADCSelChannel(void)
{
      UCHARIDATA ConvertValue = 0;
      UCHARIDATA i;
      ADChipSelect = 1; //芯片复位
      ADChipSelect = 0;
      ADChipSelect = 1;
      ADClock = 0;
      Wait4us;

      ADChipSelect = 0; //芯片起始
      Wait4us; //等待延时
      for (i = 0; i < 8; i ++) //输入采样转换时钟
      {
            ADClock = 1;
            ADClock = 0;
      }
      ADChipSelect = 1; //开始转换
      Wait10us; //等待转换结束

      ADChipSelect = 0; //读取转换结果
      Wait4us;
      for (i = 0; i < 8; i ++) //
      {
            ADClock = 1;
            //ConvertValue <<= 1;
			////////
			ACC  = ConvertValue;
			//////////
			ADDataOut = 1;
			Wait10us;
            if (ADDataOut)
            {
                ConvertValue = ConvertValue|0x01;
            }
			else
			{
			    ConvertValue = ConvertValue&0xfe;
			}
            ADClock = 0;

			///
			ConvertValue = ConvertValue<<1;
      }
      ADChipSelect = 1;
      return (ConvertValue); //返回转换结果
}
////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////
/****************LCD*******************/
void soft_nop()
{
    ;
}

void soft_10ms()/***********12MHZ 提供10MS 软件延时************/
{ 
    register int i;
    for(i=0;i<711;i++)
	{
	    ;
	}
}

void soft_20ms()/***********12MHZ 提供20MS 软件延时************/
{ 
    soft_10ms();
    soft_10ms();
}

void hard_10ms(unsigned int delaytime) /*基于10MS 的硬件延时*/
{ 
    sys10mscounter=delaytime;
    while(sys10mscounter);
}

bit lcd_checkbusy()/*检查LCD 忙*/
{ 
    register lcdstate;
    dc=0; /*dc=1为数据,=0 为命令.*/
    rw=1; /*rw=1为读,=0为写.*/
    cs=1; /*cs=1选通.*/
    soft_nop();
    lcdstate=lcdbus;
    cs=0;

    return((bit)(lcdstate&0x80));
}

void lcd_wrcmd(unsigned char lcdcmd) /*写LCD命令*/
{ 
    lcdusing1=1;

    while(lcd_checkbusy());

    lcdbus=lcdcmd;
    dc=0; /*dc=1为数据,=0 为命令.*/
    rw=0; /*rw=1为读,=0为写.*/
    cs=1; /*cs=1选通.*/
    soft_nop();
    cs=0;
    lcdbus=0xff;
    lcdusing1=0;
}

void lcd_moveto(char position) /*移动光标到指定位.0-79*/
{ 
    register cmd=0x80;
    lcdcounter=position;
        
	if (position > 59)
	{
        position += 0x18;
	}
    else
    {   
	    if (position > 39)
		{
		    position -= 0x14;
		}
        else
        {       
		    if (position > 19)position += 0x2c;
        }
    }

    cmd=cmd|position;
    lcd_wrcmd(cmd);
}
void lcd_wrdata(char lcddata) /*在当前显示位置显示数据*/
{ 
    //char i;
    lcdusing2=1;

    while(lcd_checkbusy());

    if(lcdcounter==20)
	{
        lcd_moveto(20);
        while(lcd_checkbusy());
    }
    if(lcdcounter==40)
	{
        lcd_moveto(40);
        while(lcd_checkbusy());
    }
    if(lcdcounter==60)
	{
        lcd_moveto(60);
        while(lcd_checkbusy());
    }
    if(lcdcounter==80)
	{
        lcd_moveto(0);
        while(lcd_checkbusy());
        lcdcounter=0;
    } /*为通用而如此*/

	lcdcounter++;
    lcdbus=lcddata;
    dc=1; /*dc=1为数据,=0 为命令.*/
    rw=0; /*rw=1为读,=0为写.*/
    cs=1; /*cs=1选通.*/
    soft_nop();
    cs=0;

    lcdbus=0xff;
    lcdusing2=0;
}

void lcd_string(char *strpoint) /*在当前显示位置显示LCD 字符串*/
{ 
    register i=0;
    while(strpoint[i]!=0)
	{
        lcd_wrdata(strpoint[i]);
        i++;
    }
}

void lcd_init()/*初始化*/
{ 
    lcd_wrcmd(0x38); /*设置8 位格式,2行,5*7*/
    lcd_wrcmd(0x0c); /*整体显示,关光标,不闪烁*/
    lcd_wrcmd(0x06); /*设定输入方式,增量不移位*/
    lcd_wrcmd(0x01); /*清除显示*/
    lcdcounter=0;
}

void lcd_cls()/*清除显示*/
{ 
    lcd_wrcmd(0x01);
    lcdcounter=0;
}


////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////
/****************KBScan*******************/
void   KBScan(void)
{
    ucdKBScan_Acc = uccRemove[ucdIncrease];
	ucdIncrease = ucdIncrease + 1;

    if(ucdIncrease >= 3)
	{
	    ucdIncrease = 0;
	}

	ucdKBScan_Acc = ucdKBScan_Acc|0x38;

    P0 = P0&0xc0;
	P0 = P0|ucdKBScan_Acc;

	for(i = 0; i < 100; i++)
	    for(j = 0; j < 80; j++)
	        ucdReceiver = P0;

        ucdReceiver = ucdReceiver&0x3f;

	 if(ucdReceiver == 0x36)
	     ucdKBScanResult = 0;
	 else if(ucdReceiver == 0x2e)
	     ucdKBScanResult = 1;
	 else if(ucdReceiver == 0x1e)
	     ucdKBScanResult = 2;
	 else if(ucdReceiver == 0x35)
	     ucdKBScanResult = 3;
	 else if(ucdReceiver == 0x2d)
	     ucdKBScanResult = 4;
	 else if(ucdReceiver == 0x1d)
	     ucdKBScanResult = 5;
	 else if(ucdReceiver == 0x33)
	     ucdKBScanResult = 6;
	 else if(ucdReceiver == 0x2b)
	     ucdKBScanResult = 7 ;
	 else if(ucdReceiver == 0x1b)
	     ucdKBScanResult = 8;
	 else
	     ucdKBScanResult = 30;

	 //return  ucdKBScanResult;
	 
}
////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////
/****************S*******************/
void TreatLEDDisplayArrayForAD(UCHAR  ucADValve)
{
    if(ucADValve <= 23)
    {
        ucdLEDDisplayArray[0] = 19;
        ucdLEDDisplayArray[1] = 20;
        ucdLEDDisplayArray[2] = 0;
        ucdLEDDisplayArray[3] = 0;

    }
    else if(ucADValve > 23 && ucADValve <= 46)
    {
        ucdLEDDisplayArray[0] = 19;
        ucdLEDDisplayArray[1] = 20;
        ucdLEDDisplayArray[2] = 0;
        ucdLEDDisplayArray[3] = 5;
    }
    else if(ucADValve > 46 && ucADValve <= 69)
    {
	    ucdLEDDisplayArray[0] = 19;
        ucdLEDDisplayArray[1] = 20;
        ucdLEDDisplayArray[2] = 1;
        ucdLEDDisplayArray[3] = 0;
    }							
    else if(ucADValve > 69 && ucADValve <= 92)
    {
	    ucdLEDDisplayArray[0] = 19;
        ucdLEDDisplayArray[1] = 20;
        ucdLEDDisplayArray[2] = 1;
        ucdLEDDisplayArray[3] = 5;
    }
    else if(ucADValve > 92 && ucADValve <= 115)
    {
	    ucdLEDDisplayArray[0] = 19;
        ucdLEDDisplayArray[1] = 20;
        ucdLEDDisplayArray[2] = 2;
        ucdLEDDisplayArray[3] = 0;
    }
    else if(ucADValve > 115 && ucADValve <= 138)
    {
	    ucdLEDDisplayArray[0] = 19;
        ucdLEDDisplayArray[1] = 20;
        ucdLEDDisplayArray[2] = 2;
        ucdLEDDisplayArray[3] = 5;
    }
    else if(ucADValve > 138 && ucADValve <= 161)
    {
	    ucdLEDDisplayArray[0] = 19;
        ucdLEDDisplayArray[1] = 20;
        ucdLEDDisplayArray[2] = 3;
        ucdLEDDisplayArray[3] = 0;
    }
    else if(ucADValve > 161 && ucADValve <= 184)
    {
	    ucdLEDDisplayArray[0] = 19;
        ucdLEDDisplayArray[1] = 20;
        ucdLEDDisplayArray[2] = 3;
        ucdLEDDisplayArray[3] = 5;
    }
    else if(ucADValve > 184 && ucADValve <= 207)
    {
	    ucdLEDDisplayArray[0] = 19;
        ucdLEDDisplayArray[1] = 20;
        ucdLEDDisplayArray[2] = 4;
        ucdLEDDisplayArray[3] = 0;
    }
    else if(ucADValve > 207 && ucADValve <= 230)
    {
	    ucdLEDDisplayArray[0] = 19;
        ucdLEDDisplayArray[1] = 20;
        ucdLEDDisplayArray[2] = 4;
        ucdLEDDisplayArray[3] = 5;
    }
    else //if(ucADValve > 230 && ucADValve <= 26)
    {
	    ucdLEDDisplayArray[0] = 19;
        ucdLEDDisplayArray[1] = 20;
        ucdLEDDisplayArray[2] = 5;
        ucdLEDDisplayArray[3] = 0;
    }
    
} 
////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////
/****************S*******************/
////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -