1在键盘上输入数字,可以在数码管上循环左移显示。 2直流电机控制:在键盘定义功能键,包括正转键,反转键,速度设定键,复位键。可以实现按下速度设定键,然后用数字键输入速度,并在数码管上显示这一数字,然后按下正转或者反转键,直流电机开始按照这一速度正转或者反转,同时在数码管上显示目前运行时输出的电压。按下复位键,电机按照原运转方向相反的方向倒转回到原位。 (附件分别为两个的汇编程序)
单片机源程序如下:
- ;直流电机调速实验
- ;实验连线
- ;1) DA0832单元的CS连接端口地址300CS
- ;2) DA0832单元的AOUT连接直流电机INV
- CS0832 EQU 0300H
- CS8279C equ 0fff1h
- CS8279D equ 0fff0h
- DA0V EQU 000H
- DA2V5 EQU 07FH
- DA5V EQU 0fFH
- led0 equ 0fff0h
- led1 equ 0fff1h
- org 0
- mloop: ; mov dptr,#CS0832
- MOV SP,#40H
-
- ;------------------------
- ; 初态送显示缓冲区
- ;------------------------
- xmos: mov r0,#30h
- mov a,#10h
- x35s: mov @r0,a
- inc r0
- cjne r0,#36h,x35s
- inc a
- mov @r0,a
- ;-----------------------------
- ; 扫描待令入口区
- ;-----------------------------
- xmon: mov r1,#30h
- call dikey ;调显示键扫
- cjne a,#10h,next ;判数字键还是功能键
- next: cjne a,#20h,next1
- sjmp xmon
- next1: cjne r1,#10h,krds
- keep: jNb p1.0,L0
- jNb p1.1,L1
- jNb p1.2,L2
- krds: jnc krdy ;转功能键处理
- ;----------------------------
- ; 功能键处理入口
- ;-----------------------------
- krdy: mov dptr,#CKEY
- anl a,#03h
- clr c
- rl a
- mov r2,a
- inc a
- movc a,@a+dptr
- push acc
- mov a,r2
- movc a,@a+dptr
- push acc
- ret
- ;-----------------------------
- ; 速度设置键入口
- ;------------------------------
- VSET: mov r1,#30h
- call dikey
- cjne a,#20h,ste1
- sjmp VS
- ste1: mov @r1,a
- call diled
- ljmp xmon
- ;----------------------------
- ; 反转键处理入口
- ;----------------------------
- LEFT: mov dptr,#CS0832
- mov r1,#30h
- mov a,#DA0V
- cjne @r1,#10h,qia1
- sjmp qia2
- qia1: mov a,#0fh
- mov b,@r1
- mul ab
- qia2: movx @dptr,a
- acall disp0
- clr p1.0
- setb p1.1
- setb p1.2
- ljmp mloop
- ;----------------------------
- ; 正转键处理入口
- ;----------------------------
-
-
- RIGHT: mov dptr,#CS0832
- mov r1,#30h
- mov a,#DA5V
- cjne @r1,#10h,qia3
- sjmp qia4
- qia3: mov a,#0fh
- mov b,@r1
- mul ab
- add a,#7fh
- qia4: movx @dptr,a
- clr p1.1
- setb p1.0
- setb p1.2
- acall disp1
- ljmp mloop
- ;----------------------------
- ; 停止键处理入口
- ;----------------------------
-
-
-
- STOP: mov dptr,#CS0832
- mov a,#DA2V5
- movx @dptr,a
- clr p1.2
- setb p1.1
- setb p1.0
- acall disp1
- ljmp mloop
-
- ;-----------------------
- ; 刷新显示子程序
- ;-----------------------
- diled: mov r1,#35h ;从高位开始
- mov 38h,#80h
- dilex: mov dptr,#led1 ;送字位代码
- mov a,38h
- movx @dptr,a
- mov dptr,#ZOE0 ;索字形代码
- mov a,@r1
- movc a,@a+dptr
- mov dptr,#led0 ;送当前字形
- movx @dptr,a
- inc 38h
- dec r1
- cjne r1,#2fh,dilex ;末满六位转
- Ret
- ;-----------------------
- ; 键盘扫描子程序
- ;-----------------------
- dikey: mov r4,#00h ;设査键次数
- dikrd: mov dptr,#led1 ;指状态端口
- movx a,@dptr ;索键盘标志
- anl a,#07h ;屏敝无效位
- jnz keys ;有键按下转
- djnz r4,dikrd ;末完继续査
- mov a,#20h ;定义无键码
- ret ;返回
- keys: mov dptr,#led0 ;指键入端口
- movx a,@dptr ;读当前键码
- mov r2,a ;存当前键码
- anl a,#03h ;保留低二位
- xch a,r2 ;取当前键码
- anl a,#38h ;舍弃无效位
- rr a ;键码的压缩
- orl a,r2 ;与低二拼接
- mov dptr,#GOJZ ;指键码表首
- movc a,@a+dptr ;索取键码值
- ret ;返回
- ;------------------------
- ; 电压显示子程序
- ;------------------------
- disp0:
- xrl a,#0FFh
- clr c
- subb a,#7Fh
- mov r7,a
- mov r2,#85h
- mov r0,#11
- mov dptr,#CS8279C
- mov a,r2
- movx @dptr,a
- mov dptr,#ledmap ;指字形表首
- mov a,r0 ;取送显数据
- movc a,@a+dptr ;索字形代码
- mov dptr,#CS8279D ;指向字形口
- movx @dptr,a ;送当前字形
- mov b,#50
- mov a,r7
- div ab
- mov r0,a
- dec r2
- mov dptr,#CS8279C
- mov a,r2
- movx @dptr,a
- mov dptr,#ledmap ;指字形表首
- mov a,r0 ;取送显数据
- movc a,@a+dptr ;索字形代码
- mov dptr,#CS8279D ;指向字形口
- movx @dptr,a ;送当前字形
- dec r2
- mov r0,#10
- mov dptr,#CS8279C
- mov a,r2
- movx @dptr,a
- mov dptr,#ledmap ;指字形表首
- mov a,r0 ;取送显数据
- movc a,@a+dptr ;索字形代码
- mov dptr,#CS8279D ;指向字形口
- movx @dptr,a ;送当前字形
- dec r2
- mov a,#5
- xch a,b
- div ab
- mov r0,a
- mov dptr,#CS8279C
- mov a,r2
- movx @dptr,a
- mov dptr,#ledmap ;指字形表首
- mov a,r0 ;取送显数据
- mov dptr,#CS8279D ;指向字形口
- movx @dptr,a ;送当前字形
- dec r2
- mov dptr,#CS8279C
- mov a,r2
- movx @dptr,a
- mov dptr,#ledmap ;指字形表首
- mov a,b ;取送显数据
- movc a,@a+dptr ;索字形代码
- mov dptr,#CS8279D ;指向字形口
- movx @dptr,a ;送当前字形
- ret
- disp1: clr c
- subb a,#7Fh
- mov r7,a
- mov r2,#85h
- mov r0,#0
- mov dptr,#CS8279C
- mov a,r2
- movx @dptr,a
- mov dptr,#ledmap ;指字形表首
- mov a,r0 ;取送显数据
- movc a,@a+dptr ;索字形代码
- mov dptr,#CS8279D ;指向字形口
- movx @dptr,a ;送当前字形
- mov b,#50
- mov a,r7
- div ab
- mov r0,a
- dec r2
- mov dptr,#CS8279C
- mov a,r2
- movx @dptr,a
- mov dptr,#ledmap ;指字形表首
- mov a,r0 ;取送显数据
- movc a,@a+dptr ;索字形代码
- mov dptr,#CS8279D ;指向字形口
- movx @dptr,a ;送当前字形
- dec r2
- mov r0,#10
- mov dptr,#CS8279C
- mov a,r2
- movx @dptr,a
- mov dptr,#ledmap ;指字形表首
- mov a,r0 ;取送显数据
- movc a,@a+dptr ;索字形代码
- mov dptr,#CS8279D ;指向字形口
- movx @dptr,a ;送当前字形
- dec r2
- mov a,#5
- xch a,b
- div ab
- mov r0,a
- mov dptr,#CS8279C
- mov a,r2
- movx @dptr,a
- mov dptr,#ledmap ;指字形表首
- mov a,r0 ;取送显数据
- movc a,@a+dptr ;索字形代码
- mov dptr,#CS8279D ;指向字形口
- movx @dptr,a ;送当前字形
- dec r2
- mov dptr,#CS8279C
- mov a,r2
- movx @dptr,a
- mov dptr,#ledmap ;指字形表首
- mov a,b ;取送显数据
- movc a,@a+dptr ;索字形代码
- mov dptr,#CS8279D ;指向字形口
- movx @dptr,a ;送当前字形
-
- ret
-
- ledmap: db 0ch,9fh,4ah,0bh,99h,29h,28h,8fh ;01234567
- db 08h,09h,0f7h,0fbh,6ch,1ah,68h,0e8h ;89ABCDEF
- ;------------------------
- ;-------功能键定义
- CKEY: dw LEFT,RIGHT,STOP,VS
- ;------字形代码
- ZOE0: DB 0ch,9fh,4ah,0bh,99h,29h,28h,8fh,08h,09h,88h
- ; 0 1 2 3 4 5 6 7 8 9 a
- DB 38h,6ch,1ah,68h,0e8h,0ffh,0c0h
- ; b c d e f 关闭 p.
- ;------按键代码(20h为溢出码)
- GOJZ: db 13h,12h,11h,10h,0dh,0ch,0bh,0ah,0eh,03h ;0~9
- db 06h,09h,0fh,02h,05h,08h,00h,01h,04h,07h ;a~13
- db 20h,20h,20h,20h,20h,20h,20h,20h,20h,20h,20h,20h;
- END
复制代码
所有资料51hei提供下载:
汇编程序.rar
(3.34 KB, 下载次数: 35)
|