当前位置:文档之家› 微机原理实验8255并行口实验PA输入、PB输出

微机原理实验8255并行口实验PA输入、PB输出

8255A并行口实验PA输入、PB输出利用LED等显示程序LCD EQU 07FE0HLCDWI EQU LCD+0 ;写命令LCDWD EQU LCD+1 ;写数据LCDRS EQU LCD+2 ;读状态LCDRD EQU LCD+3 ;读数据PA EQU 0FFD8HPB EQU 0FFD9HPC EQU 0FFDAHPCTL EQU 0FFDBHcode segmentassume cs:codelin db 0col db 0num db 0dis_num db 0temp0 db 0temp1 db 0count db 0org 1000hstart: MOV DX,PCTLMOV AL,90HOUT DX,ALcall init_lcdmov al,3call delay2mov count,0mov bx,offset tab0mov lin,0mov col,0mov num,16call dis_englishGOON: MOV DX,PAIN AL,DXTEST AL,01HJE GOON1TEST AL,02HJE GOON2TEST AL,04HJZ GOON3TEST AL,08HJE GOON4TEST AL,10HJE GOON5TEST AL,20HJE GOON6TEST AL,40HJE GOON7TEST AL,80HJZ GOON8JMP GOON9GOON1: JMP KEY1GOON2: JMP KEY2GOON3: JMP KEY3GOON4: JMP KEY4GOON5: JMP KEY5GOON6: JMP KEY6GOON7: JMP KEY7GOON8: JMP KEY8GOON9: mov bx,offset tab9mov lin,1mov col,0mov num,16call dis_englishMOV DX,PBMOV AL,0FFHOUT DX,ALJMP GOONKEY1: MOV DX,PBMOV AL,0FEHOUT DX,ALmov bx,offset tab1mov lin,1mov col,0mov num,16call dis_englishJMP GOONKEY2: MOV DX,PBMOV AL,0FDHOUT DX,ALmov bx,offset tab2mov lin,1mov col,0mov num,16call dis_englishJMP GOONKEY3: MOV DX,PBMOV AL,0FBHOUT DX,ALmov bx,offset tab3mov lin,1mov col,0mov num,16call dis_englishJMP GOONKEY4: MOV DX,PBMOV AL,0F7HOUT DX,ALmov bx,offset tab4mov lin,1mov col,0mov num,16call dis_englishJMP GOONKEY5: MOV DX,PBMOV AL,0EFHOUT DX,ALmov bx,offset tab5mov lin,1mov col,0mov num,16call dis_englishJMP GOONKEY6: MOV DX,PBMOV AL,0DFHOUT DX,ALmov bx,offset tab6mov lin,1mov col,0mov num,16call dis_englishJMP GOONKEY7: MOV DX,PBMOV AL,0BFHOUT DX,ALmov bx,offset tab7mov lin,1mov col,0mov num,16call dis_englishJMP GOONKEY8: MOV DX,PBMOV AL,07FHOUT DX,ALmov bx,offset tab8mov lin,1mov col,0mov num,16call dis_englishJMP GOONdis_number procpush axmov al,lin ;以下18条为根据行、列值定位显示英文起始坐标cmp al,0jnz nu0mov al,80hjmp nu1nu0: cmp al,1jnz nuretmov al,0C0hnu1: add al,colcall send_commov ah,0 ;以下10条为把3位十进制数的个位、十位、百位分离mov al,dis_nummov bl,10div blmov temp0,ahmov ah,0mov bl,10div blmov temp1,ahadd al,30h ;转为ASC码call send_data ;百位送LCD显示mov al,temp1add al,30h ;转为ASC码call send_data ;十位送LCD显示mov al,temp0add al,30h ;转为ASC码call send_data ;个位送LCD显示pop axnuret: retdis_number endp;--------------------------;在指定的行、列显示英文。

每行可显示16个英文字符,共4行;参数:行lin(0~1);列col(0~16) 英文个数num(0~15); 表地址bx;--------------------------dis_english procpush axmov al,lin ;以下18条为根据行、列值定位显示英文起始坐标cmp al,0jnz ch0mov al,80hjmp ch1ch0: cmp al,1jnz chretmov al,0C0hch1: add al,colcall send_commov ah,numch2: mov al,[bx]inc bxcall send_datadec ahjnz ch2pop axchret: retdis_english endp;--------------------------;清LCD屏;--------------------------close_lcd procpush axmov al, 01h ;清除命令call send_compop axretclose_lcd endp;--------------------------;初始化LCD;col 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 ;lin0:80 81 82 83 84 85 86 87 88 89 8a 8b 8c 8d 8e 8f ;lin1:C0 C1 C2 C3 C4 C5 C6 C7 C8 C9 Ca Cb Cc Cd Ce Cf ;--------------------------init_lcd procmov dx,LCDWI ;启动LCDmov al,30hout dx,al ;第1次启动LCDcall delay ;延时mov al,30hout dx,al ;第2次启动LCDcall delay ;延时mov al,30hout dx,al ;第3次启动LCDcall delay ;延时mov al,38h ;设置工作模式:out dx,al ;汇流、2行、5*7点阵call delay ;延时mov al,08h ;关显示out dx,alcall delay ;延时mov al,01h ;LCD清屏out dx,alcall delay ;延时mov al,0eh ;开显示、光标不闪烁out dx,alcall delay ;延时call chkbusy ;检测LCD状态lcd_p: mov al,06h ;光标右移且地址加1call send_commov al,02h ;光标归位call send_comcall delay ;延时retinit_lcd endp;-----------------------;读LCD忙闲状态;-----------------------chkbusy procpush dxpush axmov dx,LCDRSrechk: in al,dxmov cl,aljc rechkpop axpop dxretchkbusy endp;----------------------;写LCD命命;----------------------send_com proccall chkbusypush dxmov dx,LCDWIout dx,alpop dxretsend_com endp;-----------------------;写LCD数据;-----------------------send_data proccall chkbusypush dxmov dx,LCDWDout dx,alpop dxretsend_data endp;-----------------------;延时子程序;-----------------------delay procpush cxmov cx,1000hloop $pop cxretdelay endp;--------------------------;延时子程序;-------------------------- delay1 procpush cxmov cx, 0080hpop cxretdelay1 endp;--------------------------;延时子程序;AL是延时参数;--------------------------delay2 procpush axpush cxmov ah, 0mov cx, axdloop: push cxmov cx, 65535loop $pop cxloop dlooppop cxpop axretdelay2 endpTAB0 DB "KEY "TAB1 DB "KEY1 open "TAB2 DB "KEY2 open "TAB3 DB "KEY3 open "TAB4 DB "KEY4 open "TAB5 DB "KEY5 open "TAB6 DB "KEY6 open "TAB7 DB "KEY7 open "TAB8 DB "KEY8 open "TAB9 DB "ALLKEY close "code endsend start。

相关主题