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

📄 display.c

📁 sed1335液晶驱动器源码
💻 C
📖 第 1 页 / 共 3 页
字号:
/***************************************************
NAME:DISPLAY.c
Function:液晶的初始化、基本子程序
TIME: 2 Dec,2004
/RD========PA2       A0===========PA4
/WR========PA0       /LC_CS======PA3
LCD_RST====PA5       
D0=========PB0       D1==========PB1
D2=========PB2       D3==========PB3
D4=========PB4       D5==========PB5
D6=========PB6       D7==========PB7

Controller Chip: SED1335Clock 
Frequency      : 24 MHz
Cpu Model      : MC9S12DT128 
COMPILED       : codewarrior for hc12
*******************************************************/

#include "stdio.h"
#include "stdlib.h"
#include "math.h"
#include "string.h"
#include <mc9s12dt128.h>
#include "variable.H"
//*----------------------LCD initial parameters-----------------------*//
unsigned char SYSTAB[8]={0x30,0x87,0x07,0x27,0x5f,0xc8,0x28,0x00};
unsigned char SCRTAB[10]={0x00,0x00,0xf0,0x00,0x40,0xf0,0x00,0x80,0x00,0x00};
/*-----------------------------------------------------------------------/
函数名称:LCD_delay_us()
功能:延时
参数:unsigned char count
返回值:无
/-----------------------------------------------------------------------*/
void lcd_delay_us(unsigned char count)
{
   unsigned char i;
   for(i=0;i<count;i++){
     NOP();
    }
}
/*-----------------------------------------------------------------------/
函数名称:variable_init()
功能:初始化变量
参数:
返回值:无
/-----------------------------------------------------------------------*/
void variable_init(void)
{
   flag_m_indi=0;
   lcd_clock[0]=0x31;//初始化lcd_clock[];
   lcd_clock[1]=0x32;
   lcd_clock[2]=0x3a;
   lcd_clock[3]=0x30;
   lcd_clock[4]=0x30;
   lcd_clock[6]=0x00;
   
   lcd_lich[0]=0x20;//初始化lcd_lich[];
   lcd_lich[1]=0x20;
   lcd_lich[2]=0x30;
   lcd_lich[3]=0x2e;
   lcd_lich[4]=0x30;
   lcd_lich[5]=0x00;
   
   lcd_rev[0]=0x20;//初始化lcd_rev[];
   lcd_rev[1]=0x20;
   lcd_rev[2]=0x20;
   lcd_rev[3]=0x20;
   lcd_rev[4]=0x20;
   lcd_rev[5]=0x20;
   lcd_rev[6]=0x30;
   lcd_rev[7]=0x00;
   
   lcd_in_temp[0]=0x20;//初始化lcd_itemp[];
   lcd_in_temp[1]=0x30;
   lcd_in_temp[2]=0x30;
   lcd_in_temp[3]=0x00;
   
   lcd_out_temp[0]=0x2d;//初始化lcd_itemp[];
   lcd_out_temp[1]=0x31;
   lcd_out_temp[2]=0x30;
   lcd_out_temp[3]=0x00;
    
   DJJ_delay_counter_key=0;
	 flag_time=0;
	 flag_failure=0;
	 flag_clock_flash=0;
	 flag_clock_set_flash=0;
	 flag_key_ph=0;
	 lcd_second=0;
	 lcd_km_lich[0]=0;
	 gloat_m=0;
	 lcd_km_rev[0]=999990;
	 lcd_tempe[0]=0;
	 DJJ_delay_counter_second=0;
	 failure_num=0;//错误类型
}

/*-----------------------------------------------------------------------/
函数名称:LCD_READ_busy()
功能:读出lcd状态
参数:无
返回值:lcd_state
/-----------------------------------------------------------------------*/
unsigned char LCD_READ_busy(void)
{
    unsigned char lcd_state;
    A0_clr();
    LCD_CS_clr();
    WR_set();
    RD_clr();
    DDRB=0x00;
    lcd_state=PORTB;
    RD_set();   
    LCD_CS_set();
    lcd_state&=0x40;
    return lcd_state;
}
/*-----------------------------------------------------------------------/
函数名称:LCD_READ_busy_timout()
功能:读出lcd状态
参数:无
返回值:备用
/-----------------------------------------------------------------------*/
unsigned char  LCD_READ_busy_timeout(void)
{
    unsigned int busy_count;
    for(busy_count=0;busy_count<500;busy_count++){
    	   if(LCD_READ_busy()==0x00)return 1;
    	}
    return 0;
}
/*-----------------------------------------------------------------------/
函数名称:LCD_READ_idel_timout()
功能:读出lcd状态
参数:无
返回值:
/-----------------------------------------------------------------------*/
unsigned char  LCD_READ_idel_timeout(void)
{
    unsigned int busy_count;
    for(busy_count=0;busy_count<500;busy_count++){
    	   if(LCD_READ_busy()==0x40)return 1;
    	}
    return 0;	
}
/*-----------------------------------------------------------------------/
函数名称:LCD_fault()
功能:判断lcd故障
参数:无
返回值:
/-----------------------------------------------------------------------*/
unsigned char  LCD_fault(void)
{
    unsigned int lcd_a,lcd_b,lcd_c;
    lcd_a=LCD_READ_busy_timeout();
    if(lcd_a==0)return 0;
    lcd_b=LCD_READ_idel_timeout();
    lcd_c=lcd_a&&lcd_b;
    return lcd_c;
}
/*-----------------------------------------------------------------------/
函数名称:LCD_WRITE_COM()
功能:写入lcd控制命令
参数:unsigned char com
返回值:无
/-----------------------------------------------------------------------*/
void LCD_WRITE_COM(unsigned char com )//写命令
{
     DDRB=0xff;
     PORTB=com;
     LCD_CS_clr();
     A0_set();                        
     WR_clr();          
     WR_set();
     LCD_CS_set();
} 
/*-----------------------------------------------------------------------/
函数名称:LCD_WRITE_DATA()
功能:写入lcd参数与数据
参数:unsigned char ref
返回值:无
/-----------------------------------------------------------------------*/
void LCD_WRITE_DATA(unsigned char ref )//写数据
{
   DDRB=0xff;      
   PORTB=ref;
   LCD_CS_clr();
   A0_clr();	      
   WR_clr();             
   WR_set();   
   LCD_CS_set();   
} 
/*-----------------------------------------------------------------------/
函数名称:lcd_CLRVRAM()
功能:显示存储器清零
参数:无
返回值:无
/-----------------------------------------------------------------------*/
void lcd_CLRVRAM(void) 
{
	unsigned int i,j;
	LCD_WRITE_COM(0x4c);
	LCD_WRITE_COM(CSRW);
	//DDRB=0xff;
	LCD_WRITE_DATA(0x00);
	LCD_WRITE_DATA(0x00);
	LCD_WRITE_COM(MWRITE);
	//DDRB=0xff;
	for(i=0;i<=0x80;i++){
			for(j=0;j<=0xff;j++){
				  LCD_WRITE_DATA(0x00);
			  }
		}
}
/*-----------------------------------------------------------------------/
函数名称:lcd_CLRSCREEN()
功能:清除显示屏幕
参数:无
返回值:无
/-----------------------------------------------------------------------*/
void lcd_CLRSCREEN(void)
{
	unsigned int i,j;
	LCD_WRITE_COM(CSRRGT);
	LCD_WRITE_COM(CSRW);
	LCD_WRITE_DATA(0X00);
	LCD_WRITE_DATA(0X00);
	LCD_WRITE_COM(MWRITE);
	for(i=0;i<200;i++){
			for(j=0;j<40;j++){
				  LCD_WRITE_DATA(0x00);
				}
		}
}
/*-----------------------------------------------------------------------/
函数名称:lcd_display_ON()
功能:屏幕开
参数:屏幕开参数
返回值:无
/-----------------------------------------------------------------------*/
void lcd_display_ON(unsigned char data)
{
	LCD_WRITE_COM(DISPON);
	LCD_WRITE_DATA(data);
}
/*-----------------------------------------------------------------------/
函数名称:lcd_display_OFF()
功能:屏幕关
参数:屏幕开参数
返回值:无
/-----------------------------------------------------------------------*/
void lcd_display_OFF(unsigned char data)
{
	LCD_WRITE_COM(DISPOFF);
	LCD_WRITE_DATA(data);
}

/*-----------------------------------------------------------------------/
函数名称:lcd_INTI()
功能:初始化lcd
参数:无
返回值:无
/-----------------------------------------------------------------------*/
void lcd_INIT(void) 
{
	unsigned char b;
	DDRA=0xff;
	DDRB=0xff;
	LCD_RST_clr();
	for(b=0;b<100;b++){
	    asm{
	       nop
	    }
	}
	LCD_RST_set();
	for(b=0;b<100;b++){
	    asm{
	      nop
	    }
	}
	LCD_LED_set();
	RD_set();
	A0_set();
	WR_set();
	LCD_CS_clr();
	LCD_WRITE_COM(SYSSET);
	for(b=0;b<8;b++){
		   LCD_WRITE_DATA(SYSTAB[b]);
		}
	LCD_WRITE_COM(SCROLL);
	for(b=0;b<10;b++){
		   LCD_WRITE_DATA(SCRTAB[b]);
	  }		
	LCD_WRITE_COM(HDOTSCR);
	LCD_WRITE_DATA(0X00);
	LCD_WRITE_COM(OVLAY);
	LCD_WRITE_DATA(0X0c);
	LCD_WRITE_COM(DISPOFF);
	LCD_WRITE_DATA(0X55);
	lcd_CLRVRAM();
	LCD_WRITE_COM(CSRFORM);
	LCD_WRITE_DATA(0X00);
	LCD_WRITE_DATA(0X00);
	LCD_WRITE_COM(DISPON);
} 
/*-----------------------------------------------------------------------/
函数名称:lcd_start()
功能:设置显示的初始位置
参数:初始的行、列、光标的移动方向
返回值:无
//-----------------------------------------------------------------------*/
void lcd_start(unsigned int x,unsigned int y,unsigned char diec)
{
  unsigned int temp;
	unsigned char hi,lo;
	temp=y*AP+x;
	hi=(unsigned char)(temp>>8);
	lo=(unsigned char)temp;
	LCD_WRITE_COM(diec);
	LCD_WRITE_COM(CSRW);
	LCD_WRITE_DATA(lo);
	LCD_WRITE_DATA(hi);
}
/*-----------------------------------------------------------------------/
函数名称:lcd_FillScreen()
功能:屏幕充满
参数:无
返回值:无
/-----------------------------------------------------------------------*/
void lcd_FillScreen(void)//充满屏幕
{
  unsigned char i,j;
	LCD_WRITE_COM(CSRRGT);
	LCD_WRITE_COM(CSRW);
	LCD_WRITE_DATA(0X00);
	LCD_WRITE_DATA(0X00);
	LCD_WRITE_COM(MWRITE);
	for(i=0;i<0xf0;i++){
			for(j=0;j<AP;j++){
				  ////LCD_READ_busy_timeout();
		     	////LCD_READ_busy_timeout();
				  LCD_WRITE_DATA(0x00);
				}
		}
}
/*-----------------------------------------------------------------------/
函数名称:lcd_clr_row()
功能:lcd清屏
参数:起始位置,行数、列数、层数
返回值:无
/-----------------------------------------------------------------------*/
void lcd_clr_row(unsigned char x,unsigned char y,unsigned char col,unsigned char row,unsigned int page)
{
    unsigned int i;
    unsigned char m;
    for(m=0;m<col;m++){
	    lcd_start(x+m+page,y,CSRDOWN);
	    LCD_WRITE_COM(MWRITE);    
	    for(i=0;i<row;i++){
	      ////LCD_READ_busy_timeout();
		    ////LCD_READ_busy_timeout(); 
	      LCD_WRITE_DATA(0xff);
	     }
     }  
}
/*-----------------------------------------------------------------------/
函数名称:lcd_move_left()
功能:字符向左移动N个象素(1-7)阳码
参数:字符左半部存储区、字符右半部存储区、行数、字符向左移动的像素
返回值:无
/-----------------------------------------------------------------------*/
void lcd_move_left_yang(unsigned char *left,unsigned char *right,
                   unsigned char row_count,unsigned char digit)
{
     unsigned char i;
     unsigned int middle;
     for(i=0;i<row_count;i++){
       middle=(int)left[i];
       middle=middle<<digit;
       left[i]=((char)(middle>>8))|(0xff<<digit);         
       right[i]=((char)middle)|(0xff>>(8-digit));
     }
     
}
/*-----------------------------------------------------------------------/
函数名称:lcd_move_left()
功能:字符向左移动N个象素(1-7)阴码
参数:字符左半部存储区、字符右半部存储区、行数、字符向左移动的像素
返回值:无
/-----------------------------------------------------------------------*/
void lcd_move_left_yin(unsigned char *left,unsigned char *right,
                   unsigned char row_count,unsigned char digit)
{
     unsigned char i;
     unsigned int middle;
     for(i=0;i<row_count;i++){
         middle=(int)left[i];
         middle=middle<<digit;
         left[i]=(char)(middle>>8);
         right[i]=(char)middle;
     }
}

⌨️ 快捷键说明

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