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

📄 lcd._c

📁 ICC LCD波形显示子程序,采用MEGA128单片机
💻 _C
字号:
//ICC-AVR application builder : 2007-5-23 20:55:56
// Target : M128
// Crystal: 16.000Mhz
#include <iom128v.h>
#include <macros.h>
#include "all.h"
#include "pic.h"
#define uchar unsigned char 
#define uint unsigned int 

unsigned char data[8]={0x80,0x40,0x20,0x10,0x08,0x04,0x02,0x01};
unsigned char data2[8]={0x7f,0xbf,0xdf,0xef,0xf7,0xfb,0xfd,0xfe};
char *line1;
char *line2;
char *line3;
char *line4;
//延时程序
void delay(uint x)
     {
	  uint j; uchar i;
	  for(j=0;j<x;j++)
	     {
		  for(i=0;i<110;i++);
		  }
	  }
/**********************************************/
/*液晶发送子程序(串口)
输入数据:要发送的8位数据
输出:无
作者:李怀前
修改时间:2006-05-26
/*********************************************/
void lcm_out(char a)
     {
	  char i,d;
	  for(i=0;i<8;i++)
	     {
		  PORTB&=~BIT(PB1);//E=0
		  d=a&0x80;
		  if(d)
		      PORTB|=BIT(PB0); //R/W=1
		  else
		      PORTB&=~BIT(PB0);//R/W=0
		  a<<=1;
		  PORTB|=BIT(PB1);	//E=1  	  
		  }
	  }
/***********************************************/
/*液晶写控制字程序
输入数据:要写入的8位数据
输出:无
修改时间:2007-5-26
/**********************************************/
void wr_com(uchar a)
     {
	  uchar s,i;
	  s=a&0xf0;
	  lcm_out(0xf8);
	  lcm_out(s);
	  s=a&0x0f;
	  s<<=4;
	  lcm_out(s);
	  for(i=0;i<250;i++)//延时
	     {
		  asm("nop");
		  }
	  }	
/***********************************************/
/*液晶写数据字程序
输入数据:要写入的8位数据
输出:无
修改时间:2007-5-26
/**********************************************/
void wr_date(uchar a)
     {
	  uchar s,i;
	  s=a&0xf0;
	  lcm_out(0xfa);
	  lcm_out(s);
	  s=a&0x0f;
	  s<<=4;
	  lcm_out(s);
	  for(i=0;i<250;i++)//延时
	     {
		  asm("nop");
		  }
	  }
/***********************************************/
/*液晶图形显示子程序
输入数据:要写入的8位数据
输出:无
修改时间:2007-5-26
/**********************************************/
void pic_display(void)
{
 unsigned char *qq;
 unsigned char d1,d2,d3,d4,LCD_X=0x80,LCD_Y=0;
 unsigned int i=0;
 qq=data_buffer;
 for( d1=0; d1<2; d1++ )
 {
    LCD_Y=0x80;
  	for( d2=0; d2<32; d2++)
	{
	 wr_com(0x34);
 	 wr_com(LCD_Y);
 	 wr_com(LCD_X);
 	 wr_com(0X30);
	 for( d3=0; d3<16; d3++ )
	 {
	 wr_date(*qq++);
	 }
	 LCD_Y+=1;
	}
	LCD_X=0x88;
 }
  wr_com(0x36);
  delay(80);
 wr_com(0x30);
 delay(80);
}
/***********************************************/
/*液晶画线子程序
输入数据:要写入的8位数据
输出:无
修改时间:2007-5-26
/**********************************************/
void draw_point(unsigned char X,unsigned char Y,char State) 
{ 
       unsigned char LCD_X=0,LCD_Y=0; 
       unsigned int X_Temp  = 0; 
        unsigned int X_Position = 0; 
		unsigned int byte_adr;
        X_Temp = X; 
        while (X_Temp>7) 
        { 
                X_Position++; 
                X_Temp = X_Temp-8; 
        } 
         
        if (X_Temp<=7) 
        { 
			
		   LCD_X=X_Position;
		   LCD_Y=Y;   
		   byte_adr=LCD_Y*16+LCD_X;
		   
		   if(State==0)
		  {   		   
		  data_buffer[byte_adr]&=data2[X_Temp];
		   } 
		   else
		   { 
		    FFT[byte_adr]|=data[X_Temp];
		    }
						
		  } 
		  }
	  
void draw_line(unsigned int x1,unsigned int y1,unsigned int x2,unsigned int y2)
{
    unsigned int x,y; 
    unsigned int d_x,d_y;     //d_x=x2-x1;d_y=y2-y1;
    int err=0;
    unsigned char temp=0;
    if(y2<y1){x=x1;y=y1;x1=x2;y1=y2;x2=x;y2=y;}
    d_y=y2-y1;
    if (d_y==0)
        {
        if(x1>x2) 
		{x=x1;x1=x2;x2=x;}
        for ( x=x1;x<=x2;x++ )  draw_point(x,y,1);
        }
    else
        {
    if(x2>=x1){temp=1;d_x=x2-x1;}
	else d_x=x1-x2;
    x=x1;y=y1; draw_point(x,y,1);
    if(temp&&(d_y<=d_x))
        while(x!=x2)
            {if(err<0){x=x+1;err=err+(y2-y);}
            else {x=x+1;y=y+1;err=err+(y2-y)-(x2-x);
			  }
             draw_point(x,y,1);
            }
    else if(temp&&(d_y>d_x))
        while(y!=y2)
            {d_x=x2-x;d_y=y2-y; 
            if(err<0){x=x+1;y=y+1;err=err+d_y-d_x;}
            else {y=y+1;err=err-d_x;}
             draw_point(x,y,1);
            }
    else if(!temp&&(d_y<=d_x))
        while(x!=x2)
            {d_x=x-x2;d_y=y2-y; 
            if(err<0){x=x-1;err=err+d_y;}
            else {x=x-1;y=y+1;err=err+d_y-d_x;}
            draw_point(x,y,1);
            }
    else if(!temp &&(d_y>d_x))
        while(y!=y2)
            {d_x=x-x2;d_y=y2-y; 
            if(err<0){x=x-1;y=y+1;err=err+d_y-d_x;}
            else {y=y+1;err=err-d_x;}
            draw_point(x,y,1);
            }
        }    
 }
                          
/***********************************************/
/*液晶初始化程序
输入数据:无
输出:无
修改时间:2007-5-26
/**********************************************/	  	    	   
void lcm_init(void)
     {
	  wr_com(0x30);
	  delay(80);
	  wr_com(0x30);
	  delay(80);
	  wr_com(0x0c);
	  delay(80);
	  wr_com(0x01);
	  delay(80);
	  wr_com(0x60);
	  delay(80);
	  clear_all();
	  }
void clear_all(void)
     {
	  wr_com(0x01);//清屏
	  delay(80);
	  wr_com(0x34);//清屏
	  delay(80);
	  wr_com(0x30);//清屏
	  delay(80);
	  }
//*******************整行显示******************/
void display(void)
     {
	  wr_com(0x80);
	  while(*line1!=0x00)
	       {
		    wr_date(*line1);
			line1++;
		    }
	 wr_com(0x90);
	 while(*line2!=0x00)
	       {
		    wr_date(*line2);
			line2++;
		    }
	 wr_com(0x88);
	 while(*line3!=0x00)
	       {
		    wr_date(*line3);
			line3++;
		    }  	
	 wr_com(0x9d);
	 while(*line4>=0&&*line4<=60)
	       {
		    wr_date(*line4);
			line4++;
		    }  									
	 }

/************************系统初始化start*****************/	
void system_init(void)
     {
	  line1="";
	  line2="";
	  line3="";
	  line4="";
	  lcm_init();
	  }

⌨️ 快捷键说明

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