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

📄 lcdii.c

📁 用51系列单片机实现的LCD12864液晶的驱动程序
💻 C
📖 第 1 页 / 共 2 页
字号:
	     {
	            write_cmd1(Page_Add+k);
	            write_cmd1(Col_Add);           //列地址0
	            for(j=0;j<64;j++)         //列地址自动加一
		                write_data1(0x00);
         }
}



//****************显示小数字*******************************






//***************************初始化LCD屏*******************
void init()  
{
		delay1(100);
		CS2=1; CS1=0;
		delay1(100);
		write_cmd1(Disp_Off);
		write_cmd1(Page_Add);
		write_cmd1(Start_Line);
		write_cmd1(Col_Add);
		write_cmd1(Disp_On);
		CS2=0; CS1=1;
		delay1(100);
		write_cmd1(Disp_Off);
		write_cmd1(Page_Add);
		write_cmd1(Start_Line);
		write_cmd1(Col_Add);
		write_cmd1(Disp_On);
}

void line_h(uchar x,uchar y,uchar l)
{
    uchar i;
	for(i=0;i<l;i++) point(x+i,y);
      
}

void line_v(uchar x,uchar y,uchar l)
{
    uchar i;
	for(i=0;i<l;i++) point(x,y+i);
      
}













wave()
{
    uchar data i,j,t=64;
	uint te;
	uchar xdata s[120];
	uchar tt=1;
/*	line_h(8,0,120);
	line_h(8,63,120);
	line_v(8,0,64);
	line_v(127,0,64);
	for(i=1;i<4;i++)
	    for(j=4;j<64;j++)point(j*2,16*i);

    for(i=0;i<10;i++)
	    for(j=0;j<32;j++)point(12*i+8,j*2);
	
 */
	while(1)
	{
	   
		cls();
		line_h(8,0,120);
	    line_h(8,63,120);
    	line_v(8,0,64);
	    line_v(127,0,64);

		for(i=1;i<4;i++)
	        for(j=4;j<64;j++)point(j*2,16*i);

    	for(i=0;i<10;i++)
	       for(j=0;j<32;j++)point(12*i+8,j*2);

		display_num(0,55,str_num,0);
		for(i=0;i<5;i++) display_num(0,3+11*i,str_num,5-i);
		for(i=0;i<6;i++)
		{
		    point(6,5+11*i);point(7,5+11*i);
		}
		
	    for(i=0;i<120;i++)
	    {
		    s[i]=adconvert();
        }
		 for(i=1;i<120;i++)
		 {
		   
			    te=s[i]*53;
		        te=te/255;
		        point(i+8,60-te);
		        point(i+8,59-te);
		   }
		   for(i=0;i<5;i++)display8_16(60+7*i,55,str_vp,i);
		   vp_p(s);
		   for(i=0;i<3;i++)

		   display_num(92+7*i,55,str_num,d[2-i]);
		   point(100,61);point(100,62);
		   /*screen1();
		   te=fi_int&0x7ff;
		   dd[0]=te/1000;
		   dd[1]=te/100-dd[0]*10;
		   dd[2]=te/10-dd[1]*10-dd[0]*100;
		   dd[3]=te%10;

		   for(i=0;i<4;i++)display_num(10+6*i,55,str_num,dd[i]);
		   display_num(10+24,55,str_num,10);
		   display_num(10+24+5,55,str_num,11);*/
		   for(i=0;i<100;i++)delay1(500);
		   if(key()!=0)
		   {
		       state=1;
			   cls();
			   break;

		   }    	
	}
}


/************************测频率*******************************/
void timer2(void) interrupt 5 using 3
{ TF2=0;
time2_count--;
  
 }
/**************************采样******************************/
void time1(void) interrupt 3 using 2  
{ 
  EA=0;
  TR1=0;
  TH1=(65536-1365)/256;
  TL1=(65536-1365)%256;   
  s[ii].real=adconvert();
  s[ii].image=0;
  ii++;
  TR1=1;
  EA=1;
  if(ii>=64)
  { 
      ET1=0;
	  TR1=0;
	  EA=0;	
	  ii=0;	 
	  over=1;   
  }	 
}
/**************************对外部计数***************************/
void time0(void) interrupt 1 using 1
{
 if(T0_counter<=Time_NO)
   {T0_counter++;    
    TR2=1;//启动T2
    }
 if(T0_counter>Time_NO)//够4个,停止T2,T0
    { 
	  TR2=0;TR0=0;EA=0;ET0=0;ET2=0;T0_counter=0;//停止T0,T2            
      T2NOW=0;T2NOW=((T2NOW|TH2)<<8)|TL2;
      fi_int=(((Time_NO/2)*5461167)/((65535-time2_count)*65536+T2NOW+1+(65535-time2_count)*13));//计算频率
      	        
      time2_count=65535;	  
      TH2=0;						  
      TL2=0;
	  TH0=0;
	  TL0=0;
	  /*if(fi_int>=625)
	  {
	      fs=42655/625;
	  }
	  else {fs=42665/fi_int;}//3276800/12/fi_int
	  */
	  TH1=(65536-1365)/256;
	  TL1=(65536-1365)%256;
	  ET1=1;
	  TR1=1;//启动T1进行采样
	  EA=1;	
	     
     }
}	  
/************************测频率并显示波形**********************/
void screen1(void)
{
 TMOD=0x16;//T0对外部计数,T1对内部定时
 TH0=255;
 TL0=255;//计1次数
 T2CON=0x00;//16位重装
 //CKCON=0x28;//T0,T2 在4 clock 下工作
 TH2=0;
 TL2=0;
 RCAP2L=0;
 RCAP2H=0;//初值清零
 PT0=1;//设置T0的优先级别高,T0继续判断是否到了4个周期 
 ET0=1;//开T/C0中断
 ET1=1;//开T/C1中断
 ET2=1;//开T/C2中断
 EA=1; 
 TR1=0;
 TR2=0;
 TR0=1;//启动T0
over=0;
while(over==0);
over=0;
	  
}
 
  
unsigned char key()
{    unsigned char  k,tem,keytem;
    // uchar idata d[150]; 
     keytem=0;
	 s0=1;s1=1;s2=1;s3=1;
     tem=P2 & 0x0f;
     if(tem!=0x0f)
     {   beep=0;
         for(k=0;k<40;k++)
         tem=P2 & 0x0f;
         if(tem!=0x0f)
         {    if(tem==0x07) keytem=1;
              else if(tem==0x0b) keytem=2;
              else if(tem==0x0d) keytem=3;
              else if(tem==0x0e) keytem=4;
         }
      }
      while(tem!=0x0f)
      tem=P2 & 0x0f;  
      beep=1;
      return(keytem);
}

void amp()
{
    uchar i,ii;
	for(i=2;i<33;i++)
	{
	    for(ii=0;ii<s[i-2].real;ii++)
		{
	        point(i*2,55-ii);
		    point(i*2-1,55-ii);

		 }
	}
}

hextobcd(uint x)
{
    uint i,t=1000;
	uint temp;
	temp=x;
	for(i=0;i<4;i++)
	{
	    d[3-i]=x/t;
		x=x%t;
		t=t/10;
	}
	if(temp>1000)
	{
	    for(i=0;i<4;i++)display_num(90+6*i,20,str_num,d[3-i]);//频率
	}
	else if(temp>100)
	{
	    d[3]=14;
	    for(i=0;i<4;i++)display_num(90+6*i,20,str_num,d[3-i]);//频率
	}
	else if(temp>10)
	{
	    d[3]=d[2]=14;
	    for(i=0;i<4;i++)display_num(90+6*i,20,str_num,d[3-i]);//频率
	}

}


void cursor(uchar x)
{
    uchar i;
    CS1=0;CS2=1;
	write_cmd1(Page_Add+7);
	write_cmd1(Col_Add);
    for(i=0;i<64;i++)write_data1(0);
    write_cmd1(Page_Add+7);
	write_cmd1(Col_Add+x-2);
	write_data1(0x8);
	write_data1(0x4);
	write_data1(0xfe);
	write_data1(0x4);
	write_data1(0x8);   
}

static_fft()
{
   
	uchar i,j,iii;
	uchar ii=1;
	cls();
	line_h(0,0,68);
	line_h(0,55,68);
	hextobcd(0);
	for(i=0;i<8;i++)display_e(0,70+7*i,str_fft,i);
	for(i=0;i<2;i++)display_h(2,70+12*i,str_f,i);
	for(i=0;i<2;i++)display_num(10+105+5*i,19,str_num,i+10);//HZ
    for(j=1;j<7;j++)
	for(i=1;i<68;i=i+2) point(i,8*j);
	for(j=1;j<6;j++)
	for(i=2;i<56;i=i+2) point(11*j,i);
	line_v(0,0,56);
	line_v(68,0,56);
    amp();
	while(1)
	{
	    
		iii=key();
		if(iii==1)
		{
		   ii++;if(ii==32)ii=1;
		}
		else if(iii==2)
		{
		    if(ii==1)ii=32;
			ii--;
		}
		else if (iii==3) 
		{
		   cls();
		   state=1;
		   break;
		}
		cursor(2*ii);
		hextobcd(95*(ii-1));
		

	}
}

fft_screen()
{ 

   	uchar i,j,iii;
	uchar ii=1;
	while(1)
	{
	    cls();
	    line_h(0,0,68);
	    line_h(0,55,68);
		hextobcd(0);
		for(i=0;i<8;i++)display_e(0,70+7*i,str_fft,i);
		//for(i=0;i<4;i++)display_num(2,95+5*i,str_num,i+1);//频率
		for(i=0;i<2;i++)display_h(2,70+12*i,str_f,i);
		for(i=0;i<2;i++)display_num(10+105+5*i,19,str_num,i+10);//HZ
	    for(j=1;j<7;j++)
	    for(i=1;i<68;i=i+2) point(i,8*j);
	    for(j=1;j<6;j++)
	    for(i=2;i<56;i=i+2) point(11*j,i);
	    line_v(0,0,56);
	    line_v(68,0,56);

	    for(i=0;i<64;i++)
		{
		    s[i].real=adconvert();
			s[i].image=0;
		}
	    FFT(s);
	    amp();
		iii=key();
		if(iii==1)
		{
		   ii++;if(ii==32)ii=1;
		}
		else if(iii==2)
		{
		    if(ii==1)ii=32;
			ii--;
		}
		else if(iii==3)
		{
		    cls();
			state=2;
			break;
		} 
		else if(iii==4)
		{
		    cls();
			state=0;
			break;
		}
		cursor(2*ii);
		hextobcd(95*(ii-1));
		for(i=0;i<100;i++)delay1(500);
		

	}
}



main()
{
    init();
	cls();

	while(1)
	{
	    if(state==0) wave();
 		else if (state==1)fft_screen();
		else if (state==2)static_fft();


	}

}

⌨️ 快捷键说明

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