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

📄 yh_t3_new.c

📁 电子秤源程序。去年的心血啊!c语言编写的51单片机程序。
💻 C
📖 第 1 页 / 共 5 页
字号:
						//菜单三:波特率选择
						//dis_zone[0]=0xf2;	//LCD第一个字位显示”b“
						//dis_zone[1]=discode_low[4];	//LCD第一个字位显示”d“
						//dis_zone[4]=0xbe;
						//dis_zone[5]=0xbe;
						dis_zone[0]=discode_low[2];
						dis_zone[1]=discode_low[4];
						dis_zone[4]=discode_num[0];
						dis_zone[5]=discode_num[0];
						while(1)
						{																																	
							if(TARE==0)
								{
									delay_nms(50);
									if(TARE==0)
										{											
											while(!TARE);
											alarm(200);//按键音											
											count_baud++;
											if(count_baud==4)
													count_baud=0;
										}
								}	
							if(MENU==0)
								{
									delay_nms(50);
									if(MENU==0)
										{											
											while(!MENU);
											alarm(200);//按键音																																				
											buf_24c02_4B[2]=count_baud;
											break;
										}
								}							
							switch(count_baud)
							{
								case 0:	//dis_zone[2]=0x06;
												//dis_zone[3]=0x7c;
												dis_zone[2]=discode_num[1];
												dis_zone[3]=discode_num[2];
												break;//波特率1200
								case 1:	//dis_zone[2]=0x7c;
												//dis_zone[3]=0xc6;
												dis_zone[2]=discode_num[2];
												dis_zone[3]=discode_num[4];
												break;//波特率2400
								case 2:	//dis_zone[2]=0xc6;
												//dis_zone[3]=0xfe;
												dis_zone[2]=discode_num[4];
												dis_zone[3]=discode_num[8];
												break;//波特率4800
								case 3:	//dis_zone[2]=0xde;
												//dis_zone[3]=discode_low[2];
												dis_zone[2]=discode_num[9];
												dis_zone[3]=discode_num[6];
												break;//波特率9600	
								default:	//显示错误号“Err 8”
													alarm(800);
													dis_zone[0]=0x00;
													//dis_zone[1]=discode_cap[5];
													//dis_zone[2]=discode_low[18];
													//dis_zone[3]=discode_low[18];
													dis_zone[1]=discode_cap[5];
													dis_zone[2]=discode_low[18];
													dis_zone[3]=discode_low[18];
													dis_zone[4]=0x00;													
													dis_zone[5]=discode_num[8];
													display_1621();													
													//此处延时很长,目的是让使用者
													//看清楚错误号。
													delay_nms(5000);							
							}
							display_1621();
						}
						//菜单四:背光开关
						//dis_zone[0]=0xf2;
						//dis_zone[1]=discode_cap[12];
						dis_zone[0]=discode_low[2];
						dis_zone[1]=discode_cap[12];
						dis_zone[2]=0x00;
						while(1)
						{																						
							if(count_BL==0)
								{
									//显示“OFF”
									//dis_zone[3]=0xbe;
									//dis_zone[4]=discode_cap[6];
									//dis_zone[5]=discode_cap[6];
									dis_zone[3]=discode_cap[15];
									dis_zone[4]=discode_cap[6];
									dis_zone[5]=discode_cap[6];
								}
							else
								{
									//显示“ON”
									dis_zone[3]=0x00;
									//dis_zone[4]=0xbe;
									//dis_zone[5]=0xae;
									dis_zone[4]=discode_cap[15];
									dis_zone[5]=discode_low[14];
								}			
							display_1621();
							if(TARE==0)
								{
									delay_nms(50);
									if(TARE==0)
										{											
											while(!TARE);
											alarm(200);//按键音											
											count_BL++;
											if(count_BL==2)
													count_BL=0;
										}
								}	
							if(MENU==0)
								{
									delay_nms(50);
									if(MENU==0)
										{											
											while(!MENU);
											alarm(200);//按键音																																			
											buf_24c02_4B[3]=count_BL;
											break;
										}
								}
						}																							
						//菜单五:量程											
						//----------------------------------
						temp_range=buf_24c02_2L[0];
						f_cal=0;						
						while(1)
						{														
							if(TARE==0)
								{
									delay_nms(50);
									if(TARE==0)
										{											
											while(!TARE);
											alarm(200);//按键音											
											if(f_cal==0)
												{													
													temp_range=0;
													count_range=0;
													f_cal=1;
												}
											else
												{
													count_range++;
													if(count_range>9)
															count_range=0;													
													temp_range-=arr_BCD[5];
										 		  temp_range+=count_range;	
										 		}									 																						
										}
								}
							if(ZERO==0)
								{
									delay_nms(50);
									if(ZERO==0)
										{											
											while(!ZERO);
											alarm(200);//按键音
											if(f_cal==0)
												{													
													temp_range=0;
													f_cal=1;
												}											
											else
												{
													temp_range*=10;
													if(temp_range>=100000)
															temp_range%=100000;											
													count_range=0;
												}											
										}
								}
								//注意:此处可以优化一下,如果不想进行校准,																											
							if(MENU==0)
								{
									delay_nms(50);
									if(MENU==0)
										{											
											while(!MENU);
											alarm(200);//按键音
											break;																																																																																																																																																																
										}
								}																																				
							//-------------------------------------																										
							BIN_to_BCD(temp_range);
							dis_zone[0]=discode_cap[12];
							if((dis_zone[1]==0xbe)&&(count_point!=4))
							{
								dis_zone[1]=0x00;
								if((dis_zone[2]==0xbe)&&(count_point!=3))
									{
										dis_zone[2]=0x00;
										if((dis_zone[3]==0xbe)&&(count_point!=2))
											{
												dis_zone[3]=0x00;
												if((dis_zone[4]==0xbe)&&(count_point!=1))
														dis_zone[4]=0x00;										
											}
									}
							}
							if(count_point!=0)	
									dis_zone[5-count_point]|=0x01;
							display_1621();
						}
						//校准部分
						if(f_cal==1)
							{
								f_cal=0;
								//开始就显示“nLoAd”								
								dis_zone[0]=0x00;
								//dis_zone[1]=discode_low[14];
								//dis_zone[2]=discode_cap[12];
								//dis_zone[3]=discode_low[15];
								//dis_zone[4]=0xee;
								//dis_zone[5]=discode_low[4];
								dis_zone[1]=discode_low[14];
								dis_zone[2]=discode_cap[12];
								dis_zone[3]=discode_low[15];
								dis_zone[4]=discode_cap[1];
								dis_zone[5]=discode_low[4];
								display_1621();
								while(1)
								{
									if(MENU==0)
										{
											delay_nms(50);
											if(MENU==0)
												{													
													while(!MENU);
													alarm(200);													
													break;
												}
										}
								}
								i=0;
  							while(i<3)//最开始取3次AD值,存放在ad3数据缓冲区
  							{
  								cmd_5460(0x5e);//输入向状态寄存器写数据命令
									write_5460(0x00800000);//向5460中写入24位数据DRDY清零																				
									while(1)
									{	
										cmd_5460(0x1e);//输入读状态寄存器命令
										buf_5460=read_5460();//从5460读出24位数据查询DRDY																														
										if(((buf_5460)&0x00020000)==0x00020000)
  										{  								
  											cmd_5460(0x16);//读取平均电流寄存器									
												ad3[i]=read_5460();
												break;											
											}
									}
									i++;
								}
								ave3_ad=average3();
								i=0;
								while(i<13)
								{
									ad13[i].ad=ave3_ad;
									ad13[i].times=i;
									i++;
								}	
								while(1)
								{	
									rotate3();
									cmd_5460(0x5e);//输入向状态寄存器写数据命令
									write_5460(0x00800000);//向5460中写入24位数据DRDY清零																	
									while(1)
									{	
										cmd_5460(0x1e);//输入读状态寄存器命令
										buf_5460=read_5460();//从5460读出24位数据查询DRDY																			
										if(((buf_5460)&0x00020000)==0x00020000)
  										{  					
  											cmd_5460(0x16);//读取平均电流寄存器									
												ad3[0]=read_5460();
												break;											
											}							
									}
									//此处省略了超载判断模块,因为前面刚刚设定量程,
									//校准时超载的可能性不大。
									//over_load();
									ave3_ad=average3();
									i=0;
									while(i<13)
									{
										ad13[i].times++;
										if(ad13[i].times==13)
											{
												temp_j=i;
												ad13[i].ad=ave3_ad;
												ad13[i].times=0;
											}
										i++;
									}
									rotate();
									sort();
									BIN_to_BCD(ad13[6].ad);
									if((dis_zone[0]==0xbe)&&(count_point!=5))
										{
											dis_zone[0]=0x00;
											if((dis_zone[1]==0xbe)&&(count_point!=4))
												{
													dis_zone[1]=0x00;
													if((dis_zone[2]==0xbe)&&(count_point!=3))
														{
															dis_zone[2]=0x00;
															if((dis_zone[3]==0xbe)&&(count_point!=2))
																{
																	dis_zone[3]=0x00;
																	if((dis_zone[4]==0xbe)&&(count_point!=1))
																			dis_zone[4]=0x00;										
																}
														}
												}
										}																								
									display_1621();													
									if(MENU==0)
										{
											delay_nms(50);
											if(MENU==0)
												{													
													while(!MENU);
													alarm(200);
													delay_nms(500);
													if(f_cal==0)
														{																														
															buf_24c02_AD[0]=ad13[6].ad;
															//显示“LoAd”,提示使用者放置校准砝码
															dis_zone[0]=0x00;
															dis_zone[1]=0x00;
															//dis_zone[2]=discode_cap[12];
															//dis_zone[3]=discode_low[15];
															//dis_zone[4]=0xee;
															//dis_zone[5]=discode_low[4];
															//dis_zone[6]=0x00;
															dis_zone[2]=discode_cap[12];
															dis_zone[3]=discode_low[15];
															dis_zone[4]=discode_cap[1];
															dis_zone[5]=discode_low[4];
															display_1621();
															f_cal=1;				
															while(1)
															{
																if(MENU==0)
																	{
																		delay_nms(50);
																		if(MENU==0)
																			{																				
																				while(!MENU);
																				alarm(200);								
																				break;
																			}
																	}
															}
														}
													else
														{																
															buf_24c02_AD[1]=ad13[6].ad-buf_24c02_AD[0];
															break;
														}
												}
										}
								}
								//显示上次砝码的重量											
								//----------------------------------
								temp_FaMa=buf_24c02_2L[1];											
								f_FaMa=0;
								while(1)
								{														
									if(TARE==0)
										{
											delay_nms(50);
											if(TARE==0)
												{													
													while(!TARE);
													alarm(200);//按键音													
													if(f_FaMa==0)
														{															
															temp_FaMa=0;
															count_FaMa=0;
															f_FaMa=1;
														}
													else
														{
															count_FaMa++;
															if(count_FaMa>9)
																	count_FaMa=0;	
															temp_FaMa-=arr_BCD[5];
										  				temp_FaMa+=count_FaMa;

⌨️ 快捷键说明

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