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

📄 main.c

📁 此为一个详细的程序源代码 由单片机PIC16F873检测电平
💻 C
📖 第 1 页 / 共 2 页
字号:
					Enable();
				
					for(i=0;i<8;i++)		
						WriteLCD(Bottom[i]);
				}
				else if(PowerFlag)
				{
					DATA = 0x01;
					Enable();
					DATA = Addr_LCD_Top;
					Enable();
					for(i=0;i<8;i++)
					{
						WriteLCD(TOP_PowerInput[i]);
					}
					
					DATA = Addr_LCD_Bottom+2;
					Enable();
					for(i=0;i<PowerInCount;i++)
						WriteLCD('.');
					DATA = Addr_LCD_Bottom+9;
					Enable();
				}
				else if(PowerLowFlag)		//低电压报警
				{
					DATA = Addr_LCD_Top;
					Enable();
					for(i=0;i<8;i++)
					{
						WriteLCD(TOP_POWER[i]);
					}
					DATA = Addr_LCD_Bottom;
					Enable();
					for(i=0;i<8;i++)
					{
						WriteLCD(BTM_LOW[i]);
					}
				}
				else if(ErrorFlag)			//故障
				{
					DATA = Addr_LCD_Top;
					Enable();
					for(i=0;i<8;i++)
					{
						Top[i] = TOP_ERROR[i];
						WriteLCD(Top[i]);
					}
				}
	
				else if(MENU_Flag)			//菜单显示
				{
					if(!SonMenuFlag)
					{
						DATA = Addr_LCD_Top;
						Enable();
						for(i=0;i<8;i++)
							WriteLCD(TOP_MENU[i]);
							
						DATA = Addr_LCD_Bottom;
						Enable();
						
						switch(UPDOWN)
						{
							case 1:
								for(i=0;i<8;i++)
									Bottom[i] = MENU_1[i];
								break;
							case 2:
								for(i=0;i<8;i++)
									Bottom[i] = MENU_2[i];
								break;
							case 3:
								for(i=0;i<8;i++)
									Bottom[i] = MENU_3[i];
								break;
							case 4:
								for(i=0;i<8;i++)
									Bottom[i] = MENU_4[i];
								break;
							case 5:
								for(i=0;i<8;i++)
									Bottom[i] = MENU_5[i];
								break;
							case 6:
								for(i=0;i<8;i++)
									Bottom[i] = MENU_6[i];
								break;
							default:
								break;
						}
						
						for(i=0;i<8;i++)
							WriteLCD(Bottom[i]);
							
						DATA = Addr_LCD_Bottom;
						Enable();
					}
					else	//子菜单
					{
						switch(UPDOWN)
						{
							case 1:	//warn
								Show_Warn();	
								DATA = Addr_LCD_Bottom+4;
								Enable();
							
								break;
							case 2: //time
								
								Show_Time();
								if(time_Menu_Flag==1)
									DATA = Addr_LCD_Top+1;
								else if(time_Menu_Flag==2)
									DATA = Addr_LCD_Top+4;
								else if(time_Menu_Flag==3)
									DATA = Addr_LCD_Top+7;
								else if(time_Menu_Flag==4)
									DATA = Addr_LCD_Bottom+1;
								else if(time_Menu_Flag==5)
									DATA = Addr_LCD_Bottom+4;
								else if(time_Menu_Flag==6)
									DATA = Addr_LCD_Bottom+7;
								else DATA = Addr_LCD_Bottom+8;
								Enable();
								
								break;
								
							case 3:	//zero
							
								DATA = 0x01;
								Enable();
								DATA = Addr_LCD_Bottom+2;
								Enable();							
								Top[0]=Zero>=100?(0x30+Zero/100):' ';
								Top[1]=Zero>=10?(0x30+Zero/10%10):' ';
								Top[2]=Zero%10+0x30;
								for(i=0;i<3;i++)
									WriteLCD(Top[i]);
								
								DATA = Addr_LCD_Top+2;
								Enable();							
								AD = Adresult_Vol.Int;
								Bottom[0]=AD>=100?(0x30+AD/100):' ';
								Bottom[1]=AD>=10?(0x30+AD/10%10):' ';
								Bottom[2]=AD%10+0x30;
								for(i=0;i<3;i++)
									WriteLCD(Bottom[i]);
								
								DATA = Addr_LCD_Bottom+4;
								Enable();
								
								break;
							case 4:	//biaoding
								
								DATA = 0x01;
								Enable();
								DATA = Addr_LCD_Top+2;
								Enable();							
								Top[0]=Biaoding.Int>=100?(0x30+Biaoding.Int/100):' ';
								Top[1]=Biaoding.Int>=10?(0x30+Biaoding.Int/10%10):' ';
								Top[2]=Biaoding.Int%10+0x30;
								for(i=0;i<3;i++)
									WriteLCD(Top[i]);
								
								DATA = Addr_LCD_Bottom+2;
								Enable();							
								AD = Adresult_Vol.Int;
								Bottom[0]=AD>=100?(0x30+AD/100):' ';
								Bottom[1]=AD>=10?(0x30+AD/10%10):' ';
								Bottom[2]=AD%10+0x30;
								for(i=0;i<3;i++)
									WriteLCD(Bottom[i]);
								
								DATA = Addr_LCD_Bottom+4;
								
								break;
							case 5:	//danwei
							
								DATA = 0x01;
								Enable();
								
								DATA = Addr_LCD_Top+2;
								Enable();
								
								for(i=2;i<7;i++)
								{
									WriteLCD(MENU_5[i]);
								}
								Bottom[0]=Bottom[1]=Bottom[2]=Bottom[3]=' ';
								if(Danwei==DW_LEL)
								{
									Bottom[4]='%';
									Bottom[5]=Bottom[7]='L';
									Bottom[6]='E';
								}
								else if(Danwei==DW_PPM)
								{
									Bottom[4]=' ';
									Bottom[5]=Bottom[6]='P';
									Bottom[7]='M';							
								}
								else if(Danwei==DW_VOL)
								{
									Bottom[4]=' ';
									Bottom[5]='V';
									Bottom[6]='O';
									Bottom[7]='L';							
								}
								else
									Danwei = 0xff;
								DATA = Addr_LCD_Bottom;
								Enable();			
								for(i=0;i<8;i++)		
									WriteLCD(Bottom[i]);
								
								DATA = Addr_LCD_Bottom;
								Enable();
								
								break;
							case 6:	//liangcheng
								Show_Liangcheng();
								
								DATA = Addr_LCD_Bottom+4;
								Enable();
								break;
								
							
						}
					}
				}
				else			//正常显示状态
				{
					switch(ShowFlag)
					{
						case 0:				//浓度
						
							Top[0]=Top[6]=Top[7] = ' ';
							Top[1]=nongdu>=1000?0x31:' ';
							Top[2]=0x30+nongdu/100%10;
							Top[3]=0x30+nongdu/10%10;
							Top[4]='.';
							Top[5]=0x30+nongdu%10;
							
							DATA = Addr_LCD_Top;
							Enable();
							for(i=0;i<8;i++)
								WriteLCD(Top[i]);
							Bottom[0]=Bottom[1]=Bottom[2]=Bottom[3]=' ';
							if(Danwei==DW_LEL)
							{
								Bottom[4]='%';
								Bottom[5]=Bottom[7]='L';
								Bottom[6]='E';
							}
							else if(Danwei==DW_PPM)
							{
								Bottom[4]=' ';
								Bottom[5]=Bottom[6]='P';
								Bottom[7]='M';							
							}
							else if(Danwei==DW_VOL)
							{
								Bottom[4]=' ';
								Bottom[5]='V';
								Bottom[6]='O';
								Bottom[7]='L';							
							}
							else
								Danwei = 0xff;
							DATA = Addr_LCD_Bottom;
							Enable();			
							for(i=0;i<8;i++)		
								WriteLCD(Bottom[i]);
								
							break;
						
	
						case 1:				//时间
				
							Show_Time();
								
							break;
						
						case 2:				// 报警点
							Show_Warn();
								
							break;
						case 3:				//电压值
							DATA = Addr_LCD_Top;	
							Enable();	
							for(i=0;i<8;i++)
								WriteLCD(TOP_POWER[i]);
							Bottom[0]=Bottom[1]=Bottom[6]=Bottom[7]= ' ';
							Bottom[2]=0x30+dianya/100%10;
							Bottom[3]='.';
							Bottom[4]=0x30+dianya/10%10;
							Bottom[5]=0x30+dianya%10;
							
							DATA = Addr_LCD_Bottom;
							Enable();			
							for(i=0;i<8;i++)		
								WriteLCD(Bottom[i]);
								
							break;
						case 4:				//量程
						
							Show_Liangcheng();
							
							DATA = Addr_LCD_Bottom+8;
							Enable();
							
							break;
					}
				}
				
				
			}
			else if(timeCount==65)			//时钟计数
			{	
				if(Time_Day==0)
					Time_Day=1;
				if(Time_Month>12||Time_Month==0)
					Time_Month=1;
				if(Time_Year<8)
					Time_Year=8;
									
				if(MENU_Flag&&SonMenuFlag&&UPDOWN==2)
				{;}
				else if(++Time_Second>=60)
				{
					Time_Second=0;
					if(++Time_Min>=60)
					{
						Time_Min = 0;
						
						if(++Time_Hour>=24)
						{
							Time_Hour=0;
							
							Time_Day++;
							
							switch(Time_Month)
							{
								case 1:
								case 3:
								case 5:
								case 7:
								case 8:
								case 10:
								case 12:
								
									if(Time_Day>31)
									{
										Time_Day=1;
										Time_Month++;										
									}
									break;
								case 4:
								case 6:
								case 9:
								case 11:
									if(Time_Day>30)
									{
										Time_Day=1;
										Time_Month++;
									}
									break;
								case 2:
								
									if(Time_Year%400==0||(Time_Year%4==0&&Time_Year%100!=0))
									{
										if(Time_Day>29)
										{
											Time_Day=1;
											Time_Month++;
										}
									
									}
									else
									{
										if(Time_Day>28)
										{
											Time_Day=1;
											Time_Month++;
										}
									}
									break;	
								default:
									Time_Month = 1;	
									break;
							}
							
						}
					}
				}
			}
			else if(timeCount==30)			//AD转换
			{
				ADFlag =!ADFlag;
				if(ADFlag)
				{
					ADIN(0x81,0x85);		//AN0,Vref=AN3
					while(1)
					{
						if(ADIF)
							break;
					}
					ADIF=0;
					Adresult_Vol.Char[0]=ADRESL;
					Adresult_Vol.Char[1]=ADRESH;
				}
				else
				{
					ADIN(0x99,0x84);		//AN3,Vref=VDD
					while(1)
					{
						if(ADIF)
							break;
					}
					ADIF=0;
					Adresult_Power.Char[0]=ADRESL;
					Adresult_Power.Char[1]=ADRESH;
				}
				
			}
		
			else if(timeCount==50)			//背光计数
			{
				if(time_Light_Count<10)
				{
					BL_LightOn;
					time_Light_Count++;
				}
				else BL_LightOff;
				
				if(WarnFlag)
				{
					Ctrl_Bell_On;
					Ctrl_Shake_On;
				}
				else
				{
					Ctrl_Bell_Off;
					Ctrl_Shake_Off;
				}
				
				if(time_Return<ReturnTime)
				{
					time_Return++;
				}
				else
				{
					if(MENU_Flag)
					{
						MENU_Flag = 0;
						SonMenuFlag = 0;
						UPDOWN = 0;
						Secret=0;
					}
					else
					{
						ShowFlag=0;
					}
				}
				
				
			}
			else if(timeCount==112)
			{
				Ctrl_Bell_Off;
				Ctrl_Shake_Off;
				if(PowerFlag)
					if(++PowerInCount>=5)
						PowerInCount=0;
				
			}
		}
	}
}


void Show_Warn()
{
	uchar i;
	DATA = Addr_LCD_Top;	
	Enable();	
	for(i=0;i<8;i++)
		WriteLCD(TOP_POINT[i]);
	Bottom[0]=Bottom[1]=Bottom[2]=Bottom[5]=Bottom[6]=Bottom[7]= ' ';
	Bottom[3]=0x30+WarnPoint/10;
	Bottom[4]=0x30+WarnPoint%10;
						
	DATA = Addr_LCD_Bottom;
	Enable();			
	for(i=0;i<8;i++)		
		WriteLCD(Bottom[i]);
}
void Show_Liangcheng()
{
	uchar i;
	DATA = 0x01;
	Enable();
								
	DATA = Addr_LCD_Top+1;
	Enable();
								
	for(i=2;i<=7;i++)
	{
		WriteLCD(MENU_6[i]);
	}
								
	DATA = Addr_LCD_Bottom+2;
	Enable();
								
	Bottom[0]=Liangcheng>=100?(0x30+Liangcheng/100):' ';
	Bottom[1]=Liangcheng>=10?(0x30+Liangcheng/10%10):' ';
	Bottom[2]=Liangcheng%10+0x30;
	for(i=0;i<3;i++)
		WriteLCD(Bottom[i]);
}
void Show_Time()
{
	uchar  i;
	DATA = Addr_LCD_Top;	
	Enable();	

	Top[0]=0x30+Time_Year/10%10;
	Top[1]=0x30+Time_Year%10;
	Top[2]='-';
	Top[3]=0x30+Time_Month/10;
	Top[4]=0x30+Time_Month%10;
	Top[5]='-';
	Top[6]=0x30+Time_Day/10;
	Top[7]=0x30+Time_Day%10;	
	for(i=0;i<8;i++)
	WriteLCD(Top[i]);

	Bottom[0]=0x30+Time_Hour/10;
	Bottom[1]=0x30+Time_Hour%10;
	Bottom[2]=':';
	Bottom[3]=0x30+Time_Min/10;
	Bottom[4]=0x30+Time_Min%10;
	Bottom[5]=':';
	Bottom[6]=0x30+Time_Second/10;
	Bottom[7]=0x30+Time_Second%10;
	DATA = Addr_LCD_Bottom;
	Enable();			
	for(i=0;i<8;i++)		
		WriteLCD(Bottom[i]);
}

⌨️ 快捷键说明

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