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

📄 main.c

📁 这是运用c51单片机测试电压电流的完整工程项目文件
💻 C
📖 第 1 页 / 共 3 页
字号:
	dh(4,64,67,0);
	dh(4,80,68,0);
	dh(4,96,69,0);
	df(4,112,24,0);//:
}


#pragma disable
void History_Data_Display_Current()
{

	 Input_Serial_Number();
	 df(4,120,Serial_Number[0],1);
	 df(4,128,Serial_Number[1],0);
	 df(4,136,Serial_Number[2],0);
	 df(4,144,32,0);  //#
	 df(4,152,10,0);  //A
	 Number_Set(1);

	 History_Data_Display();


}
#pragma disable
void History()
{


  lcd_init() ; //清屏,我加的
  dh(0,52,24,0); //历史数据,我加的
	dh(0,68,32,0);
	dh(0,76,25,0);
	dh(0,92,32,0);
	dh(0,100,26,0);
	dh(0,116,32,0);
	dh(0,124,27,0);//我加的

  History_Data_Display_Current();

}


//显示设定前初始值
#pragma disable
void Disset()
{
	  df(4,16,TimeBuffer[0],1);          //设置年、月、日、时、分
		df(4,24,TimeBuffer[1],0);
		dh(4,32,39,0);
		df(4,48,TimeBuffer[2],0);
		df(4,56,TimeBuffer[3],0);
		dh(4,64,40,0);
		df(4,80,TimeBuffer[4],0);
		df(4,88,TimeBuffer[5],0);
		dh(4,96,41,0);
		df(4,112,TimeBuffer[6],0);
		df(4,120,TimeBuffer[7],0);
		dh(4,128,42,0);
		df(4,144,TimeBuffer[8],0);
		df(4,152,TimeBuffer[9],0);
		dh(4,160,43,0);
}

//时钟设置显示
#pragma disable
void Dis_SetTime()
{
	  lcd_init() ; //清屏
	  EA  =  0;
		ET0	=  0;
		EX0 = 0;
		EX1 = 0;
	  dh(0,52,28,0);              //显示"时 钟 设 置"标题
		dh(0,68,32,0);
		dh(0,76,29,0);
		dh(0,92,32,0);
		dh(0,100,30,0);
		dh(0,116,32,0);
		dh(0,124,31,0);
		Disset();     //显示设定前初始值

}

uchar code Yp[]={16,24,48,56,80,88,112,120,144,152};		//时钟设置界面时间列号
//修改时间函数
#pragma disable
void Time_Modify()

{
	uchar	 idata	KeyPosition = 0;  //该数据值 保存着要修改的 数值信息,光标起始位置在0列
	uchar  idata 	keytmp = 0,Keyc = 0;
	EA		=  0;
	ET0   =  0;

	while (1)
	{
		keytmp = namekey();     //读键值
		switch ( keytmp)
		{
			case 1 :     //上键,增加数字
						switch ( KeyPosition )//光标起始位置
						{
							case 0:   //光标在年的十位
									if ( TimeBuffer[0] == 9 )       //9+1=0
											TimeBuffer[0] = 0;
									else
											TimeBuffer[0]++;
									df(4,Yp[0],TimeBuffer[0],1);
									break;
							case 1:   //光标在年的个位
									if ( TimeBuffer[1] == 9 )
											TimeBuffer[1] = 0;
									else
											TimeBuffer[1]++;

									df(4,Yp[1],TimeBuffer[1],1);
									break;
							case 2:  //光标在月的十位
									if ( TimeBuffer[2] == 1 )   //月_十位=0,1
												TimeBuffer[2] = 0;
									else
												TimeBuffer[2]++;

									df(4,Yp[2],TimeBuffer[2],1);
									break;
							case 3:   //光标在月的个位
									if ( TimeBuffer[3] == 9 )
										TimeBuffer[3] = 0;
									else
										TimeBuffer[3]++;
									df(4,Yp[3],TimeBuffer[3],1);
									break;
							case 4:    //光标在日的十位
									if ( TimeBuffer[4] == 3 )  //日_十位=0,1,2,3
												TimeBuffer[4] = 0;
									else
												TimeBuffer[4]++;

									df(4,Yp[4],TimeBuffer[4],1);
									break;
							case 5:    //光标在日的个位
									if ( TimeBuffer[5] == 9 )
												TimeBuffer[5] = 0;
									else
												TimeBuffer[5]++;
									df(4,Yp[5],TimeBuffer[5],1);
									break;
							case 6:    //光标在时的十位
									if ( TimeBuffer[6] == 2 )    //时_十位=0,1,2
												TimeBuffer[6] = 0;
									else
												TimeBuffer[6]++;

									df(4,Yp[6],TimeBuffer[6],1);
									break;
							case 7:       //光标在时的个位
									if ( TimeBuffer[7] == 9 )
										TimeBuffer[7] = 0;
									else
										TimeBuffer[7]++;

									df(4,Yp[7],TimeBuffer[7],1);
									break;
							case 8:     //光标在分的十位
									if ( TimeBuffer[8] == 5 )   //分_十位=0,1,2,3,4,5
										TimeBuffer[8] = 0;
									else
										TimeBuffer[8]++;

									df(4,Yp[8],TimeBuffer[8],1);
									break;
							case 9:     //光标在分的个位
									if ( TimeBuffer[9] == 9 )
										TimeBuffer[9] = 0;
									else
										TimeBuffer[9]++;

									df(4,Yp[9],TimeBuffer[9],1);
									break;
						}
						break;

			case 2 :    //下键,减少数字
						switch ( KeyPosition )
						{
							case 0:   //光标在年的十位
									if ( TimeBuffer[0] == 0 )       //9+1=0
											TimeBuffer[0] = 9;
									else
											TimeBuffer[0]--;
									df(4,Yp[0],TimeBuffer[0],1);
									break;
							case 1:   //光标在年的个位
									if ( TimeBuffer[1] == 0 )
											TimeBuffer[1] = 9;
									else
											TimeBuffer[1]--;

									df(4,Yp[1],TimeBuffer[1],1);
									break;
							case 2:  //光标在月的十位
									if ( TimeBuffer[2] == 0 )   //月_十位=0,1
												TimeBuffer[2] = 1;
									else
												TimeBuffer[2]--;

									df(4,Yp[2],TimeBuffer[2],1);
									break;
							case 3:   //光标在月的个位
									if ( TimeBuffer[3] == 0 )
										TimeBuffer[3] = 9;
									else
										TimeBuffer[3]--;
									df(4,Yp[3],TimeBuffer[3],1);
									break;
							case 4:    //光标在日的十位
									if ( TimeBuffer[4] == 0 )  //日_十位=0,1,2,3
												TimeBuffer[4] = 3;
									else
												TimeBuffer[4]--;

									df(4,Yp[4],TimeBuffer[4],1);
									break;
							case 5:    //光标在日的个位
									if ( TimeBuffer[5] == 0 )
												TimeBuffer[5] = 9;
									else
												TimeBuffer[5]--;
									df(4,Yp[5],TimeBuffer[5],1);
									break;
							case 6:    //光标在时的十位
									if ( TimeBuffer[6] == 0 )    //时_十位=0,1,2
												TimeBuffer[6] = 2;
									else
												TimeBuffer[6]--;

									df(4,Yp[6],TimeBuffer[6],1);
									break;
							case 7:       //光标在时的个位
									if ( TimeBuffer[7] == 0 )
										TimeBuffer[7] = 9;
									else
										TimeBuffer[7]--;

									df(4,Yp[7],TimeBuffer[7],1);
									break;
							case 8:     //光标在分的十位
									if ( TimeBuffer[8] == 0 )   //分_十位=0,1,2,3,4,5
										TimeBuffer[8] = 5;
									else
										TimeBuffer[8]--;

									df(4,Yp[8],TimeBuffer[8],1);
									break;
							case 9:     //光标在分的个位
									if ( TimeBuffer[9] == 0 )
										TimeBuffer[9] = 9;
									else
										TimeBuffer[9]--;

									df(4,Yp[9],TimeBuffer[9],1);
									break;
						}
						break;

			case 3 :      //右移键
						if ( KeyPosition == 9)    //光标停留在分的个位
						{
								df(4,Yp[KeyPosition],TimeBuffer[KeyPosition],0);  //将该位数字正显
								KeyPosition		=	0;   //该值复0,即将光标移到首位(年之十位)
								df(4,Yp[KeyPosition],TimeBuffer[KeyPosition],1);//将首位数字反显
								break ;
						}
						else
							{
								df(4,Yp[KeyPosition],TimeBuffer[KeyPosition],0);  //将该位数字正显
							  KeyPosition++;
	              df(4,Yp[KeyPosition],TimeBuffer[KeyPosition],1);  //将该位数字反显
	              break;
            	}
			case  4:	Time_Dispose_Set();    //返回键,确认已设置的时间,并返回主菜单
				        lcd_init();
				        dierping();     //返回主菜单

		}
	}

}

//主菜单下按确定键处理程序
#pragma disable
void Enter_Dispose()
{
	switch(KeyCount)
	       {
			        case 0:
			        				Test();
			        				break;						//启动进入测试程序
			        case 1: History();
			        				break;						//进入历史查询
			        case 2:
											Dis_SetTime();  		//进入时钟设置
											Time_Modify();      	//修改时间函数
											break;
	       }

}

//主菜单读取键值1(上)、2(下)、7(确定键)
#pragma disable
void key_chuli_1(uchar key)   //按键处理1,键值为3、4、5、6均不起作用
{
  		switch(key)
         		{
							 case 1: 	if( KeyCount > 0 )             //光标上移
														KeyCount--;
												else
														KeyCount = 2;  //光标初始位置0减1等于2,到时间设定位置
														Menu_Move();
														break;

							 case 2: 	if( KeyCount < 2 )   //光标下移
														KeyCount++;
												else
														KeyCount = 0;//光标停留在时间设定位置,下移到测试位置2+1=0
														Menu_Move();
														break;

							 case 7:			Enter_Dispose();		//确定
							 							break;
         			}
}


//主菜单
void dierping()
{

				Real_Display_Time();           //显示实时时间
				Battery();        						//显示电池电量

			 // EA		=  1;    //开总中断
			 // ET0		=  0;
				Menu_Move(); //根据KeyCount值确定光标显示位置

	while (1)
		{
				  do
					  {                            //等待有键被按下
					     key=namekey();
					   }while(!key);      					 //key=0,表示无键按下,继续扫描键盘
					 key_chuli_1(key);           //有键被按下,转键盘处理1
		}


}

//第一屏,产品厂家信息
void diyiping()
{
		dh(0,52,0,0);
		dh(0,76,1,0);
		dh(0,100,2,0);
		dh(0,124,3,0);
		dh(3,24,4,0);
		dh(3,40,5,0);
		dh(3,56,6,0);
		dh(3,72,7,0);
		dh(3,88,8,0);
		dh(3,104,9,0);
		dh(3,120,10,0);
		dh(3,136,11,0);
		dh(3,152,12,0);
		dh(6,8,13,0);
		dh(6,24,14,0);
		dh(6,40,15,0);
		dh(6,56,16,0);
		dh(6,72,17,0);
		dh(6,88,18,0);
		dh(6,104,19,0);
		dh(6,120,20,0);
		dh(6,136,21,0);
		dh(6,152,22,0);
		dh(6,168,23,0);
}

//外部中断0处理程序,故障报警,高压模块保护
void Int0_Interrupt_Dispose() 	interrupt 0
{
	lcd_init();
	shipin_error1();
	shipin_error3();
	daCount = 0;
	Tlc5615(daCount);
	while(1);
}


//外部中断1处理,1mA电流到
void Int1_Interrupt_Dispose() 	interrupt 2
{

	daFlag	=	1;     //da送数标志位

}

void main()
 {
	 /*	P1=0XFF;
		P3=0XFF;
		EA  	= 0;  //关总中断
		ET0 	= 0;  //关定时器0中断
		EX0		=	0;  //关外部中断0
		EX1		=	0;  //关外部中断1
		IT0   = 0;  //外部中断0低电平触发,故障报警
		IT1		=	1;  //外部中断1下降沿触发,1mA电流到
		PX1      =  1; //中断优先级顺序:外部中断0(故障)→外部中断1(1mA到)→定时器0(时间电量)
		PX0      =  1;
		TMOD	=	0x01; //定时器0定时方式1
		TH0		=	0xdc; //定时器0置初值
		TL0		=	0x00;
		TR0		=	1;    //启动定时器0

		lcd_init(); //液晶屏初始化,清屏
		diyiping();   //产品信息显示
	 while(1)
	 {

		 if ( namekey()== 7)
			 	{
			 		lcd_init() ; 	//清屏
		  		dierping();   //主菜单
					break;
			}
	 }


     */

   Print_Data();
}

⌨️ 快捷键说明

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