📄 lcd.c~
字号:
/*********************************************************************
*
* Copyright:
* MOTOROLA, INC. All Rights Reserved.
* You are hereby granted a copyright license to use, modify, and
* distribute the SOFTWARE so long as this entire notice is
* retained without alteration in any modified and/or redistributed
* versions, and that such modified versions are clearly identified
* as such. No licenses are granted by implication, estoppel or
* otherwise under any patents or trademarks of Motorola, Inc. This
* software is provided on an "AS IS" basis and without warranty.
*
* To the maximum extent permitted by applicable law, MOTOROLA
* DISCLAIMS ALL WARRANTIES WHETHER EXPRESS OR IMPLIED, INCLUDING
* IMPLIED WARRANTIES OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR
* PURPOSE AND ANY WARRANTY AGAINST INFRINGEMENT WITH REGARD TO THE
* SOFTWARE (INCLUDING ANY MODIFIED VERSIONS THEREOF) AND ANY
* ACCOMPANYING WRITTEN MATERIALS.
*
* To the maximum extent permitted by applicable law, IN NO EVENT
* SHALL MOTOROLA BE LIABLE FOR ANY DAMAGES WHATSOEVER (INCLUDING
* WITHOUT LIMITATION, DAMAGES FOR LOSS OF BUSINESS PROFITS, BUSINESS
* INTERRUPTION, LOSS OF BUSINESS INFORMATION, OR OTHER PECUNIARY
* LOSS) ARISING OF THE USE OR INABILITY TO USE THE SOFTWARE.
*
* Motorola assumes no responsibility for the maintenance and support
* of this software
********************************************************************/
/*
* File: lcd.c
*
* Purpose: Contains the functions that drive characters and
* graphical bitmaps out to the LCD module.
*
* Notes:
*
* Modifications:
*
*/
#define _LCD_H
#include "mcf5249.h"
#include "lcd.h"
/*--- Take the LCD out of reset---*/
void SetLCDReset(void)
{
MCF5249_SIM_GPIO1_OUT |= LCD_RST;
}
/*--- Put the LCD into reset ---*/
void ClearLCDReset(void)
{
MCF5249_SIM_GPIO1_OUT &= ~LCD_RST;
}
/*--- Write a byte into the LCD ---*/
void WriteLCDByte(uint8 data, uint8 rs)
{
uint16 tmp;
uint16 qspiCommand = 0x0100; // QSPICS0 active high
if(rs)
qspiCommand |= 0x0200; // set QSPICS1 to match rs
while(MCF5249_QSPI_QDLYR & 0x8000)
; // wait for any previous transmit to complete
MCF5249_QSPI_QAR = 0x0020; // command buffer
MCF5249_QSPI_QDR = qspiCommand;
MCF5249_QSPI_QAR = 0x0000; // transmit buffer
MCF5249_QSPI_QDR = (uint16)data;
MCF5249_QSPI_QDLYR |= 0x8000; // initiate transfer
}
/*--- Initialise the LCD module ---*/
void LCDInit(void)
{
// SetupLCDPortPins();
SetLCDReset(); // TAKE LCD MODULE OUT OF RESET
delay(200);
/*--- SET ADC, SHL AND LCD BIAS HERE IF REQUIRED ---*/
WriteLCDByte(LCD_ADC,LCD_CTRL);
WriteLCDByte(LCD_SHL_NORMAL,LCD_CTRL);
WriteLCDByte(LCD_BIAS_SELECT,LCD_CTRL); // 1/49 DUTY ; 1/8 BIAS
/*--- CORRECT POWER SEQUENCE, SWITCH ON VOLTAGE CONVERTER, THEN REGULATOR,
THEN FOLLOWER, WITH 1msec MINIMUM DELAY BETWEEN EACH STAGE ---*/
WriteLCDByte(LCD_PWR_CTRL_VC,LCD_CTRL);
delay(200);
WriteLCDByte(LCD_PWR_CTRL_VR,LCD_CTRL);
delay(200);
WriteLCDByte(LCD_PWR_CTRL_VF,LCD_CTRL);
delay(200);
/*--- SET REGULATOR RESISTOR AND VOLTAGE REFERENCE REGISTER HERE IF REQUIRED ---*/
WriteLCDByte((LCD_REG_RSEL | 0x00),LCD_CTRL); // MAX 0x07
WriteLCDByte(LCD_SET_REF_VM,LCD_CTRL);
WriteLCDByte((LCD_SET_REF_VR | 0x00),LCD_CTRL); // MAX 0x3F
delay(200);
LCDClear(); //Clears the LCD display RAM
WriteLCDByte(LCD_DON,LCD_CTRL); //Turn on the LCD
}
/*--- Clear the LCD display RAM ---*/
void LCDClear(void)
{
int i, j;
for(i=0; i<9; i++)
{
WriteLCDByte((LCD_PAGE | (uint8)i),LCD_CTRL); //Set page
WriteLCDByte((LCD_COL_MSB | 0x00),LCD_CTRL); //Set column address MSB
WriteLCDByte((LCD_COL_LSB | 0x00),LCD_CTRL); //Set column address LSB
for(j=0 ; j < 132 ; j++) //Write 0x00 to each column in the page
{
WriteLCDByte(0x00,LCD_DATA);
}
}
}
/*--- Scroll the LCD display once vertically ---*/
void LCDScroll(uint8 times)
{
uint8 i, j;
for(j=0; j<times; j++)
{
for(i=0; i<64; i++) //Scrolls the display contents
{
WriteLCDByte((LCD_INIT_DLINE | (uint8)i),LCD_CTRL); //Select RAM line for COM1
delay(10000);
}
}
}
/*--- Turn the LCD OFF ---*/
void LCDOff(void)
{
WriteLCDByte(LCD_DOFF, LCD_CTRL); //Turns the LCD OFF
}
/*--- Turn the LCD ON ---*/
void LCDOn(void)
{
WriteLCDByte(LCD_DON,LCD_CTRL); //Turn the LCD ON
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -