音影先锋亚洲天堂网|电影世界尽头的爱完整版播放|国产 熟女 91|高清无码免费观看欧美日韩|韩国一区二区三区黄色录像|美女亚洲加勒比在线|亚洲综合网 开心五月|7x成人在线入口|成人网站免费日韩毛片区|国产黄片?一级?二级?三级

登錄 免費(fèi)注冊(cè) 首頁(yè) | 行業(yè)黑名單 | 幫助
維庫(kù)電子市場(chǎng)網(wǎng)
技術(shù)交流 | 電路欣賞 | 工控天地 | 數(shù)字廣電 | 通信技術(shù) | 電源技術(shù) | 測(cè)控之家 | EMC技術(shù) | ARM技術(shù) | EDA技術(shù) | PCB技術(shù) | 嵌入式系統(tǒng)
驅(qū)動(dòng)編程 | 集成電路 | 器件替換 | 模擬技術(shù) | 新手園地 | 單 片 機(jī) | DSP技術(shù) | MCU技術(shù) | IC 設(shè)計(jì) | IC 產(chǎn)業(yè) | CAN-bus/DeviceNe

[分享]128x64液晶KS0108驅(qū)動(dòng)程序(C51)

作者:275124957 欄目:單片機(jī)
/*------------------------------------------------------------------------------------------
[文件名] 12864.c
[功能] 128X64驅(qū)動(dòng)程序
[版本] 2.0
[作者] 鞠春陽(yáng)
[最后修改時(shí)間] 2003年5月12日
[版權(quán)所有]www.mcuzb.com
[資料] 請(qǐng)到www.mcuzb.com下載
===========================================================================================*/

#include "absacc.h"
#include "intrins.h"

//自定義庫(kù) 在"C:\comp51\UserLib\"文件夾中
#include ".\inc\ASCII816.h" //標(biāo)準(zhǔn)ASCII庫(kù)
#include ".\inc\HZTable.h" //漢字點(diǎn)陣庫(kù)(自做)
#include ".\inc\Menu.h" //菜單庫(kù)(自做)


// LCD128*64 數(shù)據(jù)線
#define LCD12864DataPort P1

// LCD128*64 I/O 信號(hào)管腳
sbit di =P3^1; // 數(shù)據(jù)\指令 選擇
sbit rw =P3^3; // 讀\寫(xiě) 選擇
sbit en =P3^2; // 讀\寫(xiě)使能
sbit cs1 =P3^4; // 片選1,低有效(前64列)
sbit cs2 =P3^5; // 片選2,低有效(后64列)

sbit reset=P0^7; // 復(fù)位

/*----------------------------------------------------------------------------------------------------*/
/* ****函數(shù)列表****

//開(kāi)關(guān)顯示
void SetOnOff(unsigned CHAR onoff)

//選擇屏幕
//screen: 0-全屏,1-左屏,2-右
void SelectScreen(unsigned CHAR screen)

//清屏
//screen: 0-全屏,1-左屏,2-右
void ClearScreen(unsigned CHAR screen)

//顯示8*8點(diǎn)陣
//旋轉(zhuǎn)90度:字模被豎著切分
//lin:行(0-7), column: 列(0-15)
//address : 字模區(qū)首地址
void Show88(unsigned CHAR lin,unsigned CHAR column,unsigned int address)

//顯示8*16字符
//旋轉(zhuǎn)90度:字模被豎著切分
//lin:行(0-3), column: 列(0-15)
//CHARacter:字符代碼(標(biāo)準(zhǔn)ASCII碼)
void ShowChar(unsigned CHAR lin,unsigned CHAR column,unsigned CHAR CHARacter)

//顯示8*16字符串
//!!!只能顯示在一行上即: 串長(zhǎng)+column <=15
//旋轉(zhuǎn)90度:字模被豎著切分
//lin:行(0-3), column: 列(0-15)
//address : 字模區(qū)首地址
void ShowString(unsigned CHAR lin,unsigned CHAR column, unsigned CHAR *string)

//顯示一個(gè)漢字
//旋轉(zhuǎn)90度:字模被豎著切分
//lin:行(0-3), column: 列(0-15)
//hzcode: 漢字代碼(自定義的)
void ShowHZ(unsigned CHAR lin,unsigned CHAR column,unsigned int hzcode)

//顯示圖片
//旋轉(zhuǎn)90度 :字模被豎著切分
//startLINE :開(kāi)始行
//startcolumn:開(kāi)始列
//LINECHAR :圖片行點(diǎn)除8(圖片以8*8點(diǎn)陣為單位)
//columnCHAR :圖片列點(diǎn)除8(圖片以8*8點(diǎn)陣為單位)
//address : 字模區(qū)首地址
void ShowPicture(unsigned CHAR startLINE,unsigned CHAR startcolumn,unsigned CHAR LINECHAR,unsigned CHAR columnCHAR,unsigned int address)
//!!問(wèn)題大戶
//顯示一行漢字
//lin:行
//LINEheadaddr: 此行漢字代碼區(qū)首地址
void ShowLine(unsigned CHAR lin,unsigned int LINEheadaddr)

//顯示一屏漢字
//pageheadaddr:此屏漢字代碼地址區(qū)首地址
void ShowPage(unsigned int pageheadaddr)

//反顯一個(gè)8*8字塊
//lin:行(0-3), column: 列(0-7)
void ReverseShow88(unsigned CHAR lin,unsigned CHAR column)


//反顯一個(gè)字符
//lin:行(0-4), column: 列(0-15)
void ReverseShowChar(unsigned CHAR lin,unsigned CHAR column)


//反顯一個(gè)漢字
//lin:行(0-3), column: 列(0-7)
ReverseShowHZ(unsigned CHAR lin,unsigned CHAR column)

//反顯一行漢字
//lin:行
ReverseShow(unsigned CHAR lin)

//初始化LCD
void InitLCD()

****函數(shù)列表結(jié)束**** */
/*----------------------------------------------------------------------------------------------------*/
/*--基本函數(shù)源程序------------------------------------------------------------------------------------*/
//延時(shí)
Lcd12864delay()
{
unsigned int i=500;
while(i--) {;}
}
/*----------------------------------------------------------------------------------------------------*/
//狀態(tài)檢查
void CheckState()
{
unsigned CHAR dat;
di=0;
rw=1;
do{
LCD12864DataPort=0xff;
en=1; dat=LCD12864DataPort; en=0;
dat=0x90 & dat; //僅當(dāng)?shù)?,7位為0時(shí)才可操作
}while(!(dat==0x00));
}
/*----------------------------------------------------------------------------------------------------*/
//寫(xiě)顯示數(shù)據(jù)
//dat:顯示數(shù)據(jù)
void WriteByte(unsigned CHAR dat)
{
CheckState();
di=1; rw=0;
LCD12864DataPort=dat;
en=1; en=0;
}
/*-----------------------------------------------------------------------------------------------------*/
//向LCD發(fā)送命令
//command :命令
SendCommandToLCD(unsigned CHAR command)
{
CheckState();
rw=0;
LCD12864DataPort=command;
en=1; en=0;
}
/*----------------------------------------------------------------------------------------------------*/
//設(shè)定行地址(頁(yè))--X 0-7
void SetLine(unsigned CHAR LINE)
{
LINE=LINE & 0x07; // 0<=LINE<=7
LINE=LINE|0xb8; //1011 1xxx
SendCommandToLCD(LINE);
}
//設(shè)定列地址--Y 0-63
void SetColumn(unsigned CHAR column)
{
column=column &0x3f; // 0=<column<=63
column=column | 0x40; //01xx xxxx
SendCommandToLCD(column);
}
//設(shè)定顯示開(kāi)始行--XX
void SetStartLine(unsigned CHAR startLINE) //0--63
{
startLINE=startLINE & 0x07;
startLINE=startLINE|0xc0; //1100 0000
SendCommandToLCD(startLINE);
}
//開(kāi)關(guān)顯示
void SetOnOff(unsigned CHAR onoff)
{
onoff=0x3e | onoff; //0011 111x
SendCommandToLCD(onoff);
}
/*---------------------------------------------------------------------------------------------------*/
//選擇屏幕
//screen: 0-全屏,1-左屏,2-右屏
void SelectScreen(unsigned CHAR screen)
{ //北京顯示器:負(fù)有效 cs1: 0--右; cs2: 0--左
SWITCH(screen)
{ case 0: cs1=0;//全屏
_nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_();
cs2=0;
_nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_();
break;
case 1: cs1=1;//左屏
_nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_();
cs2=0;
_nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_();
break;
case 2: cs1=0;//右屏
_nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_();
cs2=1;
_nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_();
break;
}
}
/*---------------------------------------------------------------------------------------------------*/
//清屏
//screen: 0-全屏,1-左屏,2-右
void ClearScreen(unsigned CHAR screen)
{ unsigned CHAR i,j;
SelectScreen(screen);
for(i=0;i<8;i++)
{ SetLine(i);
for(j=0;j<64;j++)
{
WriteByte(0x00);
}
}
}
/*--------------------------------------------------------------------------------------------------*/
//顯示8*8點(diǎn)陣
//旋轉(zhuǎn)90度:字模被豎著切分
//lin:行(0-7), column: 列(0-15)
//address : 字模區(qū)首地址
void Show88(unsigned CHAR lin,unsigned CHAR column,unsigned int address)
{ unsigned CHAR i;
if(column>16) {return;}
if(column<8) SelectScreen(1); //如果列數(shù)<8(0,1,2,3,4,5,6,7)則寫(xiě)在第一屏上
else {
SelectScreen(2); //否則 (8,9,10,11,12,13,14,15)寫(xiě)在第二屏上
column=column & 0x07; //防止越界
}
SetLine(lin);
SetColumn(column<<3);
for(i=0;i<8;i++) WriteByte( CBYTE[address+i] );
}
/*------------------------------------------------------------------------------------------------*/
//顯示8*16字符
//旋轉(zhuǎn)90度:字模被豎著切分
//lin:行(0-3), column: 列(0-15)
//CHARacter:字符代碼(標(biāo)準(zhǔn)ASCII碼)
void ShowChar(unsigned CHAR lin,unsigned CHAR column,unsigned CHAR CHARacter)
{ lin=lin<<1;
Show88(lin ,column,ASCII816[CHARacter-0x20] );
Show88(lin+1,column,ASCII816[CHARacter-0x20]+8 );
}
/*-----------------------------------------------------------------------------------------------*/
/*
//顯示8*16字符串
//!!!只能顯示在一行上即: 串長(zhǎng)+column <=15
//旋轉(zhuǎn)90度:字模被豎著切分
//lin:行(0-3), column: 列(0-15)
//address : 字模區(qū)首地址
void ShowString(unsigned CHAR lin,unsigned CHAR col

2樓: >>參與討論
275124957

在用的大家拿去,,,

3樓: >>參與討論
vico
挺不錯(cuò)!
參與討論
昵稱:
討論內(nèi)容:
 
 
相關(guān)帖子
[討論]
[求助]
8路紅外遙控開(kāi)關(guān)控制器(可擴(kuò)展為32路)
STC單片機(jī)選型指南
[原創(chuàng)]字模,做點(diǎn)陣時(shí)可用
免費(fèi)注冊(cè)為維庫(kù)電子開(kāi)發(fā)網(wǎng)會(huì)員,參與電子工程師社區(qū)討論,點(diǎn)此進(jìn)入


Copyright © 1998-2006 m.58mhw.cn 浙ICP證030469號(hào)