新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > 基于單片機和8279驅動數碼管顯示與上位機通信的收發程序

        基于單片機和8279驅動數碼管顯示與上位機通信的收發程序

        作者: 時間:2016-11-26 來源:網絡 收藏
        ;系統晶振是 11.0592 MHz

        ;上位機用串口調試助手來配合實驗
        Z8279EQU0FF82H;8279 狀態/命令口地址
        D8279EQU0FF80H;8279 數據口地址
        LEDMODEQU00H;左邊輸入 八位字符顯示
        ;外部譯碼鍵掃描方式,雙鍵互鎖
        LEDFEQEQU33H;掃描速率
        LEDCLSEQU0C1H;清除顯示 RAM
        LEDWR0EQU80H;設定的將要寫入的顯示RAM地址
        READKBEQU40H;讀 FIFO RAM 地址 0 的命令字

        本文引用地址:http://www.104case.com/article/201611/321851.htm

        ORG0000H
        AJMPSTART
        ORG0040H
        START:
        MOVSP,#60H
        LCALLINIT8279;初始化8279
        MOVSCON,#50H;串口 方式 1
        MOVTMOD,#20H;T1 方式 1
        MOVTL1,#0FDH;波特率 9600 的常數
        MOVTH1,#0FDH
        SETBTR1

        SETBEA
        WAIT:
        JBCRI,DIS_REC;是否接收到數據
        LCALLGETKEY;讀鍵盤
        CJNEA,#0FFH,WAIT;是否有鍵輸入
        MOVSBUF,B;串口輸出鍵盤輸入的值
        NOP
        SS:JBCTI,WAIT;是否發送完畢
        SJMPSS

        DIS_REC:
        MOVA,SBUF;讀串口接收到的數據
        CLRC
        SUBBA,#30H;以下判定輸入是否在0-F
        JCERROR
        SUBBA,#0AH
        JNCDIS_REC1
        ADDA,#0AH
        SJMPDIS_REC2
        DIS_REC1:
        SUBBA,#7H
        JCERROR
        SUBBA,#6H
        JNCERROR
        ADDA,#10H
        DIS_REC2:
        MOVR4,#00H
        MOVR5,A
        LCALLDISLED;顯示輸入的數字(0-F)
        ERROR:AJMPWAIT

        INIT8279:;8279初始化子程序
        PUSHDPH;保存現場
        PUSHDPL
        PUSHACC
        LCALLDELAY;延時
        MOVDPTR ,#Z8279
        MOVA,#LEDMOD;置8279工作方式
        MOVX@DPTR,A
        MOVA,#LEDFEQ;置鍵盤掃描速率
        MOVX@DPTR,A
        MOVA,#LEDCLS;清除 LED 顯示
        MOVX@DPTR,A
        POPACC;恢復現場
        POPDPL
        POPDPH
        RET
        ;讀取鍵盤子程序
        ;輸入: 無; 輸出: B: 讀到的鍵碼 A: 按鍵的標志
        GETKEY: PUSHDPH;保存現場
        PUSHDPL
        PUSHPSW
        MOVDPTR,#Z8279
        MOVXA,@DPTR;讀8279狀態
        ANLA,#07H;屏蔽D7-D3
        JNZGETVAL;判斷是否有鍵輸入
        MOVA,#0H;置標志(無鍵輸入)
        SJMPNKBHIT
        GETVAL: MOVA,#READKB;讀 FIFO RAM 命令
        MOVX@DPTR,A
        MOVDPTR,#D8279
        MOVXA,@DPTR;讀鍵
        ANLA,#0FH;屏蔽 SHIFT 和 CTRL 鍵
        MOVDPTR,#KEYCODE;鍵碼表起始地址
        MOVCA,@A+DPTR;查表
        MOVB,A;置返回鍵值
        MOVA,#0FFH;置標志(有鍵輸入)
        NKBHIT: POPPSW;恢復現場
        POPDPL
        POPDPH
        RET
        ;顯示字符子程序
        ;輸入: R4,位置 R5,值
        DISLED:PUSHDPH;保存現場
        PUSHDPL
        PUSHACC
        MOVA,#LEDWR0;置顯示起始地址
        ADDA,R4;加位置偏移量
        MOVDPTR,#Z8279
        MOVX@DPTR,A;設定顯示位置
        MOVDPTR,#LEDSEG;置顯示常數表起始位置
        MOVA,R5
        MOVCA,@A+DPTR;查表
        MOVDPTR,#D8279
        MOVX@DPTR,A;顯示數據
        POPACC;恢復現場
        POPDPL
        POPDPH
        RET

        DELAY:;延時子程序
        PUSH0;保存現場
        PUSH1
        MOV0,#0H
        DELAY1: MOV1,#0H
        DJNZ1,$
        DJNZ0,DELAY1
        POP1;恢復現場
        POP0
        RET
        ;LED顯示常數表
        LEDSEG: DB3FH,06H,5BH,4FH,66H,6DH,7DH,07H
        DB7FH,6FH,77H,7CH,39H,5EH,79H,71H
        DB0BFH,086H,0DBH,0CFH,0E6H,0EDH,0FDH,087H
        DB0FFH,0EFH,0F7H,0FCH,0B9H,0DEH,0F9H,0F1H
        DB6DH,02H,08H,00H,59H,0FH,76H
        ;鍵盤鍵碼表
        KEYCODE:DB30H,31H,32H,33H,34H,35H,36H,37H
        DB38H,39H,41H,42H,43H,44H,45H,46H
        DB47H,48H,49H,4AH,4BH,4CH,4DH,4EH
        END



        評論


        技術專區

        關閉
        主站蜘蛛池模板: 沂水县| 龙井市| 青浦区| 长汀县| 本溪| 吕梁市| 延长县| 巩义市| 清水河县| 奉新县| 闻喜县| 和林格尔县| 左贡县| 漯河市| 平山县| 穆棱市| 冕宁县| 太保市| 鄂伦春自治旗| 阆中市| 乃东县| 澄城县| 晴隆县| 洛浦县| 青海省| 永城市| 黄山市| 姜堰市| 娱乐| 平利县| 望城县| 巴彦县| 双柏县| 青川县| 尤溪县| 沙河市| 巨野县| 吴忠市| 肥东县| 德钦县| 沁水县|