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

📄 新建 文本文档.txt

📁 使用8255芯片
💻 TXT
字号:
声-光报警器
编写程序控制音乐发生器和LED工作使他们组成声光报警装置,自己设置按键来控制音乐发生器启停

STACK1   SEGMENT
         DW       200 DUP (?)
STACK1   ENDS;
DATA     SEGMENT  PARA  PUBLIC  'DATA'
MES      DB   'PRESS SW3 TO START !',0AH,0DH         ;系统提示
         DB   'IF YOU WANT TO QUIT, PLEASE HIT ANY KEY!',0AH,0DH,'$'
T        DW   0                                      ;初始化延时变量为0                                                                      
NUM      DW   0                                      ;初始化数字变量为0 
DATA7    DB   81H,42H,24H,18H,81H,42H,24H,18H 
DATA     ENDS;
CODE     SEGMENT
         ASSUME   SS:STACK1,CS:CODE,DS:DATA
SL       PROC  
         MOV  AX,STACK1
         MOV  SS,AX
         MOV  AX,DATA
         MOV  DS,AX
         MOV  AH,09H               ;显示系统提示
		  MOV  DX,OFFSET MES
		  INT  21H
         MOV  DX,303H              ;初始化8255
         MOV  AL,83H               ;C口低4位输入高4位输出,B口输入,A口输出                                       
         OUT  DX,AL                    
         MOV  DX,300H              ;LED全灭
         MOV  AL,00H                           
         OUT  DX,AL                           
         MOV  DX,303H              ;关闭SPK
         MOV  AL,0CH               ;PC6=0        
         OUT  DX,AL
WAIT1:   MOV  DX,302H              ;查SW3按下?
         IN   AL,DX                ;(PC2=0?)
         AND  AL,04H
         JNZ  WAIT1                ;未按下,等待
BEGIN:   CALL LEDFLASH             ;已按下,调用LED发光子程        
         MOV  BX,200                      
         MOV  T,0FFFFH                              
HISON:   CALL OUTSPK               ;调用喇叭发声子程(高频)
         DEC  BX
         JNZ  HISON                               
         MOV  DX,300H              ;LED全灭
         MOV  AL,00H                 
         OUT  DX,AL               
         MOV  BX,200
         MOV   T,0AFH                                
LOSON:   CALL  OUTSPK              ;调用喇叭发声子程(低频)
         DEC   BX
         JNZ   LOSON
         CALL  DELAY2
         MOV   AH,0BH              ;查任意键按下?
         INT   21H
         CMP   AL,0FFH
         JE    QUIT                ;有任意键按下,退出
         JMP   BEGIN               ;无任意键按下,继续
QUIT:    MOV   DX,300H             ;LED全灭  
         MOV   AL,00H                          
         OUT   DX,AL       
         MOV   DX,303H             ;关闭SPK
         MOV   AL,0CH
         OUT   DX,AL
         MOV   AH,4CH                         
         INT   21H                 ;返回DOS
SL       ENDP;
DELAY1   PROC                      ;延时子程1
         PUSH  BX
         MOV   BX,T
DL1:     DEC   BX
	     JNZ    DL1
         POP   BX
         RET
DELAY1   ENDP ;
DELAY2   PROC                      ;延时子程2
         PUSH  CX
         PUSH  BX
         MOV   CX,04FFH
DL4:	  MOV   BX,0FFFFH
DL3:     DEC   BX
	 	  JNZ   DL3
         DEC   CX 
	     JNZ    DL4
         POP   BX
         POP   CX
         RET
DELAY2   ENDP ;
OUTSPK   PROC                      ;喇叭发声子程
	     MOV   DX,303H              ;从PC6输出方波
	     MOV   AL,0DH               ;置PC6=1;打开8253
 	     OUT   DX,AL            
	     CALL  DELAY1
	     MOV   DX,303H                      
	     MOV   AL,0CH               ;置PC6=0;关闭8253
	     OUT   DX,AL                           
         CALL  DELAY1
         RET
OUTSPK   ENDP;
LEDFLASH PROC                       ;LED发光子程序
         MOV   SI,OFFSET  DATA7     ;LED的点亮代码
         ADD   SI,NUM                                                                   
         MOV   AL,[SI]                      
         MOV   DX,300H              ;从8255的A口输出LED点亮代码
         OUT   DX,AL                          
         INC   NUM                                                 
         CMP   NUM,08H
         JNE   NEXT
         MOV   NUM,00H
NEXT:    RET
LEDFLASH ENDP
CODE     ENDS
         END   SL

⌨️ 快捷键说明

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