| 网站首页 | 业界新闻 | 小组 | 交易 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
买学问 - 大牛一对一辅导,有问必答买学问 - 专业的付费知识问答平台
共有 914 人关注过本帖
标题:求大神帮忙看看有没有哪里错的,微机与接口的课程设计,学的不是很好
只看楼主 加入收藏
Ayu呦
Rank: 1
等 级:新手上路
帖 子:1
专家分:0
注 册:2018-6-22
  问题点数:0  回复次数:1   
求大神帮忙看看有没有哪里错的,微机与接口的课程设计,学的不是很好
;我想做一个简易汽车里程表,只能进行0-f的计数,按五次脉冲代表1公里,七段数码管上显示公里数,结束时在LCD上显示抵达目的地等字
;检测过语法没错误,但还没到实验箱上测试

; 连线:
; 8255 CS ------ 端口地址 300CS
; 8255 PA0  ---- 开关K0
; 8255 PB口 ---- 七段数码管
; 8255 PC0  ---- 发光二极管 L0
; 8255 PC4  ---- 数码管电源

; 8253 CS ------ 端口地址 320CS
; 8253 GATE1 -- (A10)+5V
; 8253 CLK1 ---- 单脉冲 SP
; 8253 OUT1 ---- 发光二极管 L15


; LCD E/CS ----- 端口地址 360CS
; LCD R/S ------ A0
; LCD R/W ------ A1



;运行:按下开关K0,L0亮,代表汽车启动,此时数码管电源接通,数值为零,LCD屏幕初始化,连续按5次脉冲,L15闪烁一次,并且数
;码管上数值变为1,每按5次脉冲,L15都会闪烁一次,并且数码管上的值会加1
;当把开关K0关闭,LCD上会显示
;
;

CS8255  EQU 0303H
PORTA   EQU 0300H
PORTB   EQU 0301H
PORTC   EQU 0302H

CS8253  EQU 0323H
COUNT0  EQU 0320H
COUNT1  EQU 0321H
COUNT2  EQU 0322H

LCD     EQU 0360H
WRICODE EQU LCD+0       ;写命令
WRDATA  EQU LCD+1       ;写数据
RDSTAT  EQU LCD+2       ;读状态
RDDATA  EQU LCD+3       ;读数据

DATA SEGMENT
SEG7 DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,67H,77H,7CH,39H,5EH,79H,71H,"$"
HZ   DB "抵达目的地"
     DB "16电信"
     DB "吴**"
     DB "3166004038"
DATA ENDS


CODE    SEGMENT
        ASSUME CS:CODE,DS:DATA

START   PROC NEAR
 MAIN:  MOV DX,CS8255   ;8255初始化
        MOV AL,90H      ;A口输入,B、C口输出
        OUT DX,AL

    L:  MOV DX,PORTA    ;检测K0是否为1,即开关是否启动
        IN AL,DX
        TEST AL,00000001
        JZ L

        MOV AL,01H      ;LCD清除显示初始化
        CALL WCmd


        MOV DX,PORTC
        MOV AL,11H
        OUT DX,AL       ;数码管控制电源开,电源提示灯LO亮

        MOV DX,PORTB
        MOV AL,3FH
        OUT DX,AL       ;数码管输出数字0

        MOV DX,CS8253   ;8253初始化
        MOV AL,01010100B;计数1 方式2
        OUT DX,AL

      
        MOV AL,1
        PUSH AX          ;进栈
 
DISPY:  
        MOV DX,COUNT1    ;加1公里发光二极管闪烁一次
        MOV AL,5
        OUT DX,AL

      
        POP AX           ;出栈
        MOV DX,PORTB     ;数码管数字变化
        LEA BX,SEG7
        PUSH AX
        XLAT             ;令AL=seg[AL]
        OUT DX,AL
        POP AX            
        INC AL
        PUSH AX
      
   
        MOV DX,PORTA    ;检测K0是否为1,即开关是否启动
        IN AL,DX
        TEST AL,00000001
        JZ DISPY


        POP AX          ;释放AX



        MOV AL,30H      ;30H--基本指令操作
        CALL WCmd
        MOV AL,01H      ;清除显示
        CALL WCmd
        MOV CX,2888H    ;延时
        LOOP $

        MOV AL,06H      ;指定在资料写入或读取时,光标的移动方向
        CALL WCmd
        MOV AL,0CH      ;开显示,关光标,不闪烁
        CALL WCmd

        MOV BX,OFFSET HZ  ;显示汉字和字符
        MOV AH,40H
        MOV AL,80H
        CALL WCmd
NEXT:   MOV AL,00H
        XLAT
        CALL WData
        INC BX
        DEC AH
        JNZ NEXT
        JMP MAIN

START ENDP

WData   PROC NEAR
        CALL DELAY
        MOV DX,WRDATA
        OUT DX,AL
        RET
WData   ENDP

WCmd    PROC NEAR
        CALL DELAY
        MOV DX,WRICODE
        OUT DX,AL
        RET
WCmd    ENDP

DELAY   PROC NEAR
        MOV CX,0080H
        LOOP $
        RET
DELAY   ENDP



CODE    ENDS
        END START
2018-06-24 20:30
lxy7890
Rank: 1
等 级:新手上路
帖 子:3
专家分:0
注 册:2018-7-26
  得分:0 
2018-07-30 08:01







关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.027555 second(s), 8 queries.
Copyright©2004-2019, BCCN.NET, All Rights Reserved