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

📄 12232_demo.c

📁 这是一个试验箱检测系统的代码
💻 C
📖 第 1 页 / 共 3 页
字号:
		LCD_WCMDR = X;			/*命令输入到数据口 */
//		Delay(2);
	}


/********************************************************/
/*根据设定的坐标数据,定位LCM上的下一个操作单元位置	*/
/********************************************************/

void LocatexyL(void)//左半屏
	{
		unsigned char  x,y;
		x = col&0x3F|SETX;		/* 页col.and.0x3f.or.setx	*/
		y = row&0x07|SETY;		/* 行row.and.0x07.or.sety	*/
		WrcmdL(x);
		WrcmdL(y);
   }
void LocatexyR(void)//右半屏
	{
		unsigned char  x,y;
		x = col&0x3F|SETX;		/* 页col.and.0x3f.or.setx	*/
		y = row&0x07|SETY;		/* 行row.and.0x07.or.sety	*/
	 	WrcmdR(x);		
		WrcmdR(y);
   }
/********************************/
/*液晶屏初始化			*/
/********************************/

void Lcminit(void)
	{
		cbyte = DISPOFF;	/*关闭显示屏	*/
		WrcmdL(cbyte);
		WrcmdR(cbyte);
		cbyte = DISPON;		/*打开显示屏	*/
		WrcmdL(cbyte);
		WrcmdR(cbyte);
		cbyte = DISPFIRST;	/*定义显示起始行为零	*/
		WrcmdL(cbyte);
		WrcmdR(cbyte);
		Lcmcls();          /*清屏		*/
		col=0;		
		row=0;
		LocatexyL();
		LocatexyR();
	}

/*************************** 点阵模块****************************************/
/*====================  演示程序  =======================*/
void demo(uchar *s1,uchar *s2)
{
		uint tmp,tp;
		uchar j,i,col1,col2,tab1,tab2,disp_tmp1,disp_tmp2,tmp1,tmp2;
		tmp=0;
		while(tmp<108)
		{

			tp=tmp;
			for(i=0;i<8;i++)
			{	
				col1=0x80;
				P1=0xff;
				P3=0xff	;		
				for(j=0;j<8;j++)
				{
					disp_tmp1=*(s1+tmp);
					disp_tmp2=*(s2+tmp);
					tmp1=disp_tmp1^0xff;
					tmp2=disp_tmp2^0xff;
					col2=col1^0xff;
					P3=col2;
					P0=tmp1;
					P2=tmp2;  
					tmp++;
					col1>>=1;
					delay(1);
				}
				delay(1);
				P3=0xff;
				P1=0xff;
				tab1=0x80;					
				for(j=0;j<8;j++)
				{
				disp_tmp1=*(s1+tmp);
				disp_tmp2=*(s2+tmp);
				tmp1=disp_tmp1^0xff;
			    tmp2=disp_tmp2^0xff;
				tab2=tab1^0xff;
				P1=tab2;
				P0=tmp1;
				P2=tmp2;  
				tmp++;
			    tab1>>=1;
				delay(1);
				}
				tmp=tp;
			}
			tmp+=1;

  }
 
}

 /************************键盘模块******************************/

 void Send_data(uchar Sdata)				//发送数据
{
	uchar i;
	for(i=0;i<8;i++)
	{
		key_clk=0;
		key_dat=Sdata&0x80;
		_nop_();
		_nop_();
		key_clk=1;
		_nop_();
		_nop_();
		Sdata<<=1;
	} 

}

void key_led(void)						   //键盘显示
{
	uchar scan_tmp,key_tmp,i;
	uint time;
	bit tmp;
	scan_tmp=0;
	while(time<5000)
	{

			for(i=0;i<8;i++)
			{
				time++;
				scan_tmp++;
				key_tmp=scan_tmp;					 //改变A B C 的值产生扫描码
				key_A=key_tmp&0x01;
				key_B=key_tmp&0x02;
				key_C=scan_tmp&0x04;
				
				scan_tmp=scan_tmp&0x07;
				tmp=key_down1;
				delay(1);
				if(tmp&1==1) continue;	 			//无键返回

				switch(scan_tmp)						 //	输出查表
				{	
				case 0x00:Send_data(0xf9);break;
				case 0x01:Send_data(0xa4);break;
				case 0x02:Send_data(0xb0);break;
				case 0x03:Send_data(0x99);break;
				case 0x04:Send_data(0x92);break;
				case 0x05:Send_data(0x82);break;
				case 0x06:Send_data(0xf8);break;
				case 0x07:Send_data(0x00);break;
				default:break;
				}
			
			delay(10);
			Send_data(0xff);
		}		
	}
}	


/*************************  蜂鸣器模块  ************************************/
/*====================	发声	====================*/
void play(uchar del)
{
	uchar t;
	for(t=0;t<del;t++)
	{	}
	Speak=!Speak;
}

void Play_dingdong(void)
{
	uint num;
			for(num=0;num<3000;num++)
			{
			  	play(26);
			}
			for(num=0;num<2000;num++)
			{
				play(65);
			}



}

/*******************************A/D,D/A转换模块*************************/

void  DA_test(void)				//向DAC0832写入正弦波数据  从ADC_in0C0809读出数据
{
	uchar i,tmp;

	for(i=0;i<24;i++)
	{	tmp=tab_dac[i];
		DA=tmp;	
		i++;
		delay(500);

	}
}

void AD_test(void)				//向DAC0832写入正弦波数据  从ADC_in0C0809读出数据
{
	uchar ad_result;
	uchar i;
	uint time,ad_int;
	uchar tab_dac_dat[5];
	ADC_in0=0;						//启动ADC_in0_IN0
	while(1)   						//等待	ADC 转换结束
	{
		if(ADC_EOC)	break;
		else time++;
		if(time==40000)
			{
				LCD_WriteCmd(0x01);			//清屏
				delay(10);
				LCD_WriteStr("出错",2);	//液晶屏模块
				return;	
			}
	}					
	ad_result=ADC_in0;
	ad_int=(uint)(ad_result*19);
	for(i=0;i<4;i++)
	{
		tab_dac_dat[4-i]=ad_int%10+'0';
		ad_int=ad_int/10;
	}

		tab_dac_dat[0]=tab_dac_dat[1];
		tab_dac_dat[1]='.';
//		LCD_WriteCmd(0x01);			//清屏
//		delay(10);
		LCD_WriteCmd(0x80);
		for (i=0;i<5;i++)
		{
			LCD_WriteDat(tab_dac_dat[i]); 
			delay(50);
			
		}
		return;	

}
/*==========================外部中断0(菜单键)==========================*/

void int1(void) interrupt 2						//菜单键
{
//	 
	 delay(500);
	 switch(sys_state)
	 {

	  case 1:	
				LCD_WriteCmd(0x01);				//清屏
				delay(10);
				LCD_WriteCmd(0x80);   			//写入显示的地址
				LCD_WriteStr("液晶屏模块",5);	//液晶屏模块

				LCD_WriteCmd(0x87);
				LCD_WriteDat(0xa1);		 		//<-
				LCD_WriteDat(0xfb);

				LCD_WriteCmd(0x90);   			//写入显示的地址
				LCD_WriteStr("键盘模块",4);		//键盘模块
				sys_state=2;
				key_state=1; 					//等待确认
				break ;		
		case 2:	
				LCD_WriteCmd(0x01);				//清屏
				delay(10);
				LCD_WriteCmd(0x80);   			//写入显示的地址
				LCD_WriteStr("键盘模块",4);		//键盘模块

				LCD_WriteCmd(0x87);
				LCD_WriteDat(0xa1);		 		//<-
				LCD_WriteDat(0xfb);

				LCD_WriteCmd(0x90);   			//写入显示的地址
				LCD_WriteDat('A');				//A/D,D/A转换
				LCD_WriteDat(0x2f);
				LCD_WriteDat('D');
				LCD_WriteDat(',');
				LCD_WriteDat(' ');
				LCD_WriteDat('D');
				LCD_WriteDat(0x2f);
				LCD_WriteDat('A');
				LCD_WriteStr("转换",2);
				sys_state=3;
				key_state=1; 					//等待确认	
				break;

	 	case 3:	
				LCD_WriteCmd(0x01);				//清屏
				delay(10);
				LCD_WriteCmd(0x80);   			//写入显示的地址
				LCD_WriteDat('A');
				LCD_WriteDat(0x2f);				//A/D,D/A转换
				LCD_WriteDat('D');
				LCD_WriteDat(',');
				LCD_WriteDat(' ');
				LCD_WriteDat('D');
				LCD_WriteDat(0x2f);
				LCD_WriteDat('A');
				LCD_WriteStr("转换",2);

				LCD_WriteCmd(0x87);
				LCD_WriteDat(0xa1);				 //<-
				LCD_WriteDat(0xfb);	

				LCD_WriteCmd(0x90);
				LCD_WriteStr("步进电机模块",6);	//步进电机模块
				sys_state=4;
				key_state=1; 					//等待确认
				break;

	 	case 4:	
				LCD_WriteCmd(0x01);				//清屏
				delay(10);
				LCD_WriteCmd(0x80);
				LCD_WriteStr("步进电机模块",6);	//步进电机模块

				LCD_WriteCmd(0x87);
				LCD_WriteDat(0xa1);		 		//<-
				LCD_WriteDat(0xfb);

				LCD_WriteCmd(0x90);
				LCD_WriteStr("扬声器",3);
				sys_state=5;
				key_state=1; 					//等待确认
				break;
	   case 5: 	
	   			LCD_WriteCmd(0x01);				//清屏
				delay(10);
				LCD_WriteCmd(0x80);
				LCD_WriteStr("扬声器",3);

				LCD_WriteCmd(0x87);
				LCD_WriteDat(0xa1);		 		//<-
				LCD_WriteDat(0xfb);

				LCD_WriteCmd(0x90);   			//写入显示的地址
				LCD_WriteStr("点阵模块",4);	//液晶屏模块
				sys_state=6;
				key_state=1; 					//等待确认
				break;
	   case 6: 	
	   			LCD_WriteCmd(0x01);				//清屏
				delay(10);
				LCD_WriteCmd(0x80);
				LCD_WriteStr("点阵模块",4);

				LCD_WriteCmd(0x87);
				LCD_WriteDat(0xa1);		 		//<-
				LCD_WriteDat(0xfb);

				LCD_WriteCmd(0x90);   			//写入显示的地址
				LCD_WriteStr("液晶屏模块",5);	//液晶屏模块
				sys_state=1;
				key_state=1; 					//等待确认
				break;
	 	default:break ;
	 }



}
/*=====================================================================*/
/*===========================外部中断1(确认键)=========================*/

void int0(void) interrupt 0						    //确认键
{
	 uchar tmp;
	 bit  flag;

⌨️ 快捷键说明

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