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

📄 lcd320240.c

📁 2007年全国大学生电子设计大赛
💻 C
📖 第 1 页 / 共 5 页
字号:
    
  if(lay==2)               //判断层
    addr = addr + 0x8000;
  
 
  
  for(j=0;j<8;j++)
  {
  for(i=0;i<24;i++)
  {
   addrL = (unchar)(addr&0X00FF);
   addrH = (unchar)((addr&0XFF00)>>8);
   wr_command(0x4c);		//set point move direction
   wr_command(0x46);		//set point address
  
   switch(lay)
    {
    case 1:
      wr_datas(addrL);
      wr_datas(addrH);
      break;
    case 2: 
      wr_datas(addrL);
      wr_datas(0x80+addrH);
      break;
    default:
      break;
    }
	wr_command(0x42);             //mwrite   数据写入显示缓冲区
    wr_datas(*(data1+i+j*24)); 
    addr=addr+1;
  }
  addr=addr+16;
  }
}
/*********************************************************
//显示汉字程序	   
//data:汉字的16*16点阵数据;addr:汉字显示的首地址;lay:层			 
**********************************************************/
void DisplayChinese(unchar *data1,unint addr,unint lay)
{
  unchar addrH = 0;
  unchar addrL = 0;
  unint temp = 0;
  unint i;
  
  for(i=0;i<240;i++)          //越界检查
  {
    temp = i*40+39;
    if(addr==temp)
      return;
  }
  
  for(i=0;i<16;i++)
  {
    addrL = (unchar)(addr&0X00FF);
    addrH = (unchar)((addr&0XFF00)>>8);
    
    wr_command(0x4c);		//set point move direction
    wr_command(0x46);		//set point address
    
    //wr_datas(addrL);
    //wr_datas(addrH);
    
    switch(lay)
    {
    case 1:
      wr_datas(addrL);
      wr_datas(addrH);
      break;
    case 2: 
      wr_datas(addrL);
      wr_datas(0x80+addrH);
      break;
    default:
      break;
    }
  
    wr_command(0x42);    //mwrite   数据写入显示缓冲区
    wr_datas(*(data1+i*2));
    wr_datas(*(data1+i*2+1));
    addr = addr + 40;
  }
}
/******************************************************
//清除汉字程序
//addr:清除汉字的首地址;lay:层		 
*******************************************************/
void ClearChinese(unint addr,unint lay)
{
  unchar addrH = 0;
  unchar addrL = 0;
  unchar temp = 0;
  unchar *data1 ;
  unchar datatemp = 0;
  unint i;
  
  data1 = &datatemp;
  
  for(i=0;i<240;i++)          //越界检查
  {
    temp = i*40+39;
    if(addr==temp)
      return;
  }
    
  addrL = (unchar)(addr&0X00FF);
  addrH = (unchar)((addr&0XFF00)>>8);

  wr_command(0x4c);		//set point move direction
  wr_command(0x46);		//set point address
  
  for(i=0;i<16;i++)
  {
    wr_command(0x4c);		//set point move direction
    wr_command(0x46);		//set point address
    
    addrL = (unchar)(addr&0X00FF);
    addrH = (unchar)((addr&0XFF00)>>8);
    
    //wr_datas(addrL);
    //wr_datas(addrH);
    
    switch(lay)
    {
    case 1:
      wr_datas(addrL);
      wr_datas(addrH);
      break;
    case 2: 
      wr_datas(addrL);
      wr_datas(0x80+addrH);
      break;
    default:
      break;
    }
  
    wr_command(0x42);    //mwrite   数据写入显示缓冲区
    wr_datas(*(data1));
    wr_datas(*(data1));
    addr = addr + 40;
  }
}

/********************************************************
//显示符号程序	   
//data:符号的8*16点阵数据;addr:符号显示的首地址;lay:层		   
*********************************************************/
void DisplaySymbol(unchar *data1,unint addr,unint lay)
{
  unchar addrH = 0;
  unchar addrL = 0;
  unint temp = 0;
  unint i;
  
  for(i=0;i<240;i++)          //越界检查
  {
    temp = i*40+39;
    if(addr==temp)
      return;
  }
  
  for(i=0;i<16;i++)
  {
    addrL = (unchar)(addr&0X00FF);
    addrH = (unchar)((addr&0XFF00)>>8);
    
    wr_command(0x4c);		//set point move direction
    wr_command(0x46);		//set point address
    
    switch(lay)
    {
    case 1:
      wr_datas(addrL);
      wr_datas(addrH);
      break;
    case 2: 
      wr_datas(addrL);
      wr_datas(0x80+addrH);
      break;
    default:
      break;
    }
  
    wr_command(0x42);    //mwrite   数据写入显示缓冲区
    wr_datas(*(data1+i));
    addr = addr + 40;
  }
}
/******************************************************
//清除符号程序	   
//addr:清除符号的首地址;lay:层	    
******************************************************/
void ClearSymbol(unint addr,unint lay)
{
  unchar addrH = 0;
  unchar addrL = 0;
  unchar temp = 0;
  unchar *data1 ;
  unchar datatemp = 0;
  unint i;
  
  data1 = &datatemp;
  
  for(i=0;i<240;i++)          //越界检查
  {
    temp = i*40+39;
    if(addr==temp)
      return;
  }
  
  for(i=0;i<16;i++)
  {
    wr_command(0x4c);		//set point move direction
    wr_command(0x46);		//set point address
    
    addrL = (unchar)(addr&0X00FF);
    addrH = (unchar)((addr&0XFF00)>>8);
    
    switch(lay)
    {
    case 1:
      wr_datas(addrL);
      wr_datas(addrH);
      break;
    case 2: 
      wr_datas(addrL);
      wr_datas(0x80+addrH);
      break;
    default:
      break;
    }
  
    wr_command(0x42);    //mwrite   数据写入显示缓冲区
    wr_datas(*(data1));
    addr = addr + 40;
  }
}
/**************************************************************
//显示波形,	  可以描8的倍数个点,小于320
输入: 首地址 ,Y方向长度 , lay:层 
***************************************************************/
void DispalyWave(unchar *ad_data,unint Y_length,unint lay)
{
  unchar i,j;
  unchar addrH = 0;
  unchar addrL = 0;
  unint addrtemp = 0;
  unchar  datatemp, Y_temp=0;
  switch(lay)
    {
    case 1:
      wr_datas(addrL);
      wr_datas(addrH);
      break;
    case 2: 
      wr_datas(addrL);
      wr_datas(0x80+addrH);
      break;
    default:
      break;
    }
  Y_temp=0x80;
 for(i=0;i<Y_length;i++)
  {
  for(j=0;j<8;j++)
   { 
    if(Y_temp==0)
	 Y_temp=0x80;
	if(ad_data[i+j]<=180)
    {addrtemp=(ad_data[i+j]+180)/2;}
	else
	{addrtemp=(ad_data[i+j]-180)/2;}
    addr2=addr1+i-40*addrtemp;

    wr_command(0x4c);		//set point move direction
    wr_command(0x46);		//set point address
  
    wr_datas((unchar)(addr2&0X00FF));        // 写低地址
    wr_datas((unchar)((addr2&0XFF00)>>8));   //写高地址
    wr_command(0x47);             //读地址指令
    addrL = RD_LCD();             //读地址
    addrH = RD_LCD();
  
    wr_command(0x43);            //读数据指令
    datatemp = RD_LCD();          //读数据
	//DisplayPoint(datatemp,8803+i,1);	 
	wr_command(0x4c);		//set point move direction
    wr_command(0x46);		//set point address
  
    wr_datas(addrL);        // 写低地址
    wr_datas(addrH);   //写高地址 */
    wr_command(0x42);    //mwrite   数据写入显示缓冲区
	datatemp=datatemp|Y_temp;
    wr_datas(Y_temp);
    Y_temp=Y_temp>>1;
   }	
  }
} 
/*********************************************
FFT后,频谱分布图
unint *ad_data,频谱数据
unint addr0,坐标原点
unint P_flag,页标志
*********************************************/ 
void Display_ppu(int *ad_data,unint addr0,unint P_flag,unint lay)
{
  unint i,j,k;
  unchar addrH = 0;
  unchar addrL = 0;
  unint addrtemp = 0;
  unchar datatemp, Y_temp=0;
  float temp,temp2;

  switch(lay)
    {
    case 1:
      wr_datas(addrL);
      wr_datas(addrH);
      break;
    case 2: 
      wr_datas(addrL);
      wr_datas(0x80+addrH);
      break;
    default:
      break;
    }
  	DisplayChineseArray("音频信号分析仪",14,12,1);
	DisplayChineseArray("音频信号各频率和占总功率",24,644,1);
	DisplaySymbol(datamaohao,668,1);
	DisplaySymbol(databfh,672,1);
	DisplayChineseArray("周期",4,1286,1);
	DisplaySymbol(datamaohao,1290,1);
	DisplaySymbol(datas,1300,1);
	DisplayChineseArray("失真度",6,1302,1);
	DisplaySymbol(datamaohao,1308,1);
	DisplaySymbol(databfh,1312,1);
  for(j=0+P_flag*144;j<144+P_flag*144;j=j+4)
  {
	Y_temp=0x40;
   for(k=0;k<4;k++)
   {
    temp2=(float)ad_data[j+k];
   temp=temp2/32768*10;
   addrtemp=(unint)temp;
 	for(i=0;i<addrtemp;i++)
   	{
	addr2=addr0-40+j/4+1-40*i;
    wr_command(0x4c);		//set point move direction
    wr_command(0x46);		//set point address
  
    wr_datas((unchar)(addr2&0X00FF));        // 写低地址
    wr_datas((unchar)((addr2&0XFF00)>>8));   //写高地址
    wr_command(0x47);             //读地址指令
    addrL = RD_LCD();             //读地址
    addrH = RD_LCD();
  
    wr_command(0x43);            //读数据指令
    datatemp = RD_LCD();          //读数据
	wr_command(0x4c);		//set point move direction
    wr_command(0x46);		//set point address
  
    wr_datas(addrL);        // 写低地址
    wr_datas(addrH);   //写高地址 */
    wr_command(0x42);    //mwrite   数据写入显示缓冲区
	datatemp=datatemp|Y_temp;
    wr_datas(datatemp);
   	}
	Y_temp=Y_temp>>2;
   }
  }
}
/*********************************************
FFT后,功率分布图
addr0坐标原点
unsigned int *ad_data,电压值
nint *fl_data,频率值
*********************************************/ 
void Display_gltu(unint addr0,unint lay,unsigned int k_ff,unsigned int f_ff,int *ddtbull)  
{
  unchar igl;
  unchar addrH = 0;
  unchar addrL = 0;
  int power_all,power_sum,power_f;
  unint Fs,Fn,F_base;
  unchar datatemp, Y_temp=0;
  float time,dist,power_all_db	,power_sum_db,power_bfb,power_bff;
  Y_temp=0xff;
 
  switch(lay)
    {
    case 1:
      wr_datas(addrL);
      wr_datas(addrH);
      break;
    case 2: 
      wr_datas(addrL);
      wr_datas(0x80+addrH);
      break;
    default:
      break;
    }
	//显示周期
   time=cyc_jud(ddtbull);
   Fs=f_ff;
   ClearPic(1950,108,16,1);
   if(time==0)
    DisplayChineseArray("非周期",6,1950,1);
   else
	{ time = time* Fs;
	time=1000/time;
    DisplayFloat4(time,1950,1);}
   //显示失真度
   dist=shizhd(ddtbull);

⌨️ 快捷键说明

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