📄 lcd.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 + -