機(jī)電之家資源網(wǎng)
單片機(jī)首頁(yè)|單片機(jī)基礎(chǔ)|單片機(jī)應(yīng)用|單片機(jī)開(kāi)發(fā)|單片機(jī)文案|軟件資料下載|音響制作|電路圖下載 |嵌入式開(kāi)發(fā)
培訓(xùn)信息
贊助商
240x128液晶T6963控制器驅(qū)動(dòng)程序
240x128液晶T6963控制器驅(qū)動(dòng)程序
 更新時(shí)間:2010-1-28 11:34:41  點(diǎn)擊數(shù):0
【字體: 字體顏色

#include "absacc.h"
#include "math.h"


#include "ASCII816.h" //標(biāo)準(zhǔn)ASCII庫(kù)
#include "HZTable.h"  //漢字點(diǎn)陣庫(kù)(自做)
#include "menu.h"     //菜單庫(kù)(自做)

#define ComPort 0xB101
#define DataPort 0xB000
#define GraphAddr 0x0000 //head of graph

//以8*8字符計(jì)算,顯示屏橫向、縱向可以顯示的字符個(gè)數(shù)
//以240*128為例:
#define LineChar 30 //一行16個(gè)字符(8*8)
#define ColumnChar 16 //總共16列


//指令,數(shù)據(jù) 讀寫(xiě)狀態(tài)檢查
#define RWCheck() { unsigned char sta; do{ sta=XBYTE[ComPort] & 0x03; } while(sta!=0x03); }
//數(shù)據(jù)自動(dòng)讀 狀態(tài)檢查
#define AutoRCheck() { unsigned char sta; do{ sta=XBYTE[ComPort] & 0x04; } while(sta!=0x04); }
//數(shù)據(jù)自動(dòng)寫(xiě) 狀態(tài)檢查
#define AutoWCheck() { unsigned char sta; do{ sta=XBYTE[ComPort] & 0x08; } while(sta!=0x08); }

/*------輸入/出函數(shù),與T6963通訊------------------------------------------------*/
/*------------------------------------------------------------------------*/

// 向數(shù)據(jù)口發(fā)Data
#define OutPortData(dat ) { RWCheck(); XBYTE[DataPort]=dat; }

//寫(xiě)有 1 個(gè)參數(shù)命令
#define OutPortCom1(command) { RWCheck(); XBYTE[ComPort]= command; }

//寫(xiě)有 2 個(gè)參數(shù)命令
#define OutPortCom2(dat, command) { OutPortData(dat); OutPortCom1(command); }

//寫(xiě)有 3 個(gè)參數(shù)命令
#define OutPortCom3(data1, data2, command) { OutPortData(data1); OutPortData(data2); OutPortCom1(command);}


unsigned char InPortData() { RWCheck(); return(XBYTE[DataPort]); }

/*-----------------------------------------------------------------------------------*/
//顯示8*16字符
//lin:行(0-7), column: 列(0-15)
//ch:字符代碼(標(biāo)準(zhǔn)ASCII碼)
void ShowChar(unsigned char lin,unsigned char column,unsigned char ch)
{
unsigned char i;
unsigned char dat;
unsigned int StartAddr;

StartAddr=lin*LineChar +column; //定位起始行

for(i=0;i<16;i++)
{
dat=ASCII816[ ch-0x20 ][i];
OutPortCom3( (unsigned char)(StartAddr), (unsigned char)(StartAddr>>8), 0x24); //set address
OutPortCom2( dat, 0xc4);

StartAddr=StartAddr + LineChar;
}
}

/*----------------------------------------------------------------------------------------------*/
//顯示一個(gè)漢字(16*16點(diǎn)陣)
//lin:行(0-7), column: 列(0-7)
//hzcode: 漢字代碼(自定義的)
void ShowHZ(unsigned char lin,unsigned char column,unsigned int hzcode)
{
unsigned char i;
unsigned int StartAddr;

StartAddr=lin*LineChar + column; //定位起始行

for(i=0;i<16;i++)
{
OutPortCom3( (unsigned char)(StartAddr), (unsigned char)(StartAddr>>8), 0x24);
OutPortCom2( HZTable[hzcode][i*2], 0xc0); //左半部 地址加一
OutPortCom2( HZTable[hzcode][i*2+1], 0xc4); //右半部 字模地址加一

StartAddr=StartAddr + LineChar;
}
}
/////////////////////////////////////////////////////////////////////////////////////////////
//顯示一個(gè)漢字(16*16點(diǎn)陣)
//lin:行(0-7), column: 列(0-7)
//hzcode: 漢字代碼(自定義的)
void ShowHZD(unsigned char lin,unsigned char column,unsigned int hzcode)
{
unsigned char i,j;
unsigned int StartAddr;

StartAddr=lin*LineChar*16 +column; //定位起始行

for(i=0;i<35;i++)
{
OutPortCom3( (unsigned char)(StartAddr), (unsigned char)(StartAddr>>8), 0x24); //定位當(dāng)前操作位置
for(j=0;j<5;j++) OutPortCom2( HZTable[hzcode][i*5+j], 0xc0); //顯示當(dāng)前一行

StartAddr=StartAddr + LineChar;
}
}

////////////////////////////////////////////////////////////////////////////////////////////
/*-----------------------------------------------------------------------------------*/
//顯示一行字符串(漢字,字母混排,一行16字節(jié))
//lin:行
//lineheadaddr: 此行漢字代碼區(qū)首地址
void ShowLine(unsigned char lin,unsigned char column,unsigned char linehead[])
{
unsigned char i,j;
unsigned char byte;
unsigned int hzcode;

for( i= column,j=0; i< column+14 ; )
{ byte=linehead[j];
if(byte < 0x80) //字母
{
ShowChar(lin, i , byte);
i=i+1;j=j+1;
}
else // byte >= 0x80(漢字)
{
byte=byte & 0x7f; //最高位置0,即:減去0x8000
hzcode=byte*256 + linehead[j+1]; //加低8位,組合成整型數(shù)地址
ShowHZ( lin,i,hzcode);
i=i+2;j=j+2;
}
}
}

/*-----------------------------------------------------------------------------------*/
//顯示一屏漢字
//pageheadaddr:此屏漢字代碼地址區(qū)首地址
void ShowPage(unsigned char lin,unsigned char column1,unsigned char pagehead[][14])
{
unsigned char i;
for(i=0;i< 4 ;i++)
ShowLine((lin+i*20),column1,pagehead[i]); //1行8個(gè)漢字,16字節(jié)
}

/*----------------------------------------------------------------------------------------------------*/
//反顯一個(gè)字符
//lin:行(0-7), column: 列(0-15)
void ReverseShowChar(unsigned char lin,unsigned char column)
{
unsigned char i;
unsigned char dat;
unsigned int StartAddr;

StartAddr=lin*LineChar +column; //定位起始行

for(i=0;i<16;i++)
{
OutPortCom3( (unsigned char)(StartAddr), (unsigned char)(StartAddr>>8), 0x24); //set address
OutPortCom1( 0xc5 ); //數(shù)據(jù)一次讀,地址不變
dat=InPortData(); //讀入數(shù)據(jù)
dat=~dat; //取反
OutPortCom2( dat, 0xc4); //送回

StartAddr=StartAddr+ LineChar;
}
}


/*----------------------------------------------------------------------------------------------------*/
//反顯一個(gè)漢字
//lin:行(0-7), column: 列(0-15)
void ReverseShowHZ(unsigned char lin,unsigned char column)
{
ReverseShowChar(lin,column);
ReverseShowChar(lin,column+1);
}
/*----------------------------------------------------------------------------------------------------*/
//反顯一行漢字
//lin:行(0-7)
void ReverseShowLine(unsigned char lin)
{
unsigned char column;
for(column=0; column< ColumnChar; column++) ReverseShowChar(lin,column);
}


//////////////////////////////////////////////////////////////////////////////////////
void ShowPicture(unsigned char Startline,unsigned char Startcolumn,unsigned char LineWidth,unsigned char ColumnWidth,unsigned int address)
{
unsigned char i,j;
unsigned int StartAddr;

StartAddr=Startline*LineChar + Startcolumn; //定位起始位置

for(i=0;i<ColumnWidth;i++)
{

OutPortCom3( (unsigned char)(StartAddr), (unsigned char)(StartAddr>>8), 0x24); //set address
for(j=0;j<LineWidth;j++)
{
OutPortCom2( CBYTE[address + i*LineWidth+ j ], 0xc0);
}
StartAddr=StartAddr + LineChar;
}
}

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////////////////
//圖形函數(shù),用于描點(diǎn)畫(huà)圖
//---------------------------------------------------------------------------
//在指定位置顯示一個(gè)點(diǎn)
//如果顯示屏超過(guò)了256*256,請(qǐng)修改這個(gè)函數(shù) PointX,PointY的類(lèi)型
//Mode 1:顯示 0:清除該點(diǎn)
Pixel(unsigned char PointX,unsigned char PointY, bit Mode)
{
unsigned int StartAddr=0;
unsigned char dat;

StartAddr=PointX*LineChar + PointY/8;
dat=0xf0+7-PointY%8;
if(Mode) dat=dat|0x08;

OutPortCom3( (unsigned char)(StartAddr),(unsigned char)(StartAddr>>8),0x24 ); //設(shè)置該點(diǎn)所在單元地址
OutPortCom1(dat);
}

//-------------------------------------------------------------------------------
//劃線(xiàn)函數(shù)
void Line( unsigned char x1, unsigned char y1, unsigned char x2, unsigned char y2, bit Mode)
{
unsigned char x,y;
double k,b;

if( abs(y1-y2) <= abs(x1-x2) ) // |k|<=1
{
k=(float)(y2-y1) / (float)(x2-x1) ;
b=y1-k*x1;

if( x1 <= x2 )
{
for(x=x1;x<=x2;x++)
{
y=k*x+b;
Pixel(x, y, Mode);
}
}
else
{
for(x=x2;x<=x1;x++)
{ y=k*x+b;
Pixel(x, y, Mode);
}
}
}
else // abs(y1-y2) > abs(x1-x2) |K|>1
{
k=(float)(x2-x1) / (float)(y2-y1) ;
b=x1-k*y1;

if( y1 <= y2 )
{
for(y=y1;y<=y2;y++)
{ x=k*y+b;
Pixel( x , y,Mode );
}
}
else
{
for(y=y2;y<=y1;y++)
{ x=k*y+b;
Pixel( x , y,Mode );
}
}
}
}

 

/*---------------------------------------------------------------------------------------------------*/
void ClearScreen()
{

unsigned int i;
///////// 清顯示 RAM 區(qū) 0000h--2000h (8k)
OutPortCom3(0x00,0x00,0x24); //設(shè)置指針地址0000H

OutPortCom1(0xb0); //設(shè)置自動(dòng)寫(xiě)狀態(tài)
for(i=0x00;i<0x2000;i++) OutPortData(0x00); // data=0;
OutPortCom1(0xb2); // 自動(dòng)寫(xiě)結(jié)束
}

//初始化LCD
//需要手動(dòng)設(shè)置
void InitLCD()
{
OutPortCom3( 0x00,0x00,0x42 ); //設(shè)置圖形顯示區(qū)域首地址GraphAddr
OutPortCom3( 30,0x00,0x43 ); //設(shè)置圖形顯示區(qū)域?qū)挾?: LineChar

// OutPortCom3( 0x00,0x00,0x42 ); //設(shè)置圖形顯示區(qū)域首地址GraphAddr
// OutPortCom3( 0x10,0x00,0x43); //設(shè)置圖形顯示區(qū)域?qū)挾?10H

OutPortCom1(0xa7); //設(shè)置光標(biāo)形狀 cursor size 8x8
OutPortCom1(0x80); //設(shè)置顯示方式: CGROM方式 文本\圖形 "或"
OutPortCom1(0x98); //設(shè)置顯示開(kāi)關(guān): 1001 1100 圖形

ClearScreen();
}

 

  • 上一篇: 時(shí)鐘芯片HT1380讀寫(xiě)c程序
  • 下一篇: 沒(méi)有了
  • 發(fā)表評(píng)論   告訴好友   打印此文  收藏此頁(yè)  關(guān)閉窗口  返回頂部
    熱點(diǎn)文章
     
    推薦文章
     
    相關(guān)文章
    網(wǎng)友評(píng)論:(只顯示最新5條。)
    關(guān)于我們 | 聯(lián)系我們 | 廣告合作 | 付款方式 | 使用幫助 | 機(jī)電之家 | 會(huì)員助手 | 免費(fèi)鏈接

    點(diǎn)擊這里給我發(fā)消息66821730(技術(shù)支持)點(diǎn)擊這里給我發(fā)消息66821730(廣告投放) 點(diǎn)擊這里給我發(fā)消息41031197(編輯) 點(diǎn)擊這里給我發(fā)消息58733127(審核)
    本站提供的機(jī)電設(shè)備,機(jī)電供求等信息由機(jī)電企業(yè)自行提供,該企業(yè)負(fù)責(zé)信息內(nèi)容的真實(shí)性、準(zhǔn)確性和合法性。
    機(jī)電之家對(duì)此不承擔(dān)任何保證責(zé)任,有侵犯您利益的地方請(qǐng)聯(lián)系機(jī)電之家,機(jī)電之家將及時(shí)作出處理。
    Copyright 2007 機(jī)電之家 Inc All Rights Reserved.機(jī)電之家-由機(jī)電一體化網(wǎng)更名-聲明
    電話(huà):0571-87774297 傳真:0571-87774298
    杭州濱興科技有限公司提供技術(shù)支持

    主辦:杭州市高新區(qū)(濱江)機(jī)電一體化學(xué)會(huì)
    中國(guó)行業(yè)電子商務(wù)100強(qiáng)網(wǎng)站

    網(wǎng)站經(jīng)營(yíng)許可證:浙B2-20080178-1