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

📄 lcd_curl.c

📁 在128*64点阵液晶屏上显示曲线
💻 C
字号:
#include <C8051F310.h>
#define byte  unsigned char
#define ZLG_7290             0x70      //ZLG7290 从器件地址
#define ZLG7290_Key	         0x01		//键盘地址
#define LCD_ROLL_UP_KEY       7        //图像上卷
#define LCD_ROLL_DOWN_KEY     1        //图像下卷

#define LCD_Write_Command       0xF8      //写命令(起始命令)
#define LCD_Write_Data      	0xFA     //写数据
#define LCD_Read_State      	0xFC     //读状态

#define LCD_Clear_Screen    	0x01     //清除显示
#define LCD_Reset_Address   	0x02     //地址归位
#define LCD_Cursor_Dir      	0x04     //点设定
#define LCD_Disp_mode  	    	0x08      //显示状态
#define LCD_Cursor_Ctrl     	0x10     //光标或显示移位控制

#define LCD_BasicFun_Set    	0x30     //功能设定(基本指令集动作)
#define LCD_ExtCommand_off      0x34     //扩展功能设定,此命下发送GDRANM地址
#define LCD_ExtCommand_on       0x36     //开启绘图

#define LCD_Picture_UP_Addr  	0x80     //上半屏x起始坐标
#define LCD_Picture_DN_Addr  	0x88     //下半屏x起始坐标
#define LCD_Picture_ROLL_Addr	0xA0     //卷动屏下半屏x起始坐标

//extern void LCD_GDRAM_Clear();
extern void Write_Command_To_LCD(char Command);
extern void	Write_Data_To_LCD(byte Data); 					

//extern void Init_Device();
extern void LCD_Init();
unsigned long int a;
unsigned int pp=0;
unsigned int sp[16];
int Current_Param[2];

/******************************************************
      			转换成电压数值函数
*******************************************************/
void to_Volt()   
{
	a=3300;    //放大1000倍,把小数变为整数
	a=a*pp;	   //pp为传进来的AD转换后的二进制电压值	
	a>>=10;    //最后的电压值=pp*3.3/1024
}
/****************************************************
定时器0溢出中断,每50毫秒溢出一次即采集一次数据
**************************************************/
void Timer0_Over_Interrupt() interrupt 1
{	   		
	static  char p=0;
	TL0     = yy%256;
	TH0		= yy/256;    //初值,计数范围5000
	
	AD0EN  = 1;	
	AD0BUSY=1;           //启动转换
	while(AD0BUSY==1);   //等待结束
	AD0BUSY=1;           //启动转换
	PCA0CPH4 =0x00;
	while(AD0BUSY==1);   //等待结束
	adv.c[0]=ADC0H;
	adv.c[1]=ADC0L;
	sp[p]=adv.i&0x3ff;   //数据放入缓存取A/D转换的有效十位
	p+=1;p&=15;	

	AD0EN  = 0;	

}
/*******************************************************
滤波函数,取16个值,舍弃最大4个值和最小4 个值中间8个取平均
********************************************************/
void filter()
{
	char x=0,y=0;
	unsigned int fil_buf[16];
	unsigned int change;
	for(x=0;x<16;x++) (fil_buf[x]= sp[x]);          /*按从小到大顺序

排列*/
	for(x=0;x<15;x++)
	{
		for(y=x+1;y<16;y++)
		{ 
			if(fil_buf[y]<fil_buf[x])//相邻两个数比较大小
			{    
				change=fil_buf[y];
				fil_buf[y]=fil_buf[x];
				fil_buf[x]=change;
			}
			PCA0CPH4 =0x00;	
		}
		PCA0CPH4 =0x00;	
	}
	for(y=4;y<=12;y++)      //舍弃前4个最小值和后4个最大值
	{	pp+=fil_buf[y];     //对中间8个数求和
		PCA0CPH4 =0x00;	
	}
	pp>>=3;                 ////右移3位是对采集进来滤波后的8个电压总和取平均值
} 

void Data_Transfer()
{
	static unsinged char i=0;
	if(i<15)
	{
		Current_Param[0]=fil_buf[i];
		Current_Param[1]=fil_buf[++i];
	}
	else i=0;
}
/******************************
	????????
******************************/
void bligt_on_off()
{
	static unsigned char cur=0,obj=0;
	unsigned char j,col,b_first,b_later;
	int xi,xj;
	xi=Current_Param[1]-Current_Param[0];
	hp=(unsigned int)a;
  	
  	for(col=0;col<8;col++)
  	{
  		b_first=0x80;
  		b_later=0x80;
   		for(j=0;j<16;j++)   //写16个点后横坐标加一
		{
			
			Data_Transfer();
			if(xi<0)
			{
				xj=Current_Param[0]-Current_Param[1];
				if(xj>64)
				{
					xj=64;
				}
				cur=xj;
			}
			else  if(xi>64)
			{
				xi=64;
				cur=xi;
			}
			else	
				{
					cur=xi;
				}
			obj=cur;	
			if(obj<32)       //上半屏
			{
				Write_Command_To_LCD(LCD_ExtCommand_off); 
				Write_Command_To_LCD(LCD_Picture_UP_Addr+obj);   //纵坐标0x80+xi
				Write_Command_To_LCD(LCD_Picture_UP_Addr+col);    //横坐标
				Write_Command_To_LCD(LCD_BasicFun_Set);
			}
			else             //下半屏
			{
				Write_Command_To_LCD(LCD_ExtCommand_off); 
				Write_Command_To_LCD(LCD_Picture_UP_Addr+obj-32);   //纵坐标0x80+xi
				Write_Command_To_LCD(LCD_Picture_DN_Addr+col);    //横坐标
				Write_Command_To_LCD(LCD_BasicFun_Set);
			}
				if(j<8)
				{	
					Write_Data_To_LCD(b_first);
					Write_Data_To_LCD(0x00);
					b_first>>=1;
				}
				else
				{
					Write_Data_To_LCD(0x00);
					Write_Data_To_LCD(b_later);
					b_later>>=1;
				}
			}
				
		 }
	 }	 
}

void maim( )
{

}

⌨️ 快捷键说明

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