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

📄 cmain.c

📁 用CS5532做的无线吊钩称的接收称重显示器程序
💻 C
📖 第 1 页 / 共 3 页
字号:
	SS1=2;
	SS2=0; 
	IOBeep = 1;
	IOPower = 1;
	ReadEeprom(e_start, 1, (unsigned char xdata*)&test_start);
	test_start=~test_start & 0x01; 
	WriteEeprom(e_start, 1, (unsigned char xdata*)&test_start);
	IOBeep = 0;
	delay(2000);
	IOBeep = 1;
	if( test_start  == 0) 
	{
		IOPower = 0;
		while (1)
		{

		}
	}
startup:
	for(ptr_xdata=0;ptr_xdata<744;ptr_xdata++)
	{
		*ptr_xdata=0;                   //将外部744个存储单元清零         
	}
	IOBK = 1;
	InitSfr();				///初始化特殊功能寄存器
	InitLcd();				///初始化lcd
	InitVar();			//初始化变量和参数
	InitUart();			//设置为1200bps,8N1

/*	bankbuff[1] = bankbuff[2]=bankbuff[3]=bankbuff[4]=bankbuff[5]=bankbuff[6]=0;
	cont_1 = cont_2 = cont_3 = 0;*/
	ClearFlag();
	unit = 0xff;
	DispStr(version);
	DelayInter(100);

	if (!SelfTest()) goto startup;

//	InitUart();			//设置为1200bps,8N1
	wink = 0;
	InitSendAS();
	adz = adz0 = adzero;
	ad_out = 0;
	for ( ; ; )			//确定零点内码
	{
		DisposeUart();
		if (pick)
		{
			pick = 0;
			if ( (!BErrData) && (stab) )
			{
				f_w = GetWeightKg();
				if (decimal_n >= 0) f_w = f_w * exp_m[decimal_n];

				f_w = f_w + 0.5*((float)division_n);
				w_gross = (signed long int)f_w;
				w_gross = w_gross / (signed long int)division_n;
				w_gross = w_gross * division_n;
				if (w_gross < 0) w_gross = -w_gross;
				w_gross = 100 * w_gross;
				w_net = 20 * capacity_n;
				if (decimal_n < 0) w_net = w_net * exp_m[-decimal_n];
				if (w_gross <= w_net)
				{
					adz = adz0 = ad_out;
					beep = 13;
				}
				else
				{
					DispStr(err_4);
					beep = 2;
					DelayInter(200);
				}
				break;
			}
		}
		if (wink >= 400)
		{
			if (BErrData)
			{
				DispStr(err_10);
				beep = 2;
				DelayInter(200);
				break;
			}
			else beep = 2;
			break;
		}
	}

	if (ad_out < 100)
	{
		DispStr(err_6);
		beep = 2;
		DelayInter(200);
		adz = adz0 = adzero;
	}

//	adz = adz0 = adzero;
	unit = s_unit;
	BMustDisp = TRUE;
	second = 0;
	shut_min = 0;
	last_min = 0;
	w_tare = 0;
	for ( ; ; )
	{
		AutoPower();
		switch (para.mode.bk)
		{
			case 0:			//AUto
				CheckBk();
				break;
			case 1:				//ON
				if (batt_lcd == 0) IOBK = 1;
				else CheckBk();
				break;
			case 2:				//OFF
//				if (bk_delb == 0)	bk=0;
				IOBK = 0;
				break;
		}


//零点跟踪
		if (stab_lcd)
		{
			switch (para.mode.auto_zero)
			{
//				case 0:				//不进行零位跟踪
//					break;
				case 0:				//0.5d
					tmp_li1 = adz - ad_out;
					if (tmp_li1 < 0) tmp_li1 = -tmp_li1;
					if ( tmp_li1 < fd5 )
					{
						if (times>100)		//2秒
						{
							times=0;
							adz = ad_out;
							BMustDisp = TRUE;
							continue;
						}
					}
					else times = 0;
					break;
				default:
					if (w_gross <0) w_gross = -w_gross;
					TmpData[0] = para.mode.auto_zero -1;
					TmpData[0] = 1 << TmpData[0];
					TmpData[0] = TmpData[0] * division;
					if (w_gross <= (signed long)TmpData[0])
					{
						if (times > 100)
						{
							times = 0;
							adz = ad_out;
							BMustDisp = TRUE;
							continue;
						}
					}
					else times = 0;
					break;
			}
		}
		else times = 0;

		if (BMustDisp)
		{
			BMustDisp = FALSE;
			goto mustdisp;
		}

		DisposeUart();
		if (pick)
		{
mustdisp:
			pick = 0;
			stab_lcd = FALSE;
			if (stab) stab_lcd = TRUE;
			net_lcd = FALSE;
			if (BTareFlag) net_lcd = TRUE;
			if (!BErrData)
			{
				w_gross = GetWeightUnit();

				if (w_gross > capacity + 9 * (signed long int)division)
				{
					beep = 15;
					ClearFlag();
					unit = 0xff;
					DispStr(ol);
					BOverLoad = TRUE;
					BLess20d = FALSE;
				}
				else 
				{
					beep = 30;
					BOverLoad = FALSE;
					unit = s_unit;
					zero_lcd = FALSE;
					if (w_gross == 0) zero_lcd = TRUE;
					w_net = w_gross - w_tare;
					if (w_net < 20*division)
					{
						BLess20d = TRUE;
						BAcc = TRUE;
					}
					else
					{
						BLess20d = FALSE;
						second = 0;
						shut_min = 0;
					}
					if (BHold) DispDigital(w_hold,decimal);
					else DispDigital(w_net,decimal);
				}
			}
		}
		if (!BErrData) ray_lcd = TRUE;
		else ray_lcd = FALSE;
		if (keyp)
		{
			keyp = 0;
			second = 0;
			shut_min = 0;
			if (BErrData) {beep=1;continue;}		//按键无作用
			if (para.mode.bk == 0)
			{
				bk_del = 500;
				bk_delb = 1;
				IOBK = 1;
			}
			switch(kbuf)
			{
				case KEYUNIT:
					if (BHold) {beep = 1;break;}
					if ( (para.mode.unit&0x0f) == 0)
					{
						beep = 1;
						break;
					}
					TmpData[0] = s_unit;
					for ( ; ; )
					{
						s_unit++;
						if (s_unit > 3) s_unit = 0;
						if ( (para.mode.unit&allbit[s_unit]) != 0) break;
					}
					if (s_unit != TmpData[0])
					{
						WriteEeprom(e_s_unit,1,(unsigned char xdata*)&s_unit);
						getcap(s_unit);
						unit = s_unit;
						BMustDisp = TRUE;
					}
					else {beep = 1; break;}
					BAcc = TRUE;
					M_lcd = FALSE;
					w_total = 0;
					n_total = 0;
//确定扣重值
					if (BTareFlag)
					{
						f_w = f_t;
						f_w = f_w * CONVERTUNIT[s_unit];
						if (decimal >= 0) f_w = f_w * exp_m[decimal];
						
						f_w = f_w + 0.5*((float)division);
						w_tare = (signed long int)f_w;
						w_tare = w_tare / (signed long int)division;
						w_tare = w_tare * division;
					}
					if (BHold)
					{
						f_w = f_h;
						f_w = f_w * CONVERTUNIT[s_unit];
						if (decimal >= 0) f_w = f_w * exp_m[decimal];
						
						f_w = f_w + 0.5*((float)division);
						w_hold = (signed long int)f_w;
						w_hold = w_hold / (signed long int)division;
						w_hold = w_hold * division;
					}
					break;
				case KEYMPLUS:
					if (BHold ) {beep = 1; break;}
					if (BLess20d)
					{
						if (n_total == 0) {beep = 1; break;}
set_3:					BMustDisp = TRUE;
						dispbuff[0] = 0x16;			//n
						dispbuff[1] = 0x20;
						dispbuff[2] = 0x20;
						dispbuff[5] = (unsigned char)(n_total%10);
						TmpData[0] = (unsigned char)(n_total/10);
						dispbuff[3] = TmpData[0] / 10;
						dispbuff[4] = TmpData[0] % 10;
						unit = 0xff;
						ClearFlag();
						M_lcd = TRUE;
						tran();
						wrlcd();
						m_delb = TRUE;
						m_del = 100;
						for ( ; ; )
						{
							if (!m_delb) break;
							if (keyp)
							{
								keyp = 0;
								if (kbuf == KEYCLEAR) goto set_31;
								beep = 1;
							}
						}
						unit = s_unit;
						DispDigital(w_total,decimal);
						m_delb = 1;
						m_del = 100;
						for ( ; ; )
						{
							if (keyp)
							{
								keyp = 0;
								if (kbuf == KEYCLEAR)
								{
set_31:								n_total = 0;
									BAcc = TRUE;
									M_lcd = FALSE;
									w_total = 0;
									BMustDisp = TRUE;
									goto ret_3;
								}
								beep = 1;
							}
							if (m_delb == 0) break;
						}
					}
					else
					{
						if (!BAcc) {beep=1;break;}
						tmp_li1 = w_total + w_net;
						if ( (n_total>=999) || (tmp_li1 > 999999) ) 
						{
							beep = 1;
							DispStr(err_12);
							break;
						}
						BAcc = FALSE;
						M_lcd = TRUE;
						w_total = tmp_li1;
						n_total++;
						goto set_3;
					}

ret_3:				break;
				case KEYHOLD:
					BHold = ~BHold;
					BMustDisp = TRUE;
					f_h = (float)w_net;
					w_hold = w_net;
					break;
				case KEYCHANGE:
					if (BHold) {beep = 1; break;}
					BAcc = TRUE;
					M_lcd = FALSE;
					n_total = 0;
					w_total = 0;
					para.mode.change++;
					if (para.mode.change > 2) para.mode.change=0;
					WriteEeprom(e_para+8, 1,(unsigned char xdata*)&para.cmode[8]);
					getcap(s_unit);
					if (BTareFlag)
					{
						f_w = f_t;
						
						f_w = f_w * CONVERTUNIT[s_unit];
						if (decimal >= 0) f_w = f_w * exp_m[decimal];
						f_w = f_w + 0.5*((float)division);
						w_tare = (signed long int)f_w;
						w_tare = w_tare / (signed long int)division;
						w_tare = w_tare * division;
					}
					if (BHold)
					{
						f_w = f_h;
						
						f_w = f_w * CONVERTUNIT[s_unit];
						if (decimal >= 0) f_w = f_w * exp_m[decimal];
						f_w = f_w + 0.5*((float)division);
						w_hold = (signed long int)f_w;
						w_hold = w_hold / (signed long int)division;
						w_hold = w_hold * division;
					}
					BMustDisp = TRUE;
					break;
				case KEYT_Z:
					if (BHold) {beep=1;break;}
					if ( (!stab_lcd) || BErrData || BOverLoad) {beep = 1; break;}
					if (w_gross > capacity) {beep = 1; break;}
					tmp_li1 = adz;
					adz = adz0;
					f_w = GetWeightKg();
					if (decimal_n >= 0) f_w = f_w * exp_m[decimal_n];
	
					f_w = f_w + 0.5*((float)division_n);
					tmp_li2 = (signed long int)f_w;
					tmp_li2 = tmp_li2 / (signed long int)division_n;
					tmp_li2 = tmp_li2 * division_n;
					BTmp = FALSE;
					if (tmp_li2 < 0) {tmp_li2 = -tmp_li2;BTmp = TRUE;}
					tmp_li2 = 100 * tmp_li2;
					tmp_li3 = 10 * capacity_n;
					if (decimal_n < 0) tmp_li3 = tmp_li3 * exp_m[-decimal_n];
					if (tmp_li2 <= tmp_li3)
					{
						adz = ad_out;
						w_tare = 0;
						BTareFlag = FALSE;
						BMustDisp = TRUE;
					}
					else
					{
						adz = tmp_li1;
						if (BTmp) {beep = 2;break;}
						f_t = GetWeightKg();
						w_tare = w_gross;
						n_tare = w_tare;
						t_unit = s_unit;
						BTareFlag = TRUE;
						BMustDisp = TRUE;
					}
					break;
				default:
					break;
			}
		}

	}	
}

⌨️ 快捷键说明

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