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

📄 usermain.c

📁 D/A7513可以用于调试 1602显示器
💻 C
字号:
// design by jeffery chen
#include "FS7805.h"
#include "FS7805Regs.h"
#include "user_main.h"
#include "intrins.h"
#include "math.h"


#define da_sclk  P1_5
#define da_sync  P1_7
#define da_din   P1_6


#define uchar unsigned char
#define nop _nop_()
#define uint unsigned int
#define ulong unsigned long
#define DB0_DB7 P3

void delay100us(unsigned);
void delay10ms(int count);
void write_LCD_command(unsigned);
void write_LCD_data(unsigned);
void init_LCD(void);
void clear_LCD(void);
void gotoxy(unsigned,unsigned);
void displaylcd(char *p);


void welcome();
void mainmenu();
void set_zx_t();
void set_zx_v();


int flagbx=0;



void da_write(unsigned int data_buf);
void delay2ms();


void runzx();
void da_sin(double V,ulong T);
void da_fansin(double V,ulong T);
void da_juchi(double V,ulong T);
void da_tri(double V,ulong T);
void da_sqr(double V,ulong T);


sbit RS=P2^2;
sbit RW=P2^1;
sbit E=P2^0;

uchar code tablewelcome[]={"Designed by Xie Yingjie SHNU"};
uchar code tablemainmenu[]={"zx:1 bzx:2 sj:3 jc:4 fb:5"};
uchar table_zx_t[]={"0000000 T/us    set V:A return:B"};
uchar table_zx_v[]={"0000 V/mv run:A return:B"};

void usermain()
{ 
	init_LCD();
 	clear_LCD();
	welcome();
 
   
   	
}



void delay100us(unsigned n)
{
	unsigned char i, j;
	for(i=0; i<n; i++)
		for(j=0; j<124; j++)
		;
}

void delay10ms(int count)
{
	int i,j,k;

 	for(i=0;i<count;i++)
	for(j=0;j<10;j++)
	for(k=0;k<70;k++)
	;	

}

void write_LCD_command(unsigned command)

{
	RS=0;
	RW=0;
	E=1;
	DB0_DB7=command;
	delay100us(20);
	E=0;

}

void write_LCD_data(unsigned LCDdata)
{
	RS=1;
	RW=0;
	E=1;
	DB0_DB7=LCDdata;
	delay100us(20);
	E=0;

}

void init_LCD(void)
{
	write_LCD_command(0x38);//0x38
	write_LCD_command(0x0c);//0x0c
	write_LCD_command(0x06);//0x06
}

void clear_LCD()
{
	write_LCD_command(0x01);//clear the port
	write_LCD_command(0x02);	
}



void gotoxy(unsigned x,unsigned y)
{
	if(x==1)  
		write_LCD_command(128+y);
	else
    	write_LCD_command(192+y);
}


void displaylcd(char *p)
{
	int i=0;
//	p=tablef2[];
	while(*p)
	{
//		if(i<=16)
//		{
			write_LCD_data(*p);
			p++;
			i++;
			if(i==16)
			{
				gotoxy(2,0);
			}
//		}
	}
}



//==============================================================================================================================================


void welcome()
{
	uchar j=1;
	char key=0x00;
	char key1=0x00;
	flagbx=0;

	clear_LCD();

	displaylcd(tablewelcome);


	write_LCD_command(0x02);
	write_LCD_command(0x0c);

	while(1)
	{
		delay10ms(10);
		P0=0xF0;
		key=P0;
		delay10ms(10);

		P0=0x0F;
		key1=P0;
		delay10ms(10);
			
		key=key|key1;
		delay10ms(10);

		while(j)
		{
			if(P0==0xf0||P0==0x0f)
			{
				j=0;	
			}
		}

		j=1;


//		if(key!=0x00)
//		{


		switch(key)
		{
			case 0xBB:
			mainmenu();			//A
			break;

			default:
			break;
		}

//		key=0x00;
		delay10ms(50);
//		}

	}


	
}

void mainmenu()
{
	
	uchar j=1;
	char key=0x00;
	char key1=0x00;
	flagbx=0;

	clear_LCD();

	displaylcd(tablemainmenu);


	write_LCD_command(0x02);
	write_LCD_command(0x0c);



	while(1)
	{
		P0=0xF0;

		key=P0;
		delay10ms(10);

		P0=0x0F;

		key1=P0;
		delay10ms(10);
			
		key=key|key1;
		delay10ms(10);

		while(j)
		{
			if(P0==0xf0||P0==0x0f)
			{
				j=0;	
			}
		}

		j=1;


//		if(key!=0xff)
//		{


		switch(key)
		{
			case 0xED:						//1
			flagbx=1;
			set_zx_t();		
			break;

			case 0xEB:						//2
			flagbx=2;
			set_zx_t();
			break;

			case 0xE7:					    //3
			flagbx=3;
			set_zx_t();
			break;

			case 0xDE:						//4
			flagbx=4;
			set_zx_t();
			break;
  	
			case 0xDD:						//5
			flagbx=5;
			set_zx_t();
			break;

			default:
			break;
		}

//		key=0x00;
		delay10ms(50);
//		}

	}

}


void set_zx_t()
{
	bit k=0;
	bit allow=1;
	uchar count=0;
	uchar number=0;
	bit j=1;
	char key=0x00;
	char key1=0x00;

	clear_LCD();
	displaylcd(table_zx_t);


	write_LCD_command(0x02);
	write_LCD_command(0x0f);

	while(1)
	{
		delay10ms(10);
		P0=0xF0;
		key=P0;
		delay10ms(10);

		P0=0x0F;
		key1=P0;
		delay10ms(10);
			
		key=key|key1;
		delay10ms(10);
			   
		while(j)
		{
			if(P0==0xf0||P0==0x0f)
			{
				j=0;	
			}
		}

		j=1;



			switch(key)
			{
				case 0xEE:			//0 
				number='0';
				k=1;					
				break;

				case 0xED:			//1
				number='1';
				k=1;
				break;

				case 0xEB:			//2
				number='2';
				k=1;
				break;
		
				case 0xE7:	        //3
				number='3';
				k=1;
				break;

				case 0xDE:			//4
				number='4';
				k=1;
				break;
  	
				case 0xDD:			//5
				number='5';
				k=1;
				break;

				case 0xDB:			//6
				number='6';
				k=1;
				break;

				case 0xD7:			//7
				number='7';
				k=1;
				break;

				case 0xBE:			//8
				number='8';
				k=1;
				break;

				case 0xBD:			//9
				number='9';
				k=1;
				break;

				case 0xBB:
				set_zx_v();			//A
				break;
							
				case 0xB7:			//B
				mainmenu();
				break;

				case 0x7E:
				set_zx_t();			//C
				break;

				case 0x7D:			//d
				break;

				case 0x7B:			//E
				break;

				case 0x77:			//F
				break;
  	
				default:
				break;
			}

			
		if(k==1)
		{


			if(allow==1)
			{

				table_zx_t[count]=number;
				write_LCD_data(table_zx_t[count]);
				count++;

				if(count>6)
				{
					allow=0;
					write_LCD_command(0x0C);
						
				}

			}

			k=0;

		}

		delay10ms(50);


	}
	
		
}


void set_zx_v()
{
	bit k=0;
	bit allow=1;
	bit j=1;
	char key=0x00;
	char key1=0x00;
	uchar count=0;
	uchar number=0;

	clear_LCD();
	displaylcd(table_zx_v);


	write_LCD_command(0x02);
	write_LCD_command(0x0f);

	while(1)
	{
		delay10ms(10);
		P0=0xF0;
		key=P0;
		delay10ms(10);

		P0=0x0F;
		key1=P0;
		delay10ms(10);
			
		key=key|key1;
		delay10ms(10);
			   
		while(j)
		{
			if(P0==0xf0||P0==0x0f)
			{
				j=0;	
			}
		}

		j=1;



			switch(key)
			{
				case 0xEE:			//0 
				number='0';
				k=1;					
				break;

				case 0xED:			//1
				number='1';
				k=1;
				break;

				case 0xEB:			//2
				number='2';
				k=1;
				break;
		
				case 0xE7:	        //3
				number='3';
				k=1;
				break;

				case 0xDE:			//4
				number='4';
				k=1;
				break;
  	
				case 0xDD:			//5
				number='5';
				k=1;
				break;

				case 0xDB:			//6
				number='6';
				k=1;
				break;

				case 0xD7:			//7
				number='7';
				k=1;
				break;

				case 0xBE:			//8
				number='8';
				k=1;
				break;

				case 0xBD:			//9
				number='9';
				k=1;
				break;

				case 0xBB:
				runzx();			//A
				break;
							
				case 0xB7:			//B
				mainmenu();
				break;

				case 0x7E:
				set_zx_v();			//C
				break;

				case 0x7D:			//d
				break;

				case 0x7B:			//E
				break;

				case 0x77:			//F
				break;
  	
				default:
				break;
			}

			
		if(k==1)
		{


			if(allow==1)
			{

				table_zx_v[count]=number;
				write_LCD_data(table_zx_v[count]);
				count++;

				if(count>3)
				{
					allow=0;
					write_LCD_command(0x0C);
						
				}

			}

			k=0;

		}

		delay10ms(50);


	}
		
}






//==============================================================================================================================================


void da_write(uint data_buf)
{	
	unsigned char i=0x0;
    da_sync=1;
    delay2ms();
    da_sync=0;
	for(i=0;i<16;i++)
		{
		 if (data_buf&0x8000)      //数据及通道选择字节
           {
			 da_din=1;
		   }
         else
           {
		     da_din=0;
		   }
		 data_buf=data_buf<<1;
         da_sclk=0;       
		 da_sclk=1;              
  
		}
    da_sync=1;
}

void delay2ms()
{
  BYTE i=240;
  while(i)
  {

   i--;

   }

}

void runzx()
{
	double V;
	ulong T;
	T=((ulong)(table_zx_t[0]-0x30))*1000000+((ulong)(table_zx_t[1]-0x30))*100000+((ulong)(table_zx_t[2]-0x30))*10000+((ulong)(table_zx_t[3]-0x30))*1000+((ulong)(table_zx_t[4]-0x30))*100+((ulong)(table_zx_t[5]-0x30))*10+((ulong)(table_zx_t[6]-0x30));
	V=((double)(table_zx_v[0]-0x30))+((double)(table_zx_v[1]-0x30))*0.1+((double)(table_zx_v[2]-0x30))*0.01+((double)(table_zx_v[3]-0x30))*0.001;
	
	switch(flagbx)
	{
		case 1:
		    da_sin(V,T);
		break;

		case 2:
			da_fansin(V,T);
		break;

		case 3:
			da_tri(V,T);
		break;

		case 4:
			da_juchi(V,T);
		break;

		case 5:
			da_sqr(V,T);
		break;

		default:
		break;
	}
	



}



void da_sin(double V,ulong T)     //V=0~2.5		 T的单位:us
{
	uint ii=0;
	double datanow;
	uint tnow=(4*T*5)/(3000*5.4);
//	flagsin=1;
	while(1)
    {  
 			
			 datanow=V*sin(ii*6.28/tnow)+V;
			 datanow=datanow*4096/5;
 	  		 da_write(datanow);
			 ii++;
			 if(ii>tnow)
			 {
			 	ii=0;
			 }
 
    }   	
}




void da_fansin(double V,ulong T)		  //V=0~5
{
	uint ii=0;
//	double tnow=2*T;
	double datanow;
	uint tnow=(2*4*T*5)/(2900*5.4);
//	flagfansin=1;
	while(1)
    {  

	 if(ii<tnow/2)//&&count1!=count)
	 {
    	 datanow=V*sin(ii*6.28/tnow);	
		 datanow=datanow*4096/5;
   		 da_write(datanow);
		 ii++;
	 }

	 if(ii>=tnow/2)//&&count1!=count)
	 {
	     datanow=V*sin(ii*6.28/tnow+3.14);
		 datanow=datanow*4096/5;
   		 da_write(datanow);	
		 ii++;
	 }

	 if(ii>tnow/2)
	 {
	 	ii=0;
	 }

	    
    }   			
}




void da_juchi(double V,ulong T)
{
	ulong ii=0;
	int vnow;
	int tnow=(T*14*4)/(350*13*5);
	while(1)
	{					  

		if(ii<tnow)
		{

	        vnow=(V*4096.00)/(tnow*5.00);              
            da_write((ii*vnow));     
			ii++;			


		}


		if(ii>=tnow)
		{
			ii=0;
		}

	}
}




void da_tri(double V,ulong T)
{
	uchar flag=0;
	ulong ii=0;
	int vnow;
	int tnow=(T*7*5)/(350*13*6);
	while(1)
	{					  

		while(flag==0)
		{

	        vnow=(V*4096.00)/(tnow*5.00);              
            da_write((ii*vnow));     
			ii++;
			
			if(ii>=tnow)
			{
				flag=1;
			}			


		}


		while(flag==1)
		{
			vnow=(V*4096.00)/(tnow*5.00);
			da_write((ii*vnow));     
			ii--;
			
			if(ii==0)
			{
				flag=0;

			}	
		}

	}
}





void da_sqr(double V,ulong T)
{

	double vnow;
	long tnow;
	uchar flag=0;
	uint ii=0;		   
	vnow=V/5*4096;
	tnow=(T*4*10)/(49*22);
//	flagsqr=1;
	while(1)
	{
		while(flag==0)
		{
			while(ii<tnow)
			{
				ii++;	
			}
			da_write(vnow);
			
			if(ii>=tnow)
			{
				ii=0;
				flag=1;
			}
		}

//		da_write(vnow);

		while(flag==1)

		{						  

			while(ii<tnow)
			{
				ii++;	 
			}

			da_write(0);

			if(ii>=tnow)
			{
				ii=0;
				flag=0;

			}
		}
//		da_write(vnow);

	}
}




⌨️ 快捷键说明

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