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

📄 main.c

📁 一个基于C51开发的计价秤
💻 C
📖 第 1 页 / 共 4 页
字号:
				Set_Lcd2_Buf('0',1,1);
				Set_Lcd2_Buf('n',0,1);	
			}
			else
			{
		
				Set_Lcd2_Buf(0,3,4);
				Set_Lcd2_Buf('0',2,1);
				Set_Lcd2_Buf('F',1,1);
				Set_Lcd2_Buf('F',0,1);
			}
			break;	
		}
		if(half_sec)
		{
			half_sec=FALSE;
			Display();			
		}
	}
}
/**********************************
********Calculator mode************
**********************************/
VOID Calculator()
{
	INT8 data i,pos;
	FLOAT temp; 
	BYTE ch,Char_buf[7]={0,'L','U','C','L','A','C'};
	BYTE number[7];
	ET1=0;
	pos=0;
	lastop=0;
	Last_value=0;
	Current_value=0;
	for(i=0;i<7;i++)
		number[i]=0;
	for(i=0;i<5;i++)
		Set_Lcd1_Buf(Char_buf[i+1],i,1);
	Cls_Icon_Buf();
	Set_Lcd2_Buf(0,0,7);
	Set_Lcd3_Buf(0,1,6);
	Set_Lcd2_Buf('0',1,1);
	Set_Lcd3_Buf('0',0,1);
	ET1=1;
	while(mode==Calculator_mode)
	{
		if(keyprocess)
		{
			keydone=FALSE;
			keyprocess=FALSE;
			numeric=0;
			if(!keypre[1]&&!keypre[2]&&!keypre[3])
			{
				if(keypre[0]==K_ADD||keypre[0]==K_SUB||keypre[0]==K_MUL||keypre[0]==K_DIV||keypre[0]==K_ENTER)
				{
					Beep();
					if(pos!=0)
					{
						temp=atof(number);
						if(lastop==0)
							Last_value=temp;
						else
							Current_value=temp;
					}
					pos=0;
					if(lastop!=0)
						Calculator_Operate(lastop);
					if(keypre[0]!=K_ENTER)
						lastop=keypre[0];
					else
						lastop=0;		
				}
				switch(keypre[0])
				{
				case K_CLEAR:
					Beep();
					pos=0;
					lastop=0;
					Last_value=0;
					Current_value=0;
					Set_Lcd2_Buf(0,0,7);
					Set_Lcd3_Buf(0,1,6);
					Set_Lcd2_Buf('0',1,1);
					Set_Lcd3_Buf('0',0,1);
					for(i=0;i<7;i++)
						number[i]=0;
					break;
				case K_00:
					Beep();
					numeric='0';
					if(pos<7&&pos!=0)
					{
						if(pos<6||point2_on)
						{
							Lcd_Buf_Left_Shift(lcd2_buf,6,numeric,1);
							number[pos++]=numeric;
						}
						if(point2_on)
							point2_pos++;
					}
					if(pos<7&&pos!=0)
					{
						if(pos<6||point2_on)
						{
							Lcd_Buf_Left_Shift(lcd2_buf,6,numeric,1);
							number[pos++]=numeric;
						}
						if(point2_on)
							point2_pos++;
					}	
					break;
				case K_9:numeric++;
				case K_8:numeric++;
				case K_7:numeric++;
				case K_6:numeric++;
				case K_5:numeric++;
				case K_4:numeric++;
				case K_3:numeric++;
				case K_2:numeric++;
				case K_1:numeric++;
				case K_0:numeric+='0';
					Beep();
					if(pos<7)
					{
						if(pos==0)
						{
							if(lastop==0)
							{
								Last_value=0;
								Current_value=0;
								Set_Lcd3_Buf(0,1,6);
								Set_Lcd3_Buf('0',0,1);	
							}
							Set_Lcd2_Buf(0,0,7);
							lcd2_buf[1]=numeric;
							for(i=0;i<7;i++)
								number[i]=0;
							if(point2_on||numeric!='0')
								number[pos++]=numeric;
						}
						else if(pos!=0)
						{	
							if(pos<6||point2_on)
							{
								Lcd_Buf_Left_Shift(lcd2_buf,6,numeric,1);
								number[pos++]=numeric;
							}
							if(point2_on)
								point2_pos++;
						}
					}
					break;
				}
			}
			else if(keypre[1])
			{
				Beep();	
				if(!point2_on)
				{
					point2_on=TRUE;
					point2_pos=1;
					if(pos==0)
					{
						number[pos++]='0';
						number[pos++]='.';
					}	
					else
						number[pos++]='.';
				}
			}
			else if(keypre[3])
			{
				Beep();
				mode=Sales_mode;
			}
			keydone=TRUE;
		}
		if(half_sec)
		{
			half_sec=FALSE;
			for(i=0;i<5;i++)
				Set_Lcd1_Buf(Char_buf[i+1],i,1);
			ch=Char_buf[6];
			for(i=6;i>0;i--)
				Char_buf[i]=Char_buf[i-1];	
			Char_buf[0]=ch;
			Display();			
		}
	}
}
/**********************************
********Reports mode***************
**********************************/
VOID Reports_Key_Processing()
{
	if(keyprocess)
	{
		keydone=FALSE;
		keyprocess=FALSE;
		numeric=0;
		if(!keypre[1]&&!keypre[2]&&!keypre[3])
		{
			switch(keypre[0])
			{
			case K_ADD:
				Beep();
				switch(menu_item)
				{
				case MENU_1:menu_item++;Set_Lcd3_Buf(0,0,7);break;
				case MENU_1_1:menu_item++;Set_Lcd3_Buf(0,0,7);break;
				case MENU_1_2:menu_item++;Set_Lcd3_Buf(0,0,7);break;
				case MENU_1_2_1:menu_item++;Set_Lcd3_Buf(0,0,7);break;
				case MENU_1_2_2:break;
				case MENU_1_2_2_0:break;
				case MENU_1_3:menu_item++;Set_Lcd3_Buf(0,0,7);break;
				case MENU_1_4:break;
				case MENU_2:menu_item++;Set_Lcd3_Buf(0,0,7);break;
				case MENU_2_1:menu_item++;Set_Lcd3_Buf(0,0,7);break;
				case MENU_2_2:menu_item++;Set_Lcd3_Buf(0,0,7);break;
				case MENU_2_2_1:menu_item++;Set_Lcd3_Buf(0,0,7);break;
				case MENU_2_2_2:break;
				case MENU_2_2_2_0:break;
				case MENU_2_3:break;
				case MENU_3:break;
				case MENU_3_1:menu_item++;Set_Lcd3_Buf(0,0,7);break;
				case MENU_3_2:menu_item++;Set_Lcd3_Buf(0,0,7);break;
				case MENU_3_2_1:menu_item++;Set_Lcd3_Buf(0,0,7);break;
				case MENU_3_2_2:break;
				case MENU_3_2_2_0:break;
				case MENU_3_3:break;
				}
				break;
			case K_SUB:
				Beep();
				menu_item--;
				if(menu_item%10==0)
					menu_item++;
				else
					Set_Lcd3_Buf(0,0,7);
				break;
			case K_ENTER:
				Beep();
				if(menu_item==MENU_1||menu_item==MENU_2||menu_item==MENU_3||menu_item==MENU_1_2||menu_item==MENU_2_2||menu_item==MENU_3_2||menu_item==MENU_1_2_2||menu_item==MENU_2_2_2||menu_item==MENU_3_2_2)
					menu_item=menu_item*10+1;
				else
				{
					switch(menu_item)
					{
					case MENU_1_1:
						ET1=0;
						report_type=TOTAL_ALL_MONEY;
						Set_Total_Price_Display(Report_Total());
						ET1=1;
						break;
					case MENU_1_2_1:
						ET1=0;
						report_type=TOTAL_ALL_PLU_MONEY;
						Set_Total_Price_Display(Report_Total());
						ET1=1;
						break;
					case MENU_1_2_2_0:
						ET1=0;
						PLU_no=Get_PLU_no_from_display_buf();
						if(PLU_no==0)
						{
							Set_Lcd3_Buf(0,0,7);
							ET1=1;
							break;
						}
						report_type=TOTAL_SEL_PLU_MONEY;
						Set_Total_Price_Display(Report_Total());
						ET1=1;
						break;
					case MENU_1_3:
						ET1=0;
						report_type=TOTAL_ALL_MANUL_MONEY;
						Set_Total_Price_Display(Report_Total());
						ET1=1;
						break;
					case MENU_1_4:
						ET1=0;
						report_type=TOTAL_ALL_NUMBER_MONEY;
						Set_Total_Price_Display(Report_Total());
						ET1=1;
						break;
					case MENU_2_1:
						ET1=0;
						report_type=TOTAL_ALL_WEIGHT;
						Set_Total_Weight_Display(Report_Total());
						ET1=1;
						break;
					case MENU_2_2_1:
						ET1=0;
						report_type=TOTAL_ALL_PLU_WEIGHT;
						Set_Total_Weight_Display(Report_Total());
						ET1=1;
						break;
					case MENU_2_2_2_0:
						ET1=0;
						PLU_no=Get_PLU_no_from_display_buf();
						if(PLU_no==0)
						{
							Set_Lcd3_Buf(0,0,7);
							ET1=1;
							break;
						}
						report_type=TOTAL_SEL_PLU_WEIGHT;
						Set_Total_Weight_Display(Report_Total());
						ET1=1;
						break;
					case MENU_2_3:
						ET1=0;
						report_type=TOTAL_ALL_MANUL_WEIGHT;
						Set_Total_Weight_Display(Report_Total());
						ET1=1;
						break;
					case MENU_3_1:
						ET1=0;
						report_type=TOTAL_ALL_NUMBER;
						Set_Total_Number_Display(Report_Total());
						ET1=1;
						break;
					case MENU_3_2_1:
						ET1=0;
						report_type=TOTAL_ALL_PLU_NUMBER;
						Set_Total_Number_Display(Report_Total());
						ET1=1;
						break;
					case MENU_3_2_2_0:
						ET1=0;
						PLU_no=Get_PLU_no_from_display_buf();
						if(PLU_no==0)
						{
							Set_Lcd3_Buf(0,0,7);
							ET1=1;
							break;
						}
						report_type=TOTAL_SEL_PLU_NUMBER;
						Set_Total_Number_Display(Report_Total());
						ET1=1;
						break;
					case MENU_3_3:
						ET1=0;
						report_type=TOTAL_ALL_MANUL_NUMBER;
						Set_Total_Number_Display(Report_Total());
						ET1=1;
						break;
					}
				}	
				break;
			case K_CLEAR:
				Beep();
				Set_Lcd3_Buf(0,0,7);
				menu_item=MENU_1;
				report_type=0;
				PLU_no=0;
				break;
			case K_00:
				Beep();
				numeric='0';
				if(menu_item==MENU_1_2_2_0||menu_item==MENU_2_2_2_0||menu_item==MENU_3_2_2_0)
				{
					Lcd_Buf_Left_Shift(lcd2_buf,2,numeric,0);
					Lcd_Buf_Left_Shift(lcd2_buf,2,numeric,0);
					PLU_no=Get_PLU_no_from_display_buf();
				}
				break;
			case K_9:numeric++;
			case K_8:numeric++;
			case K_7:numeric++;
			case K_6:numeric++;
			case K_5:numeric++;
			case K_4:numeric++;
			case K_3:numeric++;
			case K_2:numeric++;
			case K_1:numeric++;
			case K_0:numeric+='0';
				Beep();
				if(menu_item==MENU_1_2_2_0||menu_item==MENU_2_2_2_0||menu_item==MENU_3_2_2_0)
				{
					Lcd_Buf_Left_Shift(lcd2_buf,2,numeric,0);
					PLU_no=Get_PLU_no_from_display_buf();
				}
				break;
			}
		}
		else if(keypre[1])
		{
			if(keypre[0]==K_SUB)
			{
				Beep();
				if(menu_item>10)
				{
					menu_item=menu_item/10;
					Set_Lcd3_Buf(0,0,7);
					PLU_no=0;
				}			
			}		
		}
		else if(keypre[3])
		{
			Beep();
			mode=Sales_mode;
		}
		keydone=TRUE;
	}
}

VOID Reports()
{
	INT8 data i;
	BYTE ch,Char_buf[7]={0,'t','r','o','P','E','r'};
	ET1=0;
	PLU_no=0;
	report_type=0;
	menu_item=MENU_1;
   	Cls_Icon_Buf();
	Set_Lcd3_Buf(0,0,7);
	for(i=0;i<5;i++)
		Set_Lcd1_Buf(Char_buf[i+1],i,1);
	ET1=1;
	while(mode==Reports_mode)
	{
		Reports_Key_Processing();
		switch(menu_item)
		{
		case MENU_1:
			Set_TOTAL_P_On_Lcd2_Display();
			break;	
		case MENU_1_1:
			Set_TOTAL_On_Lcd2_Display();
			break;	
		case MENU_1_2:
			Set_PLUS_On_Lcd2_Display();
			break;
		case MENU_1_2_1:
			Set_TOTAL_On_Lcd2_Display();
			break;	
		case MENU_1_2_2:
			Set_SEL_PLU_On_Lcd2_Display();
			break;
		case MENU_1_2_2_0:
			Set_SEL_PLU_no_Display(PLU_no);
			break;
		case MENU_1_3:
			Set_INPUT_PRICE_On_Lcd2_Display();
			break;
		case MENU_1_4:
			Set_QUANTITY_On_Lcd2_Display();
			break;
		case MENU_2:
			Set_TOTAL_U_On_Lcd2_Display();
			break;
		case MENU_2_1:
			Set_TOTAL_On_Lcd2_Display();
			break;
		case MENU_2_2:
			Set_PLUS_On_Lcd2_Display();
			break;
		case MENU_2_2_1:
			Set_TOTAL_On_Lcd2_Display();
			break;
		case MENU_2_2_2:
			Set_SEL_PLU_On_Lcd2_Display();
			break;
		case MENU_2_2_2_0:
			Set_SEL_PLU_no_Display(PLU_no);
			break;
		case MENU_2_3:
			Set_INPUT_PRICE_On_Lcd2_Display();
			break;
		case MENU_3:
			Set_TOTAL_N_On_Lcd2_Display();
			break;
		case MENU_3_1:
			Set_TOTAL_On_Lcd2_Display();
			break;
		case MENU_3_2:
			Set_PLUS_On_Lcd2_Display();
			break;
		case MENU_3_2_1:
			Set_TOTAL_On_Lcd2_Display();
			break;
		case MENU_3_2_2:
			Set_SEL_PLU_On_Lcd2_Display();
			break;
		case MENU_3_2_2_0:
			Set_SEL_PLU_no_Display(PLU_no);
			break;
		case MENU_3_3:
			Set_INPUT_PRICE_On_Lcd2_Display();
			break;
		}
		if(half_sec)
		{
			half_sec=FALSE;
			for(i=0;i<5;i++)
				Set_Lcd1_Buf(Char_buf[i+1],i,1);
			ch=Char_buf[6];
			for(i=6;i>0;i--)
				Char_buf[i]=Char_buf[i-1];	
			Char_buf[0]=ch;
			Display();			
		}
	}
}
/**********************************
********Download mode**************
**********************************/
VOID Download()
{
	INT16 data i;
	Set_Lcd1_Buf(0,4,1);
	Set_Lcd1_Buf('L',3,1);
	Set_Lcd1_Buf('o',2,1);
	Set_Lcd1_Buf('A',1,1);
	Set_Lcd1_Buf('d',0,1);
	Set_Lcd2_Buf(0,3,4);
	Set_Lcd2_Buf('P',2,1);
	Set_Lcd2_Buf('L',1,1);
	Set_Lcd2_Buf('U',0,1);
	Set_Lcd3_Buf(0,0,7);
	Cls_Icon_Buf();
	point3_pos=0;
	Display();
	if(Package_Header_Check())
	{
		ET0=0;
		ET1=0;
		for(i=1;i<=300;i++)
		{
			Receive_PLU_Data_from_PC();
			Set_INPLUT_PLU_no_Display(i);
			Display();
			PLU_Save(i);
		}
		ET1=1;
		ET0=1;
		if(Package_EOF_Check())
		{
			Set_Lcd2_Buf(0,6,1);
			Set_Lcd2_Buf('5',5,1);
			Set_Lcd2_Buf('U',4,1);
			Set_Lcd2_Buf('C',3,1);
			Set_Lcd2_Buf('C',2,1);
			Set_Lcd2_Buf('E',1,1);
			Set_Lcd2_Buf('5',0,1);
			Display();
			Beep();
			Wait_n_s(2);
			mode=Power_down_mode;
		}
		else
		{
			Set_RS232_On_Lcd1_Display();
			Display();
			Wait_n_s(2);	
			unit_price_entered=FALSE;
			mode=Sales_mode;
		}		
	}
	else
	{
		Set_RS232_On_Lcd1_Display();
		Display();
		Wait_n_s(2);
		unit_price_entered=FALSE;
		mode=Sales_mode;
	}		
}
/*********************************************/
// Author: henny
// Date: 2006/6/1
// Error Message:
// 	1.init0: initial zero error
// 	2.Err1: no stable
// 	3.Over: over maximum capacity
// 	4.rs232: communicate error
// 	5.Adc: adc data error
//	6.EEP: eeprom data error
// 	6.NOEEP: no eeprom
// 	7.NOCAL: no calibrated
/*********************************************/

⌨️ 快捷键说明

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