?? sed1520_zongxian.c
字號:
//-----------------------函數聲明--------------------------------------------------------
#include"stdio.h"
#include"absacc.h"
#include"reg51.h"
//-----------------------定義地址--------------------------------------------------------
#define CWADD1 XBYTE[0x8000] // 寫指令代碼地址(E1)
#define CRADD1 XBYTE[0x8200] //讀狀態字地址(E1)
#define DWADD1 XBYTE[0x8100] //寫顯示數據地址(E1)
#define DRADD1 XBYTE[0x8300] // 讀顯示數據地址(E1)
#define CWADD2 XBYTE[0x4000] //寫指令代碼地址(E2)
#define CRADD2 XBYTE[0x4200] //讀狀態字地址(E2)
#define DWADD2 XBYTE[0x4100] // 寫顯示數據地址(E2)
#define DRADD2 XBYTE[0x4300] //讀顯示數據地址(E2)
//-----------------------定義各命令字--------------------------------------------------------
#define LCD_DISPLAYON 0xaf
#define LCD_DISPLAYOFF 0xae
#define LCD_DRIVERON 0xa5
#define LCD_DRIVEROFF 0xa4
#define LCD_DUTY16 0xa8
#define LCD_DUTY32 0xa9
#define LCD_END 0xee
#define LCD_RESET 0xe2
#define LCD_RWMODE 0xe0
#define LCD_STARTLINE0 0xc0
#define LCD_PAGE0 0xb8
#define LCD_COLUMNADDR0 0x00
//-----------------------定義各命令操作--------------------------------------------------------
#define LCD_ON() LCD_Command(LCD_DISPLAYON)
#define LCD_OFF() LCD_Command(LCD_DISPLAYOFF)
#define LCD_StaticON() LCD_Command(LCD_DRIVERON)
#define LCD_StaticOFF() LCD_Command(LCD_DRIVEROFF)
#define LCD_Select16() LCD_Command(LCD_DUTY16)
#define LCD_Select32() LCD_Command(LCD_DUTY32)
#define LCD_StartRW() LCD_Command(LCD_RWMODE)
#define LCD_EndRW() LCD_Command(LCD_END)
#define LCD_Reset() LCD_Command(LCD_RESET)
#define LCD_SetStartLine(i) LCD_Command(LCD_STARTLINE0+i)
#define LCD_SetPage(i) LCD_Command(LCD_PAGE0+i)
#define LCD_SetColumn(i) LCD_Command(LCD_COLUMNADDR0+i)
/*ASCII字體,大小6X8,上到下D0~D7,左到右*/
unsigned char code ASCII[][6]={
{0x00,0x7e,0x21,0x21,0x21,0x7e},/*A*/
{0x00,0x7f,0x49,0x49,0x49,0x36},/*B*/
{0x00,0x3e,0x41,0x41,0x41,0x22},/*C*/
{0x00,0x7f,0x41,0x41,0x22,0x1c},/*D*/
{0x00,0x7f,0x49,0x49,0x49,0x49},/*E*/
{0x00,0x7f,0x09,0x09,0x09,0x01},/*F*/
{0x00,0x3e,0x41,0x49,0x49,0x7a},/*G*/
{0x00,0x7f,0x08,0x08,0x08,0x7f},/*H*/
{0x00,0x41,0x7f,0x41,0x00,0x00},/*I*/
{0x00,0x20,0x40,0x41,0x3f,0x01},/*J*/
{0x00,0x7f,0x08,0x14,0x22,0x41},/*K*/
{0x00,0x7f,0x40,0x40,0x40,0x40},/*L*/
{0x00,0x7f,0x02,0x0c,0x02,0x7f},/*M*/
{0x00,0x7f,0x04,0x08,0x10,0x7f},/*N*/
{0x00,0x3e,0x41,0x41,0x41,0x3e},/*O*/
{0x00,0x7f,0x09,0x09,0x09,0x06},/*P*/
{0x00,0x3e,0x41,0x41,0x41,0x3e},/*Q*/
{0x00,0x7f,0x09,0x19,0x29,0x46},/*R*/
{0x00,0x46,0x49,0x49,0x49,0x31},/*S*/
{0x00,0x01,0x01,0x7f,0x01,0x01},/*T*/
{0x00,0x3f,0x40,0x40,0x40,0x3f},/*U*/
{0x00,0x1f,0x20,0x40,0x20,0x1f},/*V*/
{0x00,0x3f,0x40,0x38,0x40,0x3f},/*W*/
{0x00,0x63,0x14,0x08,0x14,0x63},/*X*/
{0x00,0x07,0x08,0x70,0x08,0x07},/*Y*/
{0x00,0x61,0x51,0x49,0x45,0x43},/*Z*/
};
//--------------------------------------------------------------------------------------------------
// 函數名稱: LCD_Command1
// 入口參數: nCommand 命令字
// 函數功能: 寫指令代碼子程序(SED1520-1)
//--------------------------------------------------------------------------------------------------
void LCD_Command1(unsigned char nCommand)
{
unsigned char state_temp;
while(state_temp&0x80==1) //判"忙"標志為"0"否, 否再讀
state_temp=CRADD1; //設置讀狀態字地址
CRADD1=nCommand; //寫指令代碼
}
//--------------------------------------------------------------------------------------------------
// 函數名稱: WRITE_showDATA1
// 入口參數: show_DATA 寫入SED1520-1內部顯示RAM的數據
// 函數功能: 寫顯示數據子程序(SED1520-1)
//--------------------------------------------------------------------------------------------------
void WRITE_showDATA1(unsigned char show_DATA)
{
unsigned char state_temp;
while(state_temp&0x80==1) //判"忙"標志為"0"否, 否再讀
state_temp=CRADD1; //設置讀狀態字地址
DRADD1=show_DATA; //寫指令代碼
}
//--------------------------------------------------------------------------------------------------
// 函數名稱: READ_showDATA1
// 入口參數: show_DATA 讀出SED1520-1內部顯示RAM的數據
// 函數功能: 讀顯示數據子程序(SED1520-1)
//--------------------------------------------------------------------------------------------------
unsigned char READ_showDATA1()
{
unsigned char show_DATA;
unsigned char state_temp;
while(state_temp&0x80==1) //判"忙"標志為"0"否, 否再讀
state_temp=CRADD1; //設置讀狀態字地址
show_DATA=DRADD1; // 讀數據
return(show_DATA); //返回顯示區數據
}
//--------------------------------------------------------------------------------------------------
// 函數名稱: LCD_Command2
// 入口參數: nCommand 命令字
// 函數功能: 寫指令代碼子程序(SED1520-2)
//--------------------------------------------------------------------------------------------------
void LCD_Command2(unsigned char nCommand)
{
unsigned char state_temp;
while(state_temp&0x80==1) //判"忙"標志為"0"否, 否再讀
state_temp=CRADD2; //設置讀狀態字地址
CRADD2=nCommand; //寫指令代碼
}
//--------------------------------------------------------------------------------------------------
// 函數名稱: WRITE_showDATA2
// 入口參數: show_DATA 寫入SED1520-2內部顯示RAM的數據
// 函數功能: 寫顯示數據子程序(SED1520-2)
//--------------------------------------------------------------------------------------------------
void WRITE_showDATA2(unsigned char show_DATA)
{
unsigned char state_temp;
while(state_temp&0x80==1) //判"忙"標志為"0"否, 否再讀
state_temp=CRADD2; //設置讀狀態字地址
DRADD2=show_DATA; //寫指令代碼
}
//--------------------------------------------------------------------------------------------------
// 函數名稱: READ_showDATA2
// 入口參數: show_DATA 讀出SED1520-2內部顯示RAM的數據
// 函數功能: 讀顯示數據子程序(SED1520-2)
//--------------------------------------------------------------------------------------------------
unsigned char READ_showDATA2()
{
unsigned char show_DATA;
unsigned char state_temp;
while(state_temp&0x80==1) //判"忙"標志為"0"否, 否再讀
state_temp=CRADD2; //設置讀狀態字地址
show_DATA=DRADD2; // 讀數據
return(show_DATA); //返回顯示區數據
}//--------------------------------------------------------------------------------------------------
// 函數名稱: LCD_Command
// 入口參數: nCommand 命令字
// 函數功能: 把命令字寫入兩個SED1520
//--------------------------------------------------------------------------------------------------
void LCD_Command(unsigned char nCommand)
{
LCD_Command1(nCommand);
LCD_Command1(nCommand);
}
//--------------------------------------------------------------------------------------------------
// 函數名稱: LCD_SetRam
// 入口參數: bChip2,ndata
// bChip2用于選擇控制器 bChip2=0選擇SED1520-1
// bChip2=1選擇SED1520-2
// ;ndata是要寫入的數據
// 函數功能: 把顯示數據寫入其中一個SED1520
//--------------------------------------------------------------------------------------------------
void LCD_SetRam(bit bChip2,unsigned char ndata)
{
if(!bChip2)
{
WRITE_showDATA1(ndata);
}
else
{
WRITE_showDATA2(ndata);
}
}
//--------------------------------------------------------------------------------------------------
// 函數名稱: LCD_Write
// 入口參數: npage, ncolumn,ndata
// npage取值0~7;當取0~3時在SED1520-1;
// 當取4~1時在SED1520-2;
// ncolumn取 0~60
// ;ndata是要寫入的數據
// 函數功能: 把顯示數據寫入指定的位置
//--------------------------------------------------------------------------------------------------
void LCD_Write(unsigned char npage,unsigned char ncolumn,unsigned char ndata)
{
LCD_SetPage(npage%4);
LCD_SetColumn(ncolumn);
LCD_SetRam(npage>3,ndata);
}
//--------------------------------------------------------------------------------------------------
// 函數名稱: LCD_PageWrite
// 入口參數: npage,*ndata
// npage取值0~7;當取0~3時在SED1520-1;
// 當取4~1時在SED1520-2;
// *ndata是要寫入的數據的地址指針
// 函數功能: 把顯示數據寫入指定的位置
//--------------------------------------------------------------------------------------------------
void LCD_PageWrite(unsigned char npage,unsigned char idata *ndata)
{
unsigned char i;
bit bChip2=npage>3;
LCD_SetPage(npage%4);
LCD_SetColumn(0);
for(i=0;i<61;i++)
LCD_SetRam(bChip2,ndata[i]);
}
//--------------------------------------------------------------------------------------------------
// 函數名稱: LCD_Init
// 函數功能: 初始化SED1520
//--------------------------------------------------------------------------------------------------
void LCD_Init()
{
LCD_Command(LCD_RESET);
LCD_Command(0xa0);
LCD_Command(LCD_DUTY32);
LCD_Command(0xa4);
}
//--------------------------------------------------------------------------------------------------
// 函數名稱: GetIndex
// 入口參數: szText
// szText表示要顯示的字符
// 返回值: GetIndex
// 要顯示的字符在字摩存儲區的位置(第幾個子模)
// 函數功能: 查詢字符在字模存儲區的位置
//--------------------------------------------------------------------------------------------------
unsigned char GetIndex(unsigned char szText)
{
unsigned char code TAB[100]={ 'A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q'
,'R','S','T','U','V','W','X','Y','Z'};
unsigned char i;
for(i=0;i<=26;i++)
if(szText==TAB[i]) return i;
return 0x00;
}
//--------------------------------------------------------------------------------------------------
// 函數名稱: GetTextFont
// 入口參數: index
// index表示要查詢第幾個字模(所有的子模預先存在程序存儲區)
// 返回值: Font
// 6個字節的font用于存儲字模,返回字模存儲區的首地址
// 函數功能: 查詢字符的字模
//--------------------------------------------------------------------------------------------------
unsigned char *GetTextFont(unsigned char index)
{
static unsigned char Font[6];
unsigned char i;
for(i=0;i<6;i++)
Font[i]=ASCII[index][i];
return Font;
}
//--------------------------------------------------------------------------------------------------
// 函數名稱: LCD_TextOut
// 入口參數: x,y,*szText
// x,y用于指定顯示區的位置
// *szText是要顯示字符字模存儲區的首地址
// 函數功能: 在指定的位置顯示一個字符
//--------------------------------------------------------------------------------------------------
void LCD_TextOut(unsigned char x,unsigned char y,unsigned char *szText)
{
unsigned char i;
bit bChip2;
x%=20;
y%=4;
if(x>=10)
{
x-=10;
y+=4;
}
bChip2=y>3;
LCD_SetPage(y%4);
LCD_SetColumn(x*6);
for(i=0;i<6;i++) LCD_SetRam(bChip2,szText[i]);
}
//--------------------------------------------------------------------------------------------------
// 函數名稱:Printf
// 入口參數: x,y,*szText
// x,y用于指定顯示區的初始位置
// *SHOW_WORD指向要顯示字符數組
// 函數功能: 從指定的位置開始連續顯示字符,最多顯示20個字符
//--------------------------------------------------------------------------------------------------
void Printf(unsigned char x,unsigned char y,unsigned char *SHOW_WORD)
{
unsigned char *Text;
while(*SHOW_WORD)
{
Text=GetTextFont(GetIndex(*SHOW_WORD));
LCD_TextOut(x++,y,Text);
if(x==20) break;
SHOW_WORD++;
}
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -