日韩床上生活一级视频|能看毛片的操逼网站|色悠悠网站在线观看视频|国产免费观看A淫色免费|国产av久久久久久久|免费A级视频美女网站黄|国产毛片av日韩小黄片|热久久免费国产视频|中文字幕无码色色|成人在线视频99久久久

機(jī)電之家資源網(wǎng)
單片機(jī)首頁(yè)|單片機(jī)基礎(chǔ)|單片機(jī)應(yīng)用|單片機(jī)開(kāi)發(fā)|單片機(jī)文案|軟件資料下載|音響制作|電路圖下載 |嵌入式開(kāi)發(fā)
培訓(xùn)信息
贊助商
LCD1502驅(qū)動(dòng)程序
LCD1502驅(qū)動(dòng)程序
 更新時(shí)間:2008-7-26 19:48:08  點(diǎn)擊數(shù):3
【字體: 字體顏色
--------------------------------------------------------------------------------
;LCD部分用到的RAM  0200H~~~~021FH  用到的Rn有R15/R14
;LCD復(fù)位子程序(LCD_REST)不須要設(shè)事先置直接調(diào)用即可
;半屏顯示子程序(LCD)在調(diào)用前必須送入頁(yè)地址 例如:MOV.B #0B8H,LCD_PAGE_BRAM
;        CALL  #LCD    顯示上屏
;       :MOV.B #0BAH,LCD_PAGE_BRAM
;        CALL  #LCD  顯示下屏
;LCDUP_WORD0_BRAM~~~LCDUP_WORD6_RAM        是上屏顯示字的代碼寄存器一屏顯示7個(gè)字
;LCDDOWN_WORD0_BRAM~~~LCDDOWN_WORD6_RAM    是下屏顯示字的代碼寄存器一屏顯示7個(gè)字
;每屏顯示是以中間為基準(zhǔn)向兩邊平均顯示   在調(diào)用半屏顯示子程序時(shí)已經(jīng)自動(dòng)計(jì)算LCD的列地址
;清屏指令可分全屏清除(LCD_CLEAR_ALL)和半屏清除(LCD_CLEAR)
;注 全屏清除子程序不需入口直接調(diào)用就行  而半屏清除子程序在調(diào)用前入口與半屏顯示子程序相同
#i nclude  "msp430x14x.h"
NAME LCD
MODULE LCD
PUBLIC LCD
RSEG PROM
;=========LCD==================================
      ;A0=1為數(shù)據(jù)  A0=0為命令
#define  A0   04H    
#define  E1   02H     
#define  E2   01H     
#define  BIT_OUT   P4OUT
#define  DATA_BUS  P2OUT
;=============LCD____8RAM的位定義===============
#define  LCD_COM_BRAM  0200H
#define  LCD_DATA_BRAM  0201H
#define  LCD_LIE_BRAM  0202H
#define  LCD_PAGE_BRAM  0203H
;=============LCD_UP_RAM============================
#define  LCDUP_WORD0_BRAM 0204H
#define  LCDUP_WORD1_BRAM 0205H
#define  LCDUP_WORD2_BRAM 0206H
#define  LCDUP_WORD3_BRAM 0207H
#define  LCDUP_WORD4_BRAM 0208H
#define  LCDUP_WORD5_BRAM 0209H
#define  LCDUP_WORD6_BRAM 020AH
;==========下面的RAM只是在測(cè)試狀態(tài)下才會(huì)用到=====
#define  LCDUP_WORD7_BRAM 020BH
;=============LCD_DOWN_RAM=====================
#define  LCDDOWN_WORD0_BRAM 020CH
#define  LCDDOWN_WORD1_BRAM 020DH
#define  LCDDOWN_WORD2_BRAM 020EH
#define  LCDDOWN_WORD3_BRAM 020FH
#define  LCDDOWN_WORD4_BRAM 0210H
#define  LCDDOWN_WORD5_BRAM 0211H
#define  LCDDOWN_WORD6_BRAM 0212H
;==========下面的RAM只是在測(cè)試狀態(tài)下才會(huì)用到=====
#define  LCDDOWN_WORD7_BRAM 0213H
;=============LCD_數(shù)據(jù)寄存器_RAM=================
#define  LCD_R0_BRAM  0214H
#define  LCD_R1_BRAM  0215H
;=============LCD____16RAM的位定義===============
#define  LCD_COUNT_WRAM  021CH
#define  LCD_WORD_WRAM  021EH
;=============LCD____BIT的位定義===============
#define  LCD_BIT_RAM  0220H
#define  LCD_E1_E2  0000H
      ;是LCD左右屏選擇為BIT=1選通左邊  BIT=0選通右邊
#define  LCD_INV   02H
                                             ;高電平時(shí)顯示反白
;---------------------------------------------------       
;===========================================================
LCD_E1_COM
        BIC.B  #A0,&BIT_OUT        ;A0置低 設(shè)為命令通道
MOV.B  LCD_COM_BRAM,&LCD_BUS ;輸出命令
BIS.B  #E1,&BIT_OUT ;開(kāi)E1
BIC.B  #E1,&BIT_OUT ;關(guān)E1
RET     ;反回

LCD_E2_COM
BIC.B  #A0,&BIT_OUT ;A0置低 設(shè)為命令通道
MOV.B  LCD_COM_BRAM,&LCD_BUS ;輸出命令
BIS.B  #E2,&BIT_OUT ;開(kāi)E2
BIC.B  #E2,&BIT_OUT ;關(guān)E2
RET     ;反回


LCD_E1_DATA
BIS.B  #A0,&BIT_OUT ;A0置高 設(shè)為命令通道
MOV.B  LCD_DATA_BRAM,&LCD_BUS ;輸出命令
BIS.B  #E1,&BIT_OUT ;開(kāi)E1
BIC.B  #E1,&BIT_OUT ;關(guān)E1
RET     ;反回

LCD_E2_DATA
BIS.B  #A0,&BIT_OUT ;A0置高 設(shè)為數(shù)據(jù)通道
MOV.B  LCD_DATA_BRAM,&LCD_BUS ;輸出命令
BIS.B  #E2,&BIT_OUT ;開(kāi)E2
BIC.B  #E2,&BIT_OUT ;關(guān)E2
RET     ;反回
;================CLEAR_LCD_DISPALY==============
;每次直接調(diào)用程序就可以清全屏顯示 不須入口
LCD_CLEAR_ALL
CLR  R15
CLR  R14
LCD_CLEAR_ALL_1
BIS.B  #0B8H,R15
MOV.B  R15,LCD_COM_BRAM
CALL  #LCD_E1_COM
CALL  #LCD_E2_COM
MOV.B  #00H,LCD_COM_BRAM
CALL  #LCD_E1_COM
CALL  #LCD_E2_COM
MOV.B  #61D,R14
LCD_CLEAR_ALL_2
MOV.B  #000H,LCD_DATA_BRAM
CALL  #LCD_E1_DATA
CALL  #LCD_E2_DATA
CLRZ
DEC.B  R14
JNZ  LCD_CLEAR_ALL_2
INC.B  R15
CLRZ
CMP.B  #0BCH,R15
JNE  LCD_CLEAR_ALL_1
RET
;================CLEAR_LCD_DISPALY=============
;每次直接調(diào)用程序就可以清半屏顯示   
;調(diào)用前必須送入頁(yè)地址到LCD_PAGE_RAM(頁(yè)地址寄存器)
;例如:MOV.B #0B8H,LCD_PAGE_BRAM   
;      :CALL #LCD_CLEAR 就是清上半屏顯示
;      :MOV.B #0BAH,LCD_PAGE_BRAM   
;      :CALL #LCD_CLEAR 就是清下半屏顯示
LCD_CLEAR
CLR  R15
MOV.B  LCD_PAGE_BRAM,LCD_LIE_BRAM
ADD.B  #2D,LCD_LIE_BRAM
LCD_CLEAR_1
BIS.B  LCD_PAGE_BRAM,R15  
MOV.B  R15,LCD_COM_BRAM
CALL  #LCD_E1_COM
CALL  #LCD_E2_COM
MOV.B  #00H,LCD_COM_BRAM
CALL  #LCD_E1_COM
CALL  #LCD_E2_COM
MOV  #61D,R14
LCD_CLEAR_2
MOV.B  #00H,LCD_DATA_BRAM
CALL  #LCD_E1_DATA
CALL  #LCD_E2_DATA
CLRZ
DEC.B  R14
JNZ  LCD_CLEAR_2
INC.B  R15
CLRZ
CMP.B  LCD_LIE_BRAM,R15
JNZ  LCD_CLEAR_1
RET

;===============RESETTING_LCD_MODE=============
;調(diào)用此程序是使LCD復(fù)位并進(jìn)入工作狀態(tài)
LCD_REST
MOV.B  #0E2H,LCD_COM_BRAM ;復(fù)位
CALL  #LCD_E1_COM
CALL  #LCD_E2_COM

MOV.B  #0A4H,LCD_COM_BRAM ;關(guān)閉休閑狀態(tài)
CALL  #LCD_E1_COM
CALL  #LCD_E2_COM

MOV.B  #0A9H,LCD_COM_BRAM ;設(shè)置1/32占空比
CALL  #LCD_E1_COM
CALL  #LCD_E2_COM

MOV.B  #0A0H,LCD_COM_BRAM ;正向排序設(shè)置
CALL  #LCD_E1_COM
CALL  #LCD_E2_COM

MOV.B  #0C0H,LCD_COM_BRAM ;設(shè)置顯示起始行為第一行
CALL  #LCD_E1_COM
CALL  #LCD_E2_COM

MOV.B  #0AFH,LCD_COM_BRAM ;開(kāi)顯示設(shè)置
CALL  #LCD_E1_COM
CALL  #LCD_E2_COM
RET

;查L(zhǎng)CD PAGE #0B8H.#0B9H/#0BAH.#0BBH上屏須要顯示的個(gè)數(shù)
;這段程序已測(cè)試過(guò)  03-3-12 9:55
;R15/R14/R13
LCD_CHK
CLR  LCD_COUNT_RAM
MOV.B  #8,LCD_R0_RAM  ;查殉上屏須要顯示的個(gè)數(shù),一屏最多可以顯示7個(gè)16X16
CLR.B  LCD_LIE_BRAM  ;清上屏查殉結(jié)果寄存器
MOV  LCD_WORD_RAM,R14 ;把須要檢查字的首位16位地址放進(jìn)R14.LCD_WORD_RAM
      ;定義時(shí)必須是16位地址
LCD_CHK_0
DEC.B  LCD_R0_RAM
JZ  LCD_CHK_1  ;測(cè)試完成退出
CLRZ
MOV.B  @R14+,LCD_COUNT_RAM
TST.B  LCD_COUNT_RAM  ;測(cè)試每個(gè)字寄存器是否為零
JZ  LCD_CHK_0  ;為零時(shí)轉(zhuǎn)
INC.B  LCD_LIE_BRAM  ;大于零查殉結(jié)果寄存器加一
JMP  LCD_CHK_0  ;反回測(cè)試
LCD_CHK_1
        CLR             LCD_COUNT_RAM
        MOV.B           LCD_LIE_BRAM,LCD_COUNT_RAM
MOV  LCD_COUNT_RAM,&MPY ;把檢測(cè)的結(jié)果乘以16
MOV  #16D,&OP2
MOV  &RESLO,LCD_COUNT_RAM ;相乘的結(jié)果放回寄存器
MOV.B  LCD_COUNT_RAM,LCD_LIE_BRAM
RRA.B           LCD_LIE_BRAM             ;結(jié)果除2.放到上屏頁(yè)的寄存器
MOV.B  #61D,LCD_COUNT_RAM
SUB.B  LCD_LIE_BRAM,LCD_COUNT_RAM
MOV.B  LCD_COUNT_RAM,LCD_LIE_BRAM
RET
;調(diào)用前必須把要顯示屏第一個(gè)字的地址放在R15內(nèi)
;列:MOV  #LCDUP_WORD0_BRAM,LCD_WORD_RAM
       ;MOV  #LCDDOWN_WORD0_BRAM,LCD_WORD_RAM
       ;用到的寄存器R15/R14
LCD
CLRZ
CMP.B  #0B8H,LCD_PAGE_BRAM
JNE  LCD_1
MOV  #LCDUP_WORD0_BRAM,LCD_WORD_RAM
JMP  LCD_0
LCD_1 MOV  #LCDDOWN_WORD0_BRAM,LCD_WORD_RAM
LCD_0 CALL  #LCD_CHK
BIS.B  #BIT0,LCD_BIT_RAM
MOV.B  #7D,LCD_R1_RAM  
;每次調(diào)用均連續(xù)顯示7個(gè)16X16的字  而遇到字寄存器是
MOV  LCD_WORD_RAM,R15 ;零就反回因?yàn)樽直砝锩媸菦](méi)有零的
LCD_DISPALY
CLR  R14
        MOV.B           @R15+,R14
TST  R14   ;R15是顯示字首位地址寄存器,準(zhǔn)備用于間接尋址
JZ  LCD_RET   ;字寄存器是零就反回
MOV  #32D,&MPY  ;查表然后吧結(jié)果送到寄存器
MOV  R14,&OP2
MOV  &RESLO,LCD_COUNT_RAM
ADD  #LCD_DB,LCD_COUNT_RAM
MOV  LCD_COUNT_RAM,R14
MOV.B  #32D,LCD_R0_RAM  ;R14用于放計(jì)算查找數(shù)據(jù)的個(gè)數(shù)
LCD_PAGE
MOV.B  LCD_PAGE_BRAM,LCD_COM_BRAM;把頁(yè)地址送到命令寄存器
CLRZ
BIT.B  #BIT0,LCD_BIT_RAM
;LCD_BIT_RAM的BIT0=LCD_E1_E2為高時(shí)轉(zhuǎn)到E1發(fā)送,第就是E2
JZ  LCD_PAGE_E2  ;Z為零就轉(zhuǎn)到E2  否則向下工作
LCD_PAGE_E1
CALL  #LCD_E1_COM  ;向E1發(fā)送頁(yè)地址
JMP  LCD_LIE   ;跳去列發(fā)送
LCD_PAGE_E2
CALL  #LCD_E2_COM  ;向E2發(fā)送頁(yè)地址
LCD_LIE
MOV.B  LCD_LIE_BRAM,LCD_COM_BRAM;把列地址送到命令寄存器
CLRZ
BIT.B  #BIT0,LCD_BIT_RAM
;LCD_BIT_RAM為高時(shí)轉(zhuǎn)到E1發(fā)送,第就是E2
JZ  LCD_LIE_E2  ;Z為零就轉(zhuǎn)到E2  否則向下工作
LCD_LIE_E1
CALL  #LCD_E1_COM  ;向E1發(fā)送列地址
JMP  LCD_DATA
LCD_LIE_E2
CALL  #LCD_E2_COM  ;向E2發(fā)送列地址
LCD_DATA
CALL  #LCD_FIND_DATA  ;調(diào)用數(shù)據(jù)發(fā)送命令
CLRZ
BIT.B  #BIT0,LCD_PAGE_BRAM ;測(cè)試頁(yè)寄存器的BIT0位
JNZ  LCD_PAGE_0  ;大于零(即是BIT0=1)就轉(zhuǎn)
BIS.B  #BIT0,LCD_PAGE_BRAM ;把頁(yè)寄存器的BIT0位置高(原來(lái)是低#0B8H/#0BAH)
JMP  LCD_RETURN  
LCD_PAGE_0
BIC.B  #BIT0,LCD_PAGE_BRAM ;把頁(yè)寄存器的BIT0位置低(原來(lái)是高#0B9H/#0BBH)
INC.B  LCD_LIE_BRAM  ;列地址加一
CLRZ
CMP.B  #61D,LCD_LIE_BRAM  ;檢查列有沒(méi)有超過(guò)61列
JNZ  LCD_RETURN  ;Z大于零就轉(zhuǎn)  等于零就向下工作
CLR.B  LCD_LIE_BRAM  ;清列寄存器
CLRZ
BIT.B  #BIT0,LCD_BIT_RAM ;測(cè)試LCD_BIT_RAM位  在E1就轉(zhuǎn)為E2 在E2就立即反回
JNZ  LCD_PAGE_1  ;Z為零就轉(zhuǎn)到E2  否則向下工作
JMP  LCD_RET   ;轉(zhuǎn)到子程序反回命令
LCD_PAGE_1
BIC.B  #BIT0,LCD_BIT_RAM ;把LCD_BIT_RAM位置低  設(shè)為E2顯示狀態(tài)
JMP  LCD_PAGE  ;反回頁(yè)傳送命令地址
LCD_RETURN
CLRZ
DEC.B  LCD_R0_RAM  ;查找數(shù)據(jù)的個(gè)數(shù)寄存器減1
JNZ  LCD_PAGE  ;R14大于零轉(zhuǎn)回頁(yè)傳送命令地址
CLRZ
DEC.B  LCD_R1_RAM  ;字個(gè)數(shù)寄存器減1
BIC.B  #BIT0,LCD_PAGE_BRAM
JNZ  LCD_DISPALY  ;反回主顯示調(diào)用程序
LCD_RET
RET     ;反回主程序

;===================================================
LCD_FIND_DATA  
MOV.B  @R14+,LCD_DATA_BRAM
CLRZ
BIT.B  #INV_BIT,LCD_BIT_RAM
JZ  NO_INV
INV.B  LCD_DATA_BRAM
NO_INV CLRZ
BIT.B  #BIT0,LCD_BIT_RAM ;測(cè)試LCD_BIT_RAM位  在E1就轉(zhuǎn)為E2 在E2就立即反回
JZ  LCD_FIND_E2  ;Z為零就轉(zhuǎn)到E2  否則向下工作
CALL  #LCD_E1_DATA  ;調(diào)用E1數(shù)據(jù)發(fā)送子程序
JMP  LCD_FIND_DATA_RET
LCD_FIND_E2
CALL  #LCD_E2_DATA  ;調(diào)用E2數(shù)據(jù)發(fā)送子程序
LCD_FIND_DATA_RET
RET
END LCD
  • 上一篇: 水泵定時(shí)控制實(shí)驗(yàn)
  • 下一篇: 51單片機(jī)漢字液晶子程序 液晶屏分為4行*12列漢字
  • 發(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)更名-聲明
    電話: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