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

📄 123.c

📁 这是一个波形选择菜单
💻 C
📖 第 1 页 / 共 2 页
字号:
#include <reg52.h>


#define uchar unsigned char
#define uint unsigned int
#define DATA_PORT P0	


sbit BUSY=P3^4;
sbit REQ=P3^5;
sbit RESET=P3^6;
sbit P10=P1^0;


/*-----------------------------------------------------------------------------------------------------------------	 */
uchar table0[]={0x30,0x25,0x1a,0x25,0x12,0x2e,0x2a,0x5d,0x31,0x01,0x34,0x51,0x12,0x2b,0x15,0x05};   //信号参数选择菜单
uchar table1[]={0x35,0x5d,0x2f,0x32,0x12,0x08};					//正弦波
uchar table2[]={0x28,0x5d,0x1d,0x27,0x12,0x08};					//三角波
uchar table3[]={0x17,0x1d,0x12,0x08,0x12,0x08};					//方波波
uchar table4[]={0x29,0x08,0x23,0x48,0x12,0x08};					//扫描波	 
/*---------------------------------------------------------------------------------------------------------------*/

uchar set0[]={0x26,0x15,0x22,0x2a};				// 频率
uchar set1[]={0x17,0x59,0x16,0x28};				//幅度
uchar set2[]={0x35,0x1c,0x1f,0x35,0x11,0x28}; 	//占空比
//uchar set3[]={0x2f,0x40,0x2e,0x1b};				//相位

/*---------------------------------------------------------------------------------------------------------*/
uchar num[]={0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39};	 //数值0~9
/*----------------------------------------------------------------------------------------------------------*/


/*********************************************************************************************/
uchar unit0[]={0x2e,0x30,0x30,0x48,0x7a};//.00Hz的ASC码
uchar unit1[]={0x56,0x70,0x70};//Vpp的ASC码
uchar unit2[]={0x2e,0x30,0x30,0x4b,0x48,0x7a};//.00KHz


/*************************************************************************************************/


/*************全局变量****************/
uchar temp=0; 	//主菜单选项选中标志
uchar temp1=0;	//一级子菜单选项选中标志
uint f=0;//频率
uchar range=0;//幅度
uchar duty=0;//占空比
uchar w=0;//单位为HZ,当w=1时单位为KHZ
uchar flag;//发送数据标志位

uchar	numf[5];		   //频率数值存放数组
uchar	numr[4];		   //幅度数值存放数组
uchar	numd[2];		   //占空比数值存放数组





/******LCD初始化***********/
void lcd_init()
{
	BUSY=1;
	REQ=0;
	RESET=1;
}

/*********写入数据***********/
void wr_lcd(uchar dat)
{
	while(BUSY);
	DATA_PORT=dat;
	REQ=1;
	while(BUSY);
	REQ=0;
}

/*******写指令和坐标******/
void wr_zhiling(uchar com,uchar addr_x,uchar addr_y)
{
	wr_lcd(com);
	wr_lcd(addr_x);
	wr_lcd(addr_y);
}
void delay(uint z)
{
	 uint x;
	 uchar y;
	 for(x=z;x>0;x--)
	 	for(y=110;y>0;y--);
}
void start()			  //开机画面
{
	uchar i;
	for(i=0;i<8;i++)
		{
			wr_zhiling(0xf0,0x02+i,1);
			wr_lcd(table0[2*i]);
			wr_lcd(table0[2*i+1]); 
		}
	

}
void  int_init()  // 中断初始化
{
	EX0=1;
	IT0=0;
	EA=1;
} 
void  serial_init()	//串口初始化
{
	TMOD=0X20;
	TH1=0XFD;
	TL1=0XFD;
	TR1=1;
	SCON=0X50;

}

/******************************主菜单显示*******************************************/
void main_menu(uchar a)            //主菜单显示
{
	uchar i,p;
	p=a;
	switch(p)
		{
			case 0:										   		//正弦波
				wr_lcd(0xf4);
				wr_lcd(0xfa);
				for(i=0;i<3;i++)
					{
						wr_zhiling(0xf0,i,0);
						wr_lcd(table1[2*i]);
						wr_lcd(table1[2*i+1]);
					}
				wr_lcd(0xfa);
				for(i=0;i<3;i++)					   			//三角波
					{
						wr_zhiling(0xf0,i,1);
						wr_lcd(table2[2*i]);
						wr_lcd(table2[2*i+1]);
					}
			   	for(i=0;i<3;i++)							  	//方波
					{
						wr_zhiling(0xf0,i,2);
						wr_lcd(table3[2*i]);
						wr_lcd(table3[2*i+1]);
					}
				for(i=0;i<3;i++)								//扫描波
					{
						wr_zhiling(0xf0,i,3);
						wr_lcd(table4[2*i]);
						wr_lcd(table4[2*i+1]);
					}
				break;


			 case 1:
				wr_lcd(0xf4);
				for(i=0;i<3;i++)
					{
						wr_zhiling(0xf0,i,0);
						wr_lcd(table1[2*i]);
						wr_lcd(table1[2*i+1]);
					}
				wr_lcd(0xfa);
				for(i=0;i<3;i++)
					{
						wr_zhiling(0xf0,i,1);
						wr_lcd(table2[2*i]);
						wr_lcd(table2[2*i+1]);
					}
				wr_lcd(0xfa);
			   	for(i=0;i<3;i++)
					{
						wr_zhiling(0xf0,i,2);
						wr_lcd(table3[2*i]);
						wr_lcd(table3[2*i+1]);
					}
				for(i=0;i<3;i++)
					{
						wr_zhiling(0xf0,i,3);
						wr_lcd(table4[2*i]);
						wr_lcd(table4[2*i+1]);
					}
				break;

			case 2:
				wr_lcd(0xf4);
				for(i=0;i<3;i++)
					{
						wr_zhiling(0xf0,i,0);
						wr_lcd(table1[2*i]);
						wr_lcd(table1[2*i+1]);
					}
			
				for(i=0;i<3;i++)
					{
						wr_zhiling(0xf0,i,1);
						wr_lcd(table2[2*i]);
						wr_lcd(table2[2*i+1]);
					}
				wr_lcd(0xfa);
			   	for(i=0;i<3;i++)
					{
						wr_zhiling(0xf0,i,2);
						wr_lcd(table3[2*i]);
						wr_lcd(table3[2*i+1]);
					}
				wr_lcd(0xfa);
				for(i=0;i<3;i++)
					{
						wr_zhiling(0xf0,i,3);
						wr_lcd(table4[2*i]);
						wr_lcd(table4[2*i+1]);
					}
				break;
			case 3:
				wr_lcd(0xf4);
				for(i=0;i<3;i++)
					{
						wr_zhiling(0xf0,i,0);
						wr_lcd(table1[2*i]);
						wr_lcd(table1[2*i+1]);
					}
			
				for(i=0;i<3;i++)
					{
						wr_zhiling(0xf0,i,1);
						wr_lcd(table2[2*i]);
						wr_lcd(table2[2*i+1]);
					}
			
			   	for(i=0;i<3;i++)
					{
						wr_zhiling(0xf0,i,2);
						wr_lcd(table3[2*i]);
						wr_lcd(table3[2*i+1]);
					}
				wr_lcd(0xfa);
				for(i=0;i<3;i++)
					{
						wr_zhiling(0xf0,i,3);
						wr_lcd(table4[2*i]);
						wr_lcd(table4[2*i+1]);
					}
				wr_lcd(0xfa);
				
				break;

		}
	
}
/************************************************************************/



/**************************一级子菜单显示********************************/
void sub_menu1(uchar k)
{
	uchar l,i;
	l=k;
	switch(l)
		{
			  case 0:									//频率	   	
				wr_lcd(0xf4);
				wr_lcd(0xfa);
				for(i=0;i<2;i++)
					{
						wr_zhiling(0xf0,i,0);
						wr_lcd(set0[2*i]);
						wr_lcd(set0[2*i+1]);
					}
				wr_lcd(0xfa);
				for(i=0;i<2;i++)					   		//幅度	
					{
						wr_zhiling(0xf0,i,1);
						wr_lcd(set1[2*i]);
						wr_lcd(set1[2*i+1]);
					}
			   	for(i=0;i<3;i++)							//占空比  	
					{
						wr_zhiling(0xf0,i,2);
						wr_lcd(set2[2*i]);
						wr_lcd(set2[2*i+1]);
					}
			
				break;

			  case 1:									//频率	   	
				wr_lcd(0xf4);
				for(i=0;i<2;i++)
					{
						wr_zhiling(0xf0,i,0);
						wr_lcd(set0[2*i]);
						wr_lcd(set0[2*i+1]);
					}
				wr_lcd(0xfa);
				for(i=0;i<2;i++)					   		//幅度	
					{
						wr_zhiling(0xf0,i,1);
						wr_lcd(set1[2*i]);
						wr_lcd(set1[2*i+1]);
					}
				wr_lcd(0xfa);
			   	for(i=0;i<3;i++)							//占空比  	
					{
						wr_zhiling(0xf0,i,2);
						wr_lcd(set2[2*i]);
						wr_lcd(set2[2*i+1]);
					}
			
				break;

			   case 2:									//频率	   	
				wr_lcd(0xf4);
				for(i=0;i<2;i++)
					{
						wr_zhiling(0xf0,i,0);
						wr_lcd(set0[2*i]);
						wr_lcd(set0[2*i+1]);
					}
				for(i=0;i<2;i++)					   		//幅度	
					{
						wr_zhiling(0xf0,i,1);
						wr_lcd(set1[2*i]);
						wr_lcd(set1[2*i+1]);
					}
				wr_lcd(0xfa);
			   	for(i=0;i<3;i++)							//占空比  	
					{
						wr_zhiling(0xf0,i,2);
						wr_lcd(set2[2*i]);
						wr_lcd(set2[2*i+1]);
					}
				wr_lcd(0xfa);
			
				break;
		}
}
/*****************************************************************************/

/************************显示设定的参数的大小******************************/
void display_data(uchar sta,uint x,uchar y,uchar z,uchar v)
{
	uchar l,i;
	l=sta;

	for(i=0;i<5;i++)
		{
			numf[i]=0;
		}
	for(i=0;i<4;i++)
		{
			numr[i]=0;
		}
	for(i=0;i<4;i++)
		{
			numd[i]=0;
		}

	numf[0]=x%10;			//频率
	numf[1]=x%100/10;
	numf[2]=x%1000/100;
	numf[3]=x%10000/1000;
	numf[4]=x/10000;

	numr[0]=y%10;		   //幅度
	numr[1]=y%100/10;
	numr[2]=y%1000/100;
	numr[3]=y/1000;

	numd[0]=z%10;		   //占空比
	numd[1]=z%100/10;
//	numd[2]=z%1000/100;
//	numd[3]=z%10000/1000;
//	numd[4]=z/10000;

	 

	switch(l)
		{
			  case 0:									//频率	   	
				wr_lcd(0xf4);

				wr_lcd(0xfa);
				for(i=0;i<2;i++)
					{
						wr_zhiling(0xf0,i,0);
						wr_lcd(set0[2*i]);
						wr_lcd(set0[2*i+1]);
					}
				wr_lcd(0xfa);
					
			////////////////////////////////////////////////////														  //显示频率的数值
					 	if(v==0)
							{	
								for(i=0;i<5;i++)					//.00HZ
									{
										wr_zhiling(0xf9,0x13+i,0);
										wr_lcd(unit0[i]);		
									}
								
								for(i=0;i<5;i++)
									{
										wr_zhiling(0xf9,0x12-i,0);
										wr_lcd(num[numf[i]]);
									}
							}
						if(v==1)
							{
								for(i=0;i<6;i++)				  //.00Khz
									{
										wr_zhiling(0xf9,0x12+i,0);
										wr_lcd(unit2[i]);		
									}
								for(i=0;i<5;i++)
									{
										wr_zhiling(0xf9,0x11-i,0);
										wr_lcd(num[numf[i]]);
									} 
							}
				 //////////////////////////////////////////////////////////////////////
				for(i=0;i<2;i++)					   		//幅度	
					{
						wr_zhiling(0xf0,i,1);
						wr_lcd(set1[2*i]);
						wr_lcd(set1[2*i+1]);
					}
					for(i=0;i<3;i++)							//VPP
					{
					
						wr_zhiling(0xf9,0x15+i,0x10);
						wr_lcd(unit1[i]);
					}
					//////////////////////////////////////////////////////////////
					for	(i=0;i<2;i++)							 // 00.00
						{
							wr_zhiling(0xf9,0x14-i,0x10);
							wr_lcd(num[numr[i]]);
						}
				
					wr_zhiling(0xf9,0x12,0x10);		 //写个小数点.
					wr_lcd(0x2e);

					for(i=2;i<4;i++)						//00
						{
							wr_zhiling(0xf9,0x13-i,0x10);
							wr_lcd(num[numr[i]]);
						}  
				   //////////////////////////////////////////////////////////////////
			   	for(i=0;i<3;i++)							//占空比  	
					{
						wr_zhiling(0xf0,i,2);
						wr_lcd(set2[2*i]);
						wr_lcd(set2[2*i+1]);
					}
					wr_zhiling(0xf9,0x17,0x20);		   //%
					wr_lcd(0x25);
					//////////////////////////////////////
					for(i=0;i<2;i++	)					 //00
						{
							wr_zhiling(0xf9,0x16-i,0x20);
							wr_lcd(num[numd[i]]);
						}
				/*	wr_zhiling(0xf9,0x14,0x20);		 //写个小数点.
					wr_lcd(0x2e);
					for(i=2;i<4;i++)					//00
						{
							wr_zhiling(0xf9,0x15-i,0x20);
							wr_lcd(num[numd[i]]) ;
						} */
				  //////////////////////////////////////
				break;

			  case 1:									//频率	   	
				wr_lcd(0xf4);
				for(i=0;i<2;i++)
					{
						wr_zhiling(0xf0,i,0);
						wr_lcd(set0[2*i]);
						wr_lcd(set0[2*i+1]);
					}
				
							////////////////////////////////////////////////////														  //显示频率的数值
					 	if(v==0)
							{	
								for(i=0;i<5;i++)					//.00HZ
									{
										wr_zhiling(0xf9,0x13+i,0);
										wr_lcd(unit0[i]);		
									}
								
								for(i=0;i<5;i++)
									{
										wr_zhiling(0xf9,0x12-i,0);
										wr_lcd(num[numf[i]]);
									}
							}
						if(v==1)
							{
								for(i=0;i<6;i++)				  //.00Khz
									{
										wr_zhiling(0xf9,0x12+i,0);
										wr_lcd(unit2[i]);		
									}
								for(i=0;i<5;i++)
									{
										wr_zhiling(0xf9,0x11-i,0);
										wr_lcd(num[numf[i]]);
									} 
							}
				 //////////////////////////////////////////////////////////////////////
				wr_lcd(0xfa);
				for(i=0;i<2;i++)					   		//幅度	
					{
						wr_zhiling(0xf0,i,1);
						wr_lcd(set1[2*i]);
						wr_lcd(set1[2*i+1]);
					}
				wr_lcd(0xfa);
				
					for(i=0;i<3;i++)							//VPP
					{
						wr_zhiling(0xf9,0x15+i,0x10);
						wr_lcd(unit1[i]);
					}
						//////////////////////////////////////////////////////////////
					for	(i=0;i<2;i++)							 // 00.00
						{
							wr_zhiling(0xf9,0x14-i,0x10);
							wr_lcd(num[numr[i]]);
						}
				
					wr_zhiling(0xf9,0x12,0x10);		 //写个小数点.
					wr_lcd(0x2e);

					for(i=2;i<4;i++)						//00
						{
							wr_zhiling(0xf9,0x13-i,0x10);
							wr_lcd(num[numr[i]]);
						}  
				   //////////////////////////////////////////////////////////////////
			   	for(i=0;i<3;i++)							//占空比  	
					{
						wr_zhiling(0xf0,i,2);
						wr_lcd(set2[2*i]);
						wr_lcd(set2[2*i+1]);
					}
						wr_zhiling(0xf9,0x17,0x20);		   //%

⌨️ 快捷键说明

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