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

📄 lcd.c

📁 AT91RM3400芯片 ROM引导程序
💻 C
字号:
//*----------------------------------------------------------------------------
//*      ATMEL Microcontroller Software Support  -  ROUSSET  -
//*----------------------------------------------------------------------------
//* The software is delivered "AS IS" without warranty or condition of any
//* kind, either express, implied or statutory. This includes without
//* limitation any warranty or condition with respect to merchantability or
//* fitness for any particular purpose, or against the infringements of
//* intellectual property rights of others.
//*----------------------------------------------------------------------------
//* File Name           : lcd.c
//* Object              : Audio extention board lcd Drivers
//*
//* Creation            : FB   26/11/2002
//*----------------------------------------------------------------------------

#include    "lcd.h"

//*----------------------------------------------------------------------------
//* \fn    AT91F_WriteLCD
//* \brief Write a lcd command or data
//*----------------------------------------------------------------------------
void AT91F_WriteLCD(unsigned char Byte2Write, unsigned char arg)
{
   	AT91C_BASE_SPI->SPI_PTCR = AT91C_PDC_RXTDIS + AT91C_PDC_TXTDIS;

	// Initialize LCD Driver command
    AT91C_BASE_SPI->SPI_MR &=0xFFF0FFFF;

    if(arg == COMMAND)
    	AT91C_BASE_SPI->SPI_MR |= AT91C_LCD_DRIVER_COMMAND;
    else // arg == DATA
    	AT91C_BASE_SPI->SPI_MR |= AT91C_LCD_DRIVER_DATA;

	while ( (AT91C_BASE_SPI->SPI_SR) & AT91C_SPI_TDRE == 0)
	{};

   	// Initialize the Transmit Pointer
    //AT91C_BASE_SPI->SPI_RPR = (unsigned int) &Byte2Write;
    AT91C_BASE_SPI->SPI_TPR = (unsigned int) &Byte2Write;

    // Intialize the Transmit Counter
    //AT91C_BASE_SPI->SPI_RCR = 1;
    AT91C_BASE_SPI->SPI_TCR = 1;
     	    
   	AT91C_BASE_SPI->SPI_PTCR = AT91C_PDC_TXTEN;
}

//*----------------------------------------------------------------------------
//* \fn    AT91F_Lcd_init
//* \brief lcd initialisation
//*----------------------------------------------------------------------------
void AT91F_Lcd_init(void)
{
	int i;

	AT91F_WriteLCD(RESET,COMMAND);				// Reset LCD 0xE2
	AT91F_WriteLCD(ADC_NORMAL_DIR,COMMAND);		// Set ADC 0xA0
	AT91F_WriteLCD(SHL_REVERSE_DIR,COMMAND);	// Set ADC 0xC0
	AT91F_WriteLCD(LCD_BIAS_1_9,COMMAND);		// Set bias 0xA2
	
	for(i=0;i<10000;i++)
		AT91F_WriteLCD(POWER_CONTROL_SET | INT_VOLT_CONV_ON,COMMAND);

	for(i=0;i<10000;i++);
	
	AT91F_WriteLCD(POWER_CONTROL_SET | INT_VOLT_CONV_ON | INT_VOLT_REG_ON ,COMMAND);
	
	for(i=0;i<10000;i++);
	
	AT91F_WriteLCD(POWER_CONTROL_SET | INT_VOLT_CONV_ON | INT_VOLT_REG_ON | INT_VOLT_FOLLO_ON,COMMAND);		//
	
	for(i=0;i<10000;i++);

	AT91F_WriteLCD(RES_RATIO_5_5,COMMAND);
	AT91F_WriteLCD(REF_VOLT_MODE,COMMAND);		
	AT91F_WriteLCD(0x15,COMMAND);
	
	// We clear the display before to turn it on
	AT91F_WriteLCD(AT91C_DISPLAY_ON,COMMAND);	// Set Display
}

//*----------------------------------------------------------------------------
//* \fn    AT91F_LcdClear
//* \brief Clear the LCD
//*----------------------------------------------------------------------------
void AT91F_LcdClear(void)
{
	unsigned int page = 0 ;
	unsigned int column = 0 ;
	
	AT91F_WriteLCD(AT91C_INITIAL_DISPLAY_LINE_0,COMMAND);

	AT91F_WriteLCD(AT91C_DISPLAY_OFF,COMMAND);

	for(page=0;page<AT91C_NUMBER_OF_PAGES;page++)
	{
		
		AT91F_WriteLCD(AT91C_PAGE_ADDR_0 + page,COMMAND);
		AT91F_WriteLCD(AT91C_COLUMN_ADDR_MSB,COMMAND);
		AT91F_WriteLCD(AT91C_COLUMN_ADDR_LSB,COMMAND);

		for(column=0;column<AT91C_NUMBER_OF_COLUMNS;column++)
		{
			AT91F_WriteLCD(0x00,DATA);
		};
		
	};

	AT91F_WriteLCD(AT91C_DISPLAY_ON,COMMAND);
}

//*----------------------------------------------------------------------------
//* \fn    AT91F_LcdDisplayImage
//* \brief Display an array of char
//*----------------------------------------------------------------------------
void AT91F_LcdDisplayImage(unsigned char *image)
{
	unsigned int page = 0 ;
	unsigned int column = 0 ;
	unsigned int i = 0 ;
	
	
	AT91F_LcdClear() ;

	AT91F_WriteLCD(AT91C_DISPLAY_OFF,COMMAND);		
	AT91F_WriteLCD(ADC_NORMAL_DIR,COMMAND);	
	AT91F_WriteLCD(SHL_REVERSE_DIR,COMMAND);	

	AT91F_WriteLCD(AT91C_INITIAL_DISPLAY_LINE_0,COMMAND);

	i = 0 ;
	for(page=0;page<AT91C_NUMBER_OF_PAGES;page++)
    {

		AT91F_WriteLCD(AT91C_PAGE_ADDR_0 + page,COMMAND);
		AT91F_WriteLCD(AT91C_COLUMN_ADDR_MSB,COMMAND);
		AT91F_WriteLCD(AT91C_COLUMN_ADDR_LSB,COMMAND);
		
		for(column=0;column<AT91C_NUMBER_OF_COLUMNS;column++)
        {
            AT91F_WriteLCD(image[i],DATA);
            i++ ;
        }
    }
	AT91F_WriteLCD(AT91C_DISPLAY_ON,COMMAND);        
}

//*----------------------------------------------------------------------------
//* \fn    AT91F_Write_Char
//* \brief Write a char on LCD
//*----------------------------------------------------------------------------
void AT91F_Write_Char(unsigned int width, unsigned char val)
{
	unsigned int 	j;
	
	// write the char with the correct width
	for(j=0;j<width;j++)
		AT91F_WriteLCD(Font_5x8_Tianma[val-0x20][j][0],DATA);

	/* Turn on the display to see the new letter. */
	AT91F_WriteLCD(AT91C_DISPLAY_ON,COMMAND);
}

//*----------------------------------------------------------------------------
//* \fn    AT91F_Lcd_put_string
//* \brief Write a line on LCD
//*----------------------------------------------------------------------------
void AT91F_Lcd_put_string(unsigned char line, char * val)
{
	unsigned char column;
	
	AT91F_WriteLCD (AT91C_INITIAL_DISPLAY_LINE_0,COMMAND);
	AT91F_WriteLCD (AT91C_PAGE_ADDR_0 + line,COMMAND);
	
	AT91F_WriteLCD (AT91C_COLUMN_ADDR_MSB,COMMAND);
	AT91F_WriteLCD (AT91C_COLUMN_ADDR_LSB,COMMAND);
	
	for(column=0;column<AT91C_NUMBER_OF_COLUMNS;column++)
		AT91F_WriteLCD(0x00,DATA);
	
	AT91F_WriteLCD (AT91C_INITIAL_DISPLAY_LINE_0,COMMAND);
	AT91F_WriteLCD (AT91C_COLUMN_ADDR_MSB,COMMAND);
	AT91F_WriteLCD (AT91C_COLUMN_ADDR_LSB,COMMAND);
	
	while ( *val != 0)
	{
		AT91F_Write_Char(AT91C_LCD_FONT_WIDTH,(unsigned char)* val);
		val++;
	}
}

⌨️ 快捷键说明

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