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

📄 sub.c

📁 多用途仪的温度控制
💻 C
字号:
#include <inc.h>

void delay(unsigned int i)
{
	while(i != 0) 
	{
		WDI = ~WDI;
		i--;
	}
}

void Beep(unsigned int t )
{
	while(t--)
	{
		beep=0;
	}
    beep=1;
}
 
unsigned char scankey(void)
{
	unsigned char key;
    BUTTON1=1;
//    BUTTON2=1;
    //key=0;
    delay(10);
	key=BUTTON1;
    if(BUTTON1==0) delay(50);
    if(BUTTON1==0) 
    {
        while(BUTTON1==0);
        return 1;
    }
    else return 0;
    //key=0;
    delay(10);
/*    key=BUTTON2;
    if(BUTTON2==0) delay(100);
    if(BUTTON2==0) 
    {
        while(BUTTON2==0);
        return 2;
    } */
///    else return 0;


/*	if(BUTTON1==0)	i=1;
	goto button_exit;
	if(BUTTON2==0)	i=2;
	goto button_exit;
button_exit:
	key=i;
	if(key==0&&KeyCount<=KEY_DLY_COUNT) 
	{ 
		KeyCount=0; 
		return; 
	}
    if(key==0&&KeyCount>KEY_DLY_COUNT) 
	{
    	KeyCount=0;
		NewKey = 1;
		KeyValue = PrevKey;
//		Beep(8);
		return;
	}
	if(key!=0&&KeyCount<220) 
	{
    	KeyCount++;
		PrevKey=key;
		return;
	}
	if(key!=0&&KeyCount>=220) 
	{
		if( ++KeyRepeat > 100 ) 
		{
 	 		KeyRepeat = 0;
	    	NewKey = 1;
	    	KeyValue = PrevKey;
//	    	Beep(8);
	    	return;
	 	}
	} */
}

void out595()
{
	unsigned char i;
	
	for(i=0x80;i!=0;i/=2)
	{
		SER = 1;
		if( (i & VAL_595) == 0 ) SER = 0;
		delay(2);
		SRCLK = 0;
		delay(2);
		SRCLK = 1;
		delay(2);
	}
	RCLK = 0;
	delay(2);
	RCLK = 1;
}

void timer0() interrupt 1 using 2
{
	TR0=0;
	TL0=0xfe;
	TH0=0xed;					//5ms定时
	TR0=1;
	WDI = ~WDI;
    del_coun++;
	if(del_coun>=200)
    {
		del_coun=0;
		addtime();
	}
	
	display();
}

void addtime(void)
{
	js_coun0++;
    if(key1)
    {
    js_coun1++;
	if(js_coun1>=60) js_coun1=60;
    if(js60s_flag==0 && js_coun1>=60) js60s_flag=1;
    }
}

void display(void)
{
	switch(DISP_COUN)
	{
	case 0:
		VAL_595 = DISP_LED0;
		out595();
		L1= 0;
		L2= 1;
	//	L3= 1;
	//	L4= 1;
		break;
	case 1:
		VAL_595 = DISP_LED1;
		out595();
		L1= 1;
		L2= 0;
	//	L3= 1;
	//	L4= 1;
		break;
/*	case 2:
		VAL_595 = DISP_LED2;
		out595();
		L1= 1;
		L2= 1;
		L3= 0;
		L4= 1;
		break;
	case 3:
		VAL_595 = DISP_LED3;
		out595();
		L1= 1;
		L2= 1;
		L3= 1;
		L4= 0;
		break; */
	}
	if(DISP_COUN++ >=2) DISP_COUN=0;
}

void keyloop(void)
{
        unsigned char i;
        for(i=0;i<4;i++)
        {
            KeyValue=scankey();
    		switch(KeyValue)
    		{
                case 0: break;
    			case 1: key1=~key1;
                        if( key1) js_coun1=0;
                        break;
    		   /* case 2: key2=~key2;
                        if( key2) js_coun2=0;
                        break; */
    		}  
    
    		if(key1)
    		{   
    			DISP_LED0=BCD[(js_coun1/10)%10];
    			DISP_LED1=BCD[js_coun1%10];
    		}
    		else 
    		{
    			DISP_LED0 = 0xc0;
    			DISP_LED1 = 0xc0;
                js60s_flag=0;
    		}
/*    		if(key2)
    		{
    			DISP_LED2=BCD[(js_coun2/10)%10];
    			DISP_LED3=BCD[js_coun2%10];
    		}
    		else
    		{
    			DISP_LED2 = 0xc0;
    			DISP_LED3 = 0xc0;
    		} */
        }
}

unsigned int calcCRC(unsigned char sendLen)
{
    unsigned int CRC=0xffff;
    bit f;
    unsigned char i,j;
    
    for(i=0;i<sendLen;i++)
	{
        CRC ^= sendData[i];
        for(j=0;j<8;j++)
		{
            if( (CRC&1) != 0)
			{
                f = true;
			}
            else
			{
                f = false;
			}
            CRC >>= 1;
            if(f)
			{
                CRC ^= 0xA001;
            }
        }
    }
    return CRC;
}

/////////控制函数
void net_send(unsigned char c)  
{	
	RX_DX = 1;
  	SBUF=c;
  	while (!TI) ;
  	TI = 0;
	RX_DX = 0;
}

bit net_sendData()	////发送
{
	unsigned char i;

	for(i=0;i<commInLong;i++)
	{
		net_send(sendData[i]);
	}
	return 0;
}

unsigned char whp_getTemp() 
{

	unsigned char sendLen;
	unsigned int i;

    sendData[0] = 1;
    sendData[1] = 4;
    sendData[2] = 0;
    sendData[3] = 0;
    sendData[4] = 0;
    sendData[5] = 1;

	sendLen = 6;
    i = calcCRC(sendLen);
    sendData[6] = (unsigned char)(i & 0xff);
    sendData[7] = (unsigned char)(i>>8);

	commInLong=8;
	commOutLong = 0;
	pVal=0;
	if(net_sendData()!=0)
	{
		return 1;
	}
	incept_flag = 1;
	delay(5000);
	incept_flag = 0;
//	pVal=commOutLong;
//	if(c!=9)
//	{
//		return 2;
//	}
/*	if( (receData[3] & 0x80) == 1)
	{
		receData[3] &= 0x7f;
		pVal = receData[3]*256+receData[4];
//		pVal =0- pVal;

	}
	else*/   pVal=receData[3]*256+receData[4];

	pVal =pVal/25-100;
	return 0;
    delay(2000);
}

unsigned char whp_getSvTemp() 
{

	unsigned char sendLen;
	unsigned int i;

    sendData[0] = 1;
    sendData[1] = 3;
    sendData[2] = 0;
    sendData[3] = 2;
    sendData[4] = 0;
    sendData[5] = 1;

	sendLen = 6;
    i = calcCRC(sendLen);
    sendData[6] = (unsigned char)(i & 0xff);
    sendData[7] = (unsigned char)(i>>8);

	commInLong=8;
	if(net_sendData()!=0)
	{
		return 1;
	}
	commOutLong = 0;
	incept_flag = 1;
	delay(5000);
	incept_flag = 0;
	if(commOutLong<7)
	{
		return 2;
	}
/*	if( (receData[3] & 0x80) == 1)
	{
		receData[3] &= 0x7f;
		sVal=receData[3]*256+receData[4];
//		sVal =0 - sVal;
	}
	else*/  sVal=(receData[3]*256+receData[4]);

	sVal =sVal/25-100;
	return 0;
    delay(2000);
}

void serial() interrupt 4 using 2
{
	unsigned char c;

	if(_testbit_(RI))
	{
		c = SBUF;
		if(incept_flag == 1)
		{
			if(commOutLong<15)
			{
				receData[commOutLong++]=c; 
			}
		}
	}
}

/*
unsigned char dprintf(char *fmt, ...)
{
	va_list arg_ptr;
	unsigned char uLen;
	va_start(arg_ptr, fmt);
	uLen = (unsigned char)vsprintf(sendData, fmt, arg_ptr);
	va_end(arg_ptr);
	return uLen;
}
*/

⌨️ 快捷键说明

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