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

📄 lcd320240.c

📁 2007年全国大学生电子设计大赛
💻 C
📖 第 1 页 / 共 5 页
字号:
#include "c8051f120.h"
#include "LCD320240.h"
#include "flash.h"
#include "fft_xgjis.h"
#include"intrins.h"
#include"math.h"
#define unchar unsigned char
#define unint unsigned int
//#define K_fft 3277 //变换因子
//#define F_fft 20	 //分辨率
sbit wr=P7^4;
sbit rd=P7^3;
sbit cs=P7^2;
sbit a0=P7^1;
sbit res=P7^0;
//sbit key=P3^7;
//sbit busyflag=P2^6;
//extern  unsigned int K_fft;
//extern int source[2048];
//extern unsigned int N_fft;
//extern unsigned F_fft;
unint  addr1 = 8800;   //记录上一个坐标值
unint  addr2;
//unchar code value1[];
//unchar code value2[];
//unchar code value3[];
/********************************
延时函数
*********************************/
void delay(unint t)
{
unint i;

for(i=0;i<t;i++)
{_nop_();_nop_();}	
}
/*******************************
读液晶 函数	   
输入: 无 
输出: 	unchar型数据 
********************************/

unchar RD_LCD(void)
{
  unchar LCD_Data ;
  P6=0xff;
  
  a0=1 ;
  delay(1);
  wr=1 ;
  delay(1);
  rd=0 ;
  delay(20);
  LCD_Data=P6;
  delay(20);
  rd=1;

  return(LCD_Data);
}
/********************************
写命令函数 
输入: 命令控制字 
输出:  无 
*********************************/

void wr_command(unchar command)
{
//P0=0xff;
P6=command;

a0=1;
delay(1);
rd=1;
delay(1);
wr=0;
delay(40);
wr=1;
}

/*********************************
写数据函数 
输入: unchar型 数据 
输出: 无 
**********************************/

void wr_datas(unchar datas)
{
//P0=0xff;
P6=datas;

a0=0;
delay(1);
rd=1;
delay(1);
wr=0;
delay(40);
wr=1;
}

/**********************************
液晶初始化函数 

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

void LCD_Init()
{
unint i;
unchar code systemset[]={0x34,0x87,0x07,0x28,0x2d,0xf0,0x28,0x00};
unchar code scroll[]={0x00,0x00,0xf0,0x00,0x80,0xf0,0x00,0x00,0x00,0x00};


delay(50);
res=0;
delay(50);
res=1;
delay(50);
cs=0;

wr_command(0x40);		//system set
for(i=0;i<8;i++)
	{
	wr_datas(systemset[i]);
	}

wr_command(0x44);		//scroll set
for(i=0;i<10;i++)
	{
	wr_datas(scroll[i]);
	}

wr_command(0x5b);		//ovlay set
wr_datas(0x0c);

wr_command(0x59);		//display on
wr_datas(0x14);	
}
/******************************************
清屏 函数 
*******************************************/
void clear(unint lay)
{
unint i;

wr_command(0x4c);		//set point move direction

wr_command(0x46);		//set point address
switch(lay)
{
case 1:	wr_datas(0x00);
	wr_datas(0x00);
	break;
case 2:	wr_datas(0x00);
	wr_datas(0x80);
	break;
}

wr_command(0x42);		//mwrite
for(i=0;i<9600;i++)
	{
	wr_datas(0x00);
	}
	
}
/*******************************************************
文本模式 显示函数	   
输入: 数据指针,  层数 选择 lay
输出:无 
********************************************************/

void display_text(unchar code *text,unint lay)
{
unint i,j,k;

wr_command(0x4c);		//set point move direction

wr_command(0x46);		//set point address
switch(lay)
{
case 1:	wr_datas(0x00);
	wr_datas(0x00);
	break;
case 2: wr_datas(0x00);
	wr_datas(0x80);
	break;
}

wr_command(0x42);		//mwrite
for(j=0;j<30;j++)
	{
	for(k=0;k<8;k++)
		{
		for(i=0;i<40;i++)
			{
			wr_datas(*(text+k));
			}
		}
	}

}
/****************************************************
图形模式 显示函数	   
输入: 数据指针,  层数 选择 lay
输出:无 
****************************************************/

void display_map(unchar code *map,unint lay)
{
unint i,j;

wr_command(0x4c);		//set point move direction

wr_command(0x46);		//set point address
switch(lay)
{
case 1:	wr_datas(0x00);
	wr_datas(0x00);
    wr_command(0x42);		//mwrite
	for(i=0;i<9600;i++)
		{
		wr_datas(*(map+i));
		}
	break;
case 2: wr_datas(0x00);
	wr_datas(0x80);
	wr_command(0x42);		//mwrite
   for(j=0;j<2;j++)
	{
	for(i=0;i<4800;i++)
		{
		wr_datas(*(map+i));
		}
	}
	break;
  }
}  

/******************************************************
显示卷动函数 
*******************************************************/
void roll()
{
 unsigned int i,j=0x00,k,sad2,sad2h;
 
 while(1)
 { 
   sad2=0x8000;
   for(k=0;k<240;k++)
   {
	for(i=0;i<8;i++)
 	 {
   	wr_command(0x5a);	//hdot set
 	  wr_datas(i);		//P
 	 }
 	wr_command(0x44);	//scroll set
 	 wr_datas(0x00);
 	 wr_datas(0x00);
 	 wr_datas(0xf0);
  	 wr_datas(sad2);	//P1
  	 sad2h=sad2>>8;
  	 wr_datas(sad2h);	//P2
  
 	wr_command(0x5a);	//hdot set
  	 wr_datas(0x00);
  
   delay(8000);

   sad2=sad2+40;
//   if(key==0) goto out;
  ; }
 }
/*out:
 wr_command(0x44);	//scroll set
  wr_datas(0x00);
  wr_datas(0x00);
  wr_datas(0xf0);
  wr_datas(0x00);
  wr_datas(0x80);	 */
}
/*******************************************************************					 
在一个区域反白	 函数	   
nAddr :首地址;xSize:图像宽度,ySize:图像高度;lay:层		    
********************************************************************/
void Redisplay_Area(unint addr,unchar xSize,unchar ySize,unchar lay)
{
  unchar addrH = 0;
  unchar addrL = 0;
  unchar datatmp = 0;
  unint  i,j;
  
  //unchar i,j,cDat ;
  //unchar cAddrLow,cAddrHigh ;
  
  if(lay == 2)
    addr += 0x8000;
  
  for(i=0;i<ySize;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((unchar)(addr&0X00FF));
    wr_datas((unchar)((addr&0XFF00)>>8));
    
    for(j=0;j<xSize/8;j++)
    {
      wr_command(0x47);             //读地址指令
      addrL = RD_LCD();             //读地址
      addrH = RD_LCD();
      
      wr_command(0x43);            //读数据指令
      datatmp = RD_LCD();          //读数据
      datatmp = ~datatmp;
   
      wr_command(0x46);		//写地址指令
      wr_datas(addrL);       //写地址
      wr_datas(addrH);
      
      wr_command(0x42);       //写数据指令
      wr_datas(datatmp);         //写数据
    }
    addr = addr + 40;
  }
}  
/****************************************************
在某个点上写数据(实际上是写一个八位数据进去)
data:所要写入的数据;addr:所写入数据的地址;lay:层		   
******************************************************/
void DisplayPoint(unchar data1,unint addr,unint lay)
{
  //unint  i;
  unchar addrH = 0;
  unchar addrL = 0;
  
    
  if(lay==2)               //判断层
    addr = addr + 0x8000;
  
   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); 
  
}
/**************************************************************
Y 轴显示函数 
//data1:所要写入的Y轴数据的首地址;addr:所写入数据的地址;lay:层			 
***************************************************************/
void DisplayPoint_Y(unchar *data1,unint addr,unint lay)
{
  unint  i;
  unchar addrH = 0;
  unchar addrL = 0;
  
    
  if(lay==2)               //判断层
    addr = addr + 0x8000;
  

  
  
  for(i=0;i<192;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;
  }
}
/***********************************************************
X轴显示函数 
//data:所要写入的X轴数据;addr:所写入数据的地址;lay:层		    
************************************************************/
void DisplayPoint_X(unchar *data1,unint addr,unint lay)
{
  unint  i,j;
  unchar addrH = 0;
  unchar addrL = 0;
  

⌨️ 快捷键说明

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