?? lcd.c
字號:
/*--------------------------------------------------*/
/* AVR-ARM開發網論壇 */
/* http://www.avrarm.com */
/* AVR生成代碼測試程序 */
/*--------------------------------------------------*/
/* 程序由AVR輔助開發工具V2.0.0自動生成 */
/* AVR系統的處理器為: ATMega128 */
/* AVR系統的晶振頻率: 7.3728 Mhz */
/*--------------------------------------------------*/
#include <iom128v.h>
#include <macros.h>
#include "lcd.h"
#include "delay.h"
/**********************************************************
Name: void LCDWriteCmd(unsigned char byte)
Description: write a Cmd byte to the LCD
Input: Command (Byte)
Output: none
Misc:
**********************************************************/
void LCDWriteCmd(unsigned char byte)
{
DATAOUT = byte;
A0_H; // A0 -> 1
WR_L; // WR -> 0
WDR();
WR_H; // WR -> 1
}
/**********************************************************
Name: void LCDWriteData(unsigned char byte)
Description: write a data byte to the LCD
Input: unsigned char byte -> data to write on the LCD
Output: none
Misc:
**********************************************************/
void LCDWriteData(unsigned char byte)
{
DATAOUT = byte;
A0_L; // A0 -> 0
WR_L; // WR -> 0
WDR();
WR_H; // WR -> 1
}
/**********************************************************
Name: unsigned char LCDReadData(void)
Description: read a data byte to the LCD
Input: none
Output: unsigned char byte -> Data read from the LCD
Misc:
**********************************************************/
unsigned char LCDReadData(void)
{
unsigned char byte;
int i;
WDR();
DATABUS = 0x00; // Data Port as input
A0_H; // A0 -> 1
delay_us();
RD_L; // RD -> 0
byte = DATAIN; // read byte
byte = DATAIN; // read byte
byte = DATAIN; // read byte
byte = DATAIN; // read byte
RD_H; // RD -> 1
DATABUS = 0xff; // Data Port as output
return byte;
}
/**********************************************************
Name: void LCD_Init(void)
Description: Initialize a graphic of X & Y
Input: #define GUI_LCM_XMAX ...
#define GUI_LCM_YMAX ...
Output: none
Misc:
**********************************************************/
void LCD_Init(void)
{
int i,j;
//LCD Data Bus
DATAOUT = 0x00;
DATABUS = 0xff; // PB0-7 as output
LCD_CS_DDR |= LCD_CS_BIT;
CS_L;
//LCD control Bus
//DDRC |=((1<<RES)+(1<<RD)+(1<<WR));
LCD_RES_DDR |= LCD_RES_BIT;
LCD_RD_DDR |= LCD_RD_BIT;
LCD_WR_DDR |= LCD_WR_BIT;
WR_H; // WR -> 1
RD_H; // RD -> 1
//DDRC |= (1<<A0);
LCD_A0_DDR |= LCD_A0_BIT;
RES_H;
delay_nms(2);
RES_L; // Reset LCD
delay_nms(2);
delay_nms(2);
delay_nms(2);
delay_nms(2);
delay_nms(2);
delay_nms(2);
RES_H;
for (i=0;i<10;i++)
{
delay_nms(2);
}
//SYSTEM SET COMMAND
LCDWriteCmd(SYSTEM_SET); // SYSTEM SET COMMAND
LCDWriteData(0x30); // P1 -> PRT=0, IV=1, W/S=0, M0-M2=0
LCDWriteData(0x87); // FX -> WF=1, FX=7
LCDWriteData(0x07); // FY -> FY=7
LCDWriteData((GUI_LCM_XMAX/8)-1); // C/R -> Char per line - 1
LCDWriteData((XTAL / 70 / GUI_LCM_YMAX) / 9); // TC/R -> ( f_osc / f_frame / [L/F] - 1 ) / 9
//LCDWriteData(0x2f); // TC/R -> ( f_osc / f_frame / [L/F] - 1 ) / 9
LCDWriteData(GUI_LCM_YMAX - 1); // L/F -> Line per graphic screen - 1 (127)
LCDWriteData(GUI_LCM_XMAX/8); // APL -> Virtual screen low byte ( char per line)
LCDWriteData(0x00); // APH -> Virtual screen low byte
//SCROLL COMMAND
LCDWriteCmd(SCROLL); // SCROLL COMMAND
LCDWriteData(0x00); // First Layer Low Byte (0x0000)
LCDWriteData(0x00); // First Layer Hign Byte
LCDWriteData(GUI_LCM_YMAX); // 128 Line of scroll
LCDWriteData(0x00); // Second Layer Low Byte (0x1000)
LCDWriteData(0x10); // Second Layer Hign Byte
LCDWriteData(GUI_LCM_YMAX);// 128 Line of scroll
//HORIZONTAL SCROLL POSITION
LCDWriteCmd(HDOT_SCR); // HORIZONTAL SCROLL POSITION
LCDWriteData(0x00); // no scrool offset
//OVERLAY COMMAND
LCDWriteCmd(OVLAY); // OVERLAY COMMAND
LCDWriteData(0x03); // 2 layer (1-Text 2-Graphic)
//LCDWriteData(0x01); // 2 layer (1-Text 2-Graphic)
//DISPLAY ON/OFF COMMAND
LCDWriteCmd(DISP_OFF); // DISPLAY OFF COMMAND
LCDWriteData(0x14); // Layer 1 & 2 ON
ClrSCR();
GClrSCR();
//CURSOR FORMAT COMMAND
LCDWriteCmd(CSRFORM); // CURSOR FORMAT COMMAND
//LCDWriteData(0x07); // Cursor width (7)
//LCDWriteData(0x87); // Cursor Height(7) & Block type
LCDWriteData(0x04); // Cursor width (7)
LCDWriteData(0x86); // Cursor Height(7) & Block type
//DISPLAY ON/OFF COMMAND
LCDWriteCmd(DISP_ON); // DISPLAY ON COMMAND
LCDWriteData(0x14); // Layer 1 & 2 ON
//CURSOR DIRECTION COMMAND
LCDWriteCmd(CSRDIR1); // CURSOR DIRECTION COMMAND (SHIFT RIGHT)
//CURSOR WRITE COMMAND
LCDWriteCmd(CSRW); // CURSOR WRITE COMMAND
LCDWriteData(0x00); // Cursor position low byte
LCDWriteData(0x00); // Cursor position high byte
}
/**********************************************************
Name: void ClrSCR(void)
Description: Clear Text Screen layer 1
Input: none
Output: none
Misc:
**********************************************************/
void ClrSCR(void)
{
int i,j;
LCDWriteCmd(CSRW); // CURSOR WRITE COMMAND
LCDWriteData(0x00); // Cursor position low byte
LCDWriteData(0x00); // Cursor position high byte
LCDWriteCmd(MWRITE); // LCD WRITE MEMORY
DATAOUT = 0x00;
A0_L; // A0 -> 0
j = ((GUI_LCM_XMAX/8)*(GUI_LCM_YMAX/8));
for (i=0;i<j;i++)
{
WR_L; // WR -> 0
WDR();
WR_H;
}
LCDWriteCmd(CSRW); // CURSOR WRITE COMMAND
LCDWriteData(0x00); // Cursor position low byte
LCDWriteData(0x00); // Cursor position high byte
}
/**********************************************************
Name: void GotoXY(unsigned char x, unsigned char y)
Description: Goto X Y coor
Input: X,Y
Output: none
Misc:
**********************************************************/
void GotoXY(unsigned char x, unsigned char y)
{
int Address;
unsigned char low;
unsigned char high;
x--;
y--;
Address = (y * (GUI_LCM_XMAX/8)) + x;
low = (unsigned char) (Address & 0x00ff);
//high = (unsigned char) ((Address & 0xff00) >> 8);
high = (unsigned char) ((Address & 0xff00) >> 8)+0x10;
LCDWriteCmd(CSRW); // CURSOR WRITE COMMAND
LCDWriteData(low); // Cursor position low byte
LCDWriteData(high); // Cursor position high byte
}
/**********************************************************
Name: void LCDWriteString(unsigned char addr_l,unsigned char addr_h,char *prt)
Description: Write a string to the LCD
Input: Address
String
Output: none
Misc: String must be ended by \0
**********************************************************/
void LCDWriteString(unsigned char addr_l,unsigned char addr_h,char *ptr)
{
int i;
LCDWriteCmd(CSRW); // CURSOR WRITE COMMAND
LCDWriteData(addr_l); // Cursor position low byte
LCDWriteData(addr_h);
LCDWriteCmd(MWRITE); // LCD WRITE MEMORY
while(*ptr != 0x00)
LCDWriteData(*ptr++);
}
void LCDDisplay_bmp(int x,unsigned char y,unsigned char length,const unsigned char *dat)
{
int startAddr=0x0000;
unsigned char LSBa, MSBa,len,wid;
startAddr+=40*y+x/8;
for(wid=0;wid<16;wid++)
{
LSBa=startAddr&0x00FF;
MSBa=(startAddr>>8)+0x10;
LCDWriteCmd(CSRW);
LCDWriteData(LSBa);
LCDWriteData(MSBa);
LCDWriteCmd(CSRDIR1);
LCDWriteCmd(MWRITE);
for(len=0;len<length/8;len++)
{
LCDWriteData(*(dat++));
}
startAddr+=40;
}
}
void LCDWriteConstString(unsigned char x,unsigned char y,const char *ptr)
{
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -