131 1300 0010
其他
當前位置: 首頁>> 元件技術>>其他>>
  • 導航欄目
  • 二極管
  • 整流橋
  • MOS管
  • 其他
  • 51單片機對602LCD顯示器的驅動設計
    51單片機對602LCD顯示器的驅動設計
  • 51單片機對602LCD顯示器的驅動設計
  •   發(fā)布日期: 2019-05-27  瀏覽次數: 1,027

    ;硬件連接:1602LCD顯示000000Hz短接p1.4--p3.5則顯示0000010hz

    ;LCD1602顯示在不增加外部計數硬件的情況下,本試驗軟件可測最高頻率達到460KHz

     

    ;工作原理:

    ;1S 鐘內對輸入脈沖所計數的次數則為頻率值。

    ;16位二進制加法計數器的最大計數值為 65535。

    ;設置定時器 0 工作在定時方式1,定時1S。

    ;設置定時器 1 工作在計數方式1,對輸入脈沖進行計數,溢出產生中斷。

    ;將定時器 1中斷定義為優(yōu)先。在中斷處理程序里對中斷次數進行計數。1S到后,

    ;將中斷次數和計數器里的計數值取出進行綜合數據處理,處理后的數據送LCD1602顯示?

    51單片機對602LCD顯示器的驅動設計

    ;信號來源:

    ;1、軟件里對 P1.4定時取反,形成輸出脈沖,接到 P3.5 可自測。

    ; 顯示結果:P1.4 → P3.5 顯示: 000010 (Hz)

    ;如果有條件的話,可使用專用設備(信號發(fā)生器和頻率計)進行校正。

    ;頻率計的程序

    ;包含:外部中斷設置,中斷服務程序,定時程序,定時服務程序

    ;以及數據處理,顯示,包括 三位十進制數轉化為四位BCD碼,

    ;------------------------------------------------------------

    BEEPBITP3.7

    LCD_RSBITP2.0

    LCD_RWBITP2.1

    LCD_ENBITP2.2

    LCD_XEQU3FH;LCD地址變量

    TIMER_HEQU30H;定時器高位字節(jié)單元

    TIMER_LEQU31H;定時器低位字節(jié)單元

    TIMCOUNTEQU32H;時間中斷數

    INT_GEQU35H;中斷計數緩沖單元高地址

    INT_HEQU34H;中斷計數緩沖單元中地址

    INT_LEQU33H;中斷計數緩沖單元低地址

    T_SEQU36H;數據顯示低位

    T_MEQU37H;數據顯示中位

    T_HEQU38H;數據顯示高位

    T_GEQU39H;數據顯示最高位

    ;----------------------------------------------------------

    ORG0000H

    JMPMAIN;主程序開始

    ORG000BH

    JMPTIMER_INT;定時器T0中斷服務程序

    ORG001BH;定時器T1中斷服務程序

    JMPTIMER1

    ORG0030H

    ;----------------------------------------------------------

    MAIN:

    MOVSP,#60H;設置SP指針

    LCALLPRO_SET;初始化

    CALLSET_LCD

    LCALLTIM_T0

    ;-----------------------------------------------------------

    ;LCD1602是慢速顯示器件,故100MS顯示一次。

    ;-----------------------------------------------------------

    MAIN1:

    MOVR5,40

    MAIN2:

    ACALLDELAY1;3ms

    DJNZR5,MAIN2

    ACALLSBIN_SBCD

    CALLCONV

    JMPMAIN1

    ;------------------------------------------------------------

    ;T1計數器中斷服務子程序

    ;計T1計數器溢出次數

    ;------------------------------------------------------------

    TIMER1:

    INC2AH

    RETI

    ;------------------------------------------------------------

    ;初始化程序

    ;------------------------------------------------------------

    PRO_SET:MOVA,#00H

    MOVB,#00H

    MOV2AH,A

    MOVP0,#0FFH

    MOVP1,#0FFH

    MOVP2,#0FFH

    MOVINT_H,#00H

    MOVINT_L,#00H

    MOVINT_G,#00H

    MOVT_S,#00H

    MOVT_H,#00H

    MOVT_M,#00H

    MOVT_G,#00H

    MOVTIMCOUNT,#00H

    MOVTIMER_H,#04CH;定時50MS

    MOVTIMER_L,#10H;

    CLRBEEP

    SETBP3.5;P3.5端口置輸入狀態(tài)

    RET;T1(TIMER1的外部輸入腳)

    ;-----------------------------------------------------

    ;LCD初始化設置

    ;-----------------------------------------------------

    SET_LCD:

    CLRLCD_EN

    CALLINIT_LCD;初始化LCD

    CALLDELAY1

    MOVDPTR,#INFO1;指針指到顯示信息1

    MOVA,#1;顯示在第一行

    CALLLCD_SHOW

    MOVDPTR,#INFO2;指針指到顯示信息2

    MOVA,#2;顯示在第二行

    CALLLCD_SHOW

    RET

    ;-----------------------------------------------------

    INFO1:DB“CYMOMETER”,0;LCD第一行顯示信息

    INFO2:DB“FREQ:HZ”,0;LCD第二行顯示信息

    ;-----------------------------------------------------

    ;LCD接口初始化

    ;8位I/O控制

    ;-----------------------------------------------------

    INIT_LCD:

    MOVA,#38H;雙列顯示,字形5*7點陣

    CALLWCOM

    CALLDELAY1

    MOVA,#38H;雙列顯示,字形5*7點陣

    CALLWCOM

    CALLDELAY1

    MOVA,#38H;雙列顯示,字形5*7點陣

    CALLWCOM

    CALLDELAY1

    MOVA,#0CH;開顯示,關光標,

    CALLWCOM

    CALLDELAY1

    MOVA,#01H;清除LCD顯示屏

    CALLWCOM

    CALLDELAY1

    RET

    ;----------------------------------------------------

    LCD_SHOW:;在LCD的第一行或第二行顯示信息字符

    CJNEA,#1,LINE2;判斷是否為第一行

    LINE1:MOVA,#80H;設置LCD的第一行地址

    CALLWCOM;寫入命令

    CALLCLR_LINE;清除該行字符數據

    MOVA,#80H;設置LCD的第一行地址

    CALLWCOM;寫入命令

    JMPFILL

    LINE2:MOVA,#0C0H;設置LCD的第二行地址

    CALLWCOM;寫入命令

    CALLCLR_LINE;清除該行字符數據

    MOVA,#0C0H;設置LCD的第二行地址

    CALLWCOM

    FILL:CLRA;填入字符

    MOVCA,@A+DPTR;由消息區(qū)取出字符

    CJNEA,#0,LC1;判斷是否為結束碼

    RET

    LC1:CALLWDATA;寫入數據

    INCDPTR;指針加1

    JMPFILL;繼續(xù)填入字符

    RET

    ;---------------------------------------------------

    CLR_LINE:;清除該行LCD的字符

    MOVR0,#24

    CL1:MOVA,#’’

    CALLWDATA

    DJNZR0,CL1

    RET

    ;-----------------------------------------------------

    ;寫指令、數據使能子程序

    ;-----------------------------------------------------

    ENABLE:;寫指令使能

    CLRLCD_RS;RS=L,LCD_RW=L,D0-D7=指令碼,E=高脈沖

    CLRLCD_RW

    SETBLCD_EN

    CALLDELAY0

    CLRLCD_EN

    RET

    ENABLE1:;寫數據使能

    SETBLCD_RS;RS=H,RW=L,D0-D7=數據,E=高脈沖

    CLRLCD_RW

    SETBLCD_EN

    CALLDELAY0

    CLRLCD_EN

    RET

    DELAY0:MOVR7,#250;延時500微秒

    DJNZR7,$

    RET

    ;----------------------------------------------------

    ;寫入命令子程序

    ;----------------------------------------------------

    WCOM:;以8位控制方式將命令寫至LCD

    MOVP0,A;寫入命令

    CALLENABLE

    RET

    ;----------------------------------------------------

    ;寫入數據子程序

    ;----------------------------------------------------

    WDATA:;以8位控制方式將數據寫至LCD

    MOVP0,A;寫入數據

    CALLENABLE1

    RET

    ;---------------------------------------------------

    ;在LCD第二行顯示字符

    ;A=ASCDATA,B=LINEXPOS

    ;---------------------------------------------------

    LCDP2:;在LCD的第二行顯示字符

    PUSHACC;

    MOVA,B;設置顯示地址

    ADDA,#0C0H;設置LCD的第二行地址

    CALLWCOM;寫入命令

    POPACC;由堆棧取出A

    CALLWDATA;寫入數據

    RET

    ;-------------------------------------------------------

    ;ASCII轉換并在第二行顯示數字子程序

    ;-------------------------------------------------------

    CONV:;MOVA,T_G

    MOVLCD_X,#6;設置位置

    ;CALLSHOW_DIG2

    MOVA,T_H

    ;INCLCD_X;加載小時數據

    CALLSHOW_DIG2;顯示數據

    MOVA,T_M;加載分鐘數據

    INCLCD_X;設置位置

    CALLSHOW_DIG2;顯示數據

    MOVA,T_S;加載秒數數據

    INCLCD_X;設置位置

    CALLSHOW_DIG2;顯示數據

    RET

    ;----------------------------------------------------

    SHOW_DIG2:

    MOVB,#16

    DIVAB

    ADDA,#30H

    PUSHB

    MOVB,LCD_X

    CALLLCDP2

    POPB

    MOVA,B

    ADDA,#30H

    INCLCD_X

    MOVB,LCD_X

    CALLLCDP2

    RET

    ;-----------------------------------------------------

    DELAY1:;延時3MS

    MOVR6,#15

    D2:MOVR7,#100

    DJNZR7,$

    DJNZR6,D2

    RET

    ;-----------------定時器設置------------------------

    ;設置定時器0工作在定時方式1,定時器1工作在計數方式1

    ;---------------------------------------------------------

    TIM_T0:MOVTMOD,#0D1H

    MOVTH0,TIMER_H;設置定時初值高位

    MOVTL0,TIMER_L;設置定時初值低位

    MOVTH1,#00H;清T1計數器

    MOVTL1,#00H

    MOVIE,#8AH;開中斷總允許,允許T0溢出中斷

    SETBPT1

    SETBTR1

    SETBTR0;定時器開始工作

    RET

    ;--------------------------------------------------------

    ;定時器0中斷服務程序

    ;--------------------------------------------------------

    TIMER_INT:

    CLRTR0;關閉定時器

    MOVTL0,TIMER_L;重新賦初值

    MOVTH0,TIMER_H;

    INCTIMCOUNT;定時1S,時間單位

    MOVA,TIMCOUNT;查看數量值

    CPLP1.4;產生自測信號

    CJNEA,#20,T_END;如果沒有到1S返回

    CLRTR1;關閉計數器T1

    MOVTIMCOUNT,#00H;到1S則清零

    MOVINT_L,TL1;取出計數值低位

    MOVINT_H,TH1;取出計數值高位

    MOVINT_G,2AH;取出溢出計數值位

    MOVTH1,#00H

    MOVTL1,#00H

    MOV2AH,#00H

    SETBTR1

    T_END:SETBTR0;重新開始定時操作

    RETI

    ;---------------------------------------------------------------

    ;三字節(jié)二進制整數轉換成四字節(jié)BCD碼子程序

    ;二進制數從低位到高位分別存放在INT_L、INT_H、INT_G單元中

    ;BCD碼從低位到高位分別存放在T_S、T_M、T_H、T_G單元中

    ;---------------------------------------------------------------

    SBIN_SBCD:

    PUSHPSW

    SETBPSW.3;設置當前寄存器

    CLRPSW.4

    CLRA;清累加器

    MOVT_G,A

    MOVT_H,A;清除出口單元,準備轉換

    MOVT_M,A

    MOVT_S,A

    MOVR5,INT_G

    MOVR7,INT_L;設置二進制數起始地址

    MOVR6,INT_H

    MOVR2,#24

    CLRC

    HH1:

    MOVA,R7

    RLCA

    MOVR7,A

    MOVA,R6

    RLCA

    MOVR6,A

    MOVA,R5

    RLCA

    MOVR5,A

    MOVA,T_S;得到低位數據

    ADDCA,T_S;累加

    DAA;十進制調整

    MOVT_S,A;保存數據

    MOVA,T_M;得到第二位數據

    ADDCA,T_M;累加

    DAA;十進制調整

    MOVT_M,A;保存結果

    MOVA,T_H;得到第三位

    ADDCA,T_H;累加

    DAA

    MOVT_H,A;保存

    MOVA,T_G;得到第四位

    ADDCA,T_G;累加

    ;DAA

    MOVT_G,A

    DJNZR2,HH1;

    POPPSW

    RET

    ;----------------------------------------------------------------

    END;告訴編譯器本程序到此結束。


  • ·上一篇:
    ·下一篇:
  • 其他關聯(lián)資訊
    深圳市日月辰科技有限公司
    地址:深圳市寶安區(qū)松崗鎮(zhèn)潭頭第二工業(yè)城A區(qū)27棟3樓
    電話:0755-2955 6626
    傳真:0755-2978 1585
    手機:131 1300 0010
    郵箱:hu@szryc.com

    深圳市日月辰科技有限公司 版權所有:Copyright?2010-2023 elibeatofitness.com 電話:13113000010 粵ICP備2021111333號