⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 51单片机和8279驱动八段数码管显示.txt

📁 做毕业设计的
💻 TXT
字号:
基于51单片机和8279驱动八段数码管显示与上位机通信的串口收发程序 
作者:佚名  来源:不详  录入:Admin  更新时间:2008-7-26 20:01:32  点击数:2  
【字体:     】 
 
;系统晶振是 11.0592 MHz

;上位机用串口调试助手来配合实验
Z8279          EQU            0FF82H         ;8279 状态/命令口地址
D8279          EQU            0FF80H         ;8279 数据口地址
LEDMOD         EQU            00H            ;左边输入 八位字符显示
                               ;外部译码键扫描方式,双键互锁
LEDFEQ         EQU            33H            ;扫描速率
LEDCLS         EQU            0C1H           ;清除显示 RAM
LEDWR0         EQU            80H            ;设定的将要写入的显示RAM地址
READKB         EQU            40H            ;读 FIFO RAM 地址 0 的命令字

               ORG            0000H
               AJMP           START
               ORG            0040H
START:
               MOV            SP,#60H
               LCALL          INIT8279               ;初始化8279
               MOV            SCON,#50H              ;串口 方式 1
               MOV            TMOD,#20H              ;T1 方式 1
               MOV            TL1,#0FDH              ;波特率 9600 的常数
               MOV            TH1,#0FDH
               SETB           TR1               

                          SETB           EA
WAIT:
               JBC            RI,DIS_REC             ;是否接收到数据
               LCALL          GETKEY                 ;读键盘
               CJNE           A,#0FFH,WAIT           ;是否有键输入
               MOV            SBUF,B                 ;串口输出键盘输入的值
               NOP
SS:            JBC            TI,WAIT                ;是否发送完毕
               SJMP           SS

DIS_REC:
               MOV            A,SBUF                 ;读串口接收到的数据
               CLR            C
               SUBB           A,#30H                 ;以下判定输入是否在0-F
               JC            ERROR
               SUBB           A,#0AH
               JNC            DIS_REC1
               ADD            A,#0AH
               SJMP           DIS_REC2
DIS_REC1:
               SUBB           A,#7H
               JC             ERROR
               SUBB           A,#6H
               JNC            ERROR
               ADD            A,#10H
DIS_REC2:
               MOV            R4,#00H
               MOV            R5,A
               LCALL          DISLED                 ;显示输入的数字(0-F)
ERROR:         AJMP           WAIT

INIT8279:                              ;8279初始化子程序
               PUSH          DPH                     ;保存现场
               PUSH          DPL
               PUSH          ACC
               LCALL         DELAY                   ;延时
               MOV           DPTR ,#Z8279
               MOV           A,#LEDMOD               ;置8279工作方式
               MOVX          @DPTR,A
               MOV           A,#LEDFEQ               ;置键盘扫描速率
               MOVX          @DPTR,A
               MOV           A,#LEDCLS               ;清除 LED 显示
               MOVX          @DPTR,A
               POP           ACC                     ;恢复现场
               POP           DPL
               POP           DPH
               RET
;读取键盘子程序
;输入: 无          ; 输出: B: 读到的键码 A: 按键的标志
GETKEY: PUSH          DPH                     ;保存现场
               PUSH          DPL
               PUSH          PSW
               MOV           DPTR,#Z8279
               MOVX          A,@DPTR                 ;读8279状态
               ANL           A,#07H                  ;屏蔽D7-D3
               JNZ           GETVAL                  ;判断是否有键输入
               MOV           A,#0H                   ;置标志(无键输入)
               SJMP          NKBHIT
GETVAL: MOV           A,#READKB               ;读 FIFO RAM 命令
               MOVX          @DPTR,A
               MOV           DPTR,#D8279
               MOVX          A,@DPTR                 ;读键
               ANL           A,#0FH                  ;屏蔽 SHIFT 和 CTRL 键
               MOV           DPTR,#KEYCODE           ;键码表起始地址
               MOVC          A,@A+DPTR               ;查表
               MOV           B,A                     ;置返回键值
               MOV           A,#0FFH                 ;置标志(有键输入)
NKBHIT: POP           PSW                     ;恢复现场
               POP           DPL
               POP           DPH
               RET
;显示字符子程序
;输入: R4,位置 R5,值
DISLED:         PUSH          DPH                    ;保存现场
                PUSH          DPL
                PUSH          ACC
                MOV           A,#LEDWR0              ;置显示起始地址
                ADD           A,R4                   ;加位置偏移量
                MOV           DPTR,#Z8279
                MOVX          @DPTR,A                ;设定显示位置
                MOV           DPTR,#LEDSEG           ;置显示常数表起始位置
                MOV           A,R5
                MOVC          A,@A+DPTR              ;查表
                MOV           DPTR,#D8279
                MOVX          @DPTR,A                ;显示数据
                POP           ACC                    ;恢复现场
                POP           DPL
                POP           DPH
                RET

DELAY:                                 ;延时子程序
               PUSH           0                      ;保存现场
               PUSH           1
               MOV            0,#0H
DELAY1: MOV            1,#0H
               DJNZ           1,$
               DJNZ           0,DELAY1
               POP            1                      ;恢复现场
               POP            0
               RET
;LED显示常数表
LEDSEG: DB             3FH,06H,5BH,4FH,66H,6DH,7DH,07H 
               DB             7FH,6FH,77H,7CH,39H,5EH,79H,71H 
               DB             0BFH,086H,0DBH,0CFH,0E6H,0EDH,0FDH,087H 
               DB             0FFH,0EFH,0F7H,0FCH,0B9H,0DEH,0F9H,0F1H 
               DB             6DH,02H,08H,00H,59H,0FH,76H     
;键盘键码表
KEYCODE:DB             30H,31H,32H,33H,34H,35H,36H,37H 
               DB             38H,39H,41H,42H,43H,44H,45H,46H 
               DB             47H,48H,49H,4AH,4BH,4CH,4DH,4EH 
               END

 
 

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -