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

📄 01.txt

📁 微机原理汽车信号灯的课程设计
💻 TXT
字号:
stack segment 
     dw 200 dup (?)
stack ends

data segment 
message db 'You are driving a so beautiful car,please keep taking care of your steering wheel and road!',0ah,0dh;系统提示信息
        db 'Turn on switchs and watch the light glint!',0ah,0dh
        db 'Switch1 is for zuozhuan,switch2 is for youzhuan,switch3 is for jinji,switch4 is for tingkao,switch5 is for shache!'
        db 0ah,0dh
        db 'If you want to quit, please hit ''q'' or ''Q''!',0ah,0dh,'$'
err     db 'You have a mistake in your operation!',0ah,0dh,'$'
flag  db 0                                                                 ;初始化状态标志变量为0
t     dw 0                                                                 ;初始化延时变量为0                                                                      
num   dw 0                                                                 ;初始化数字变量为0
data1    db 15h,00h,15h,00h,15h,00h                                        ;左转/左转刹车
data2    db 2ah,00h,2ah,00h,2ah,00h                                        ;右转/右转刹车 
data ends

code segment 
     assume ss:stack,cs:code,ds:data

m proc far
start:   mov   ax,ds
	       push  ax
	       mov   ax,00h
	       push  ax                             ;保留程序数据段地址
	  
          mov ah,09h                           ;显示系统提示信息
	       mov dx,seg message
	       mov ds,dx
	       mov dx,offset message
	       int 21h
          
         ;初始化8255
         mov dx,303h                          ;取8255的控制端口的地址
         mov al,83h                           ;初始化8255的A口和C口高四位为输出模式                
         out dx,al                            ;B口和C口低四位为输入模式

         ;初始化灯LED全灭
         mov dx,300h                          ;取8255的端口A的地址
         mov al,00h                           ;使8255的PA0-PA7全为0
         out dx,al                            ;使所有的灯LED全灭
   
wait:    ;检测"q"或者"Q"键
         mov ah,0bh
         int 21h                              ;调用DOS 21H 功能0BH 进行键盘判断
	      inc al
	      jnz readpc                           ;检测是否有键按下
	      mov ah,08h
	      int 21h                              ;调用DOS 21H 功能08H 进行键盘输入判断
	      cmp al,'q'                         
	      jz quit                              ;检测到"q",退出 
	      cmp al,'Q'
         jz quit                              ;检测到"Q",退出 

readpc:  mov dx,302h                          ;取8255的端口C的地址                         
         in al,dx                             ;读端口C的值
				                                   
	      test al,04h                          ;检测PC2口状态
         jnz case
lp:      in al,dx
         test al,04h
         jz lp                                ;循环检测直至放开
         xor flag,01h                         ;将状态值取反
case:    cmp flag,01h                         ;进行状态值比较
         jne stop
begin:   call ledflash                        ;调用灯光变幻过程  
         call delay2
         jmp wait
         ;灯LED全灭 
stop:    mov dx,300h                          ;取8255的端口A的地址
         mov al,00h                           ;使8255的PA0-PA7全为0
         out dx,al                            ;使所有的灯LED全灭
         jmp wait
quit:    ;灯LED全灭
         mov dx,300h                          ;取8255的端口A的地址
         mov al,00h                           ;使8255的PA0-PA7全为0
         out dx,al                            ;使所有的灯LED全灭
         ;返回DOS
         mov ah,4ch                           ;DOS功能调用
         int 21h                              ;返回DOS
m endp
delay2 proc 
         push cx
         push bx
         mov cx,02ffh
dl4:	   mov bx,0ffffh
dl3:     dec bx
	      jnz dl3
         dec cx 
	      jnz dl4
         pop bx
         pop cx
         ret
delay2 endp 
;检测开关switch的状态,以便产生八种不同的灯光变幻
ledflash proc
         mov dx,301h                          ;取8255的端口B的地址 
 	      in al,dx                             ;读端口B的值
         cmp al,81h                          ;检测PB0口switch1是否为1(是否左转)
         jne choice1
         mov si,offset data1                  ;置第一种灯光变幻组合                                                                 
         jmp here
choice1: cmp al,82h                          ;检测PB1口switch2是否为1(是否右转或)  
         jne choice10
         mov si,offset data2                  ;置第二种灯光变幻组合                                                                
         jmp here
choice10: mov dx,OFFSET err                   ;若状态均不符合,则为违规
         mov ah,09H                          ;操作,输出错误信息
         int 21H
         jmp choice0
;choice0: call m0                              ;调用声光变幻过程                                                
choice0: jmp  wait        
         ;送加电数据
here:    ;8253输出方波控制闪烁频率;
          mov dx,287h                         ;8253控制口地址;
          mov al,36h                          ;通道0,工作方式3,二进制计数;
          out dx,al                            ;8253控制字送控制口;
          mov dx,284h                         ;8253通道0地址;
          mov al,96h 
          out dx,al
                                    
         add si,num                                                                   
         mov al,[si]                          ;取当前加电数据
 	      mov dx,300h                          ;取8255的端口A的地址 
         out dx,al                             ;输出加电数据到端口A    
         inc num                              ;改变数字变量的值                            
         cmp  num,08h
         jne  next
         mov num,00h
next:    ret
ledflash endp
code     ends
         end start

⌨️ 快捷键说明

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