matlab小程序

matlab小程序,第1张

[y_max,i_max]=max(y)里y_max指y里最大值,i_max值最大值是第几个元素,x(i_max)就是指x的最大值,plot(x(i_max),y_max,'o')就是在图中标出最大那个点

(1)P3.3小键盘按下P1.3亮再按0.5秒灭。

org 0000h

ajmp main0

org 0080h

MAIN0:

CLR 21H 清标志

main:

mov c,p3.3 检测按键

jc main

MOV R6,#200 设定延时

MOV R7,#200

TT0:

JNB 21H,TT2 检测灯状态

tt:

mov c,p3.3 检测按键

jnc tt1

JNB 20H,MAIN 检测时间标志

CLR 20H

AJMP TT3

TT2:

mov c,p3.3 检测按键

jnc tt2

TT3:

CPL 21H 改变灯状态

cpl p1.3

ajmp main

TT1: NOP 延时但不是子程序

NOP

NOP

NOP

NOP

NOP

DJNZ R6,TT

MOV R6,#200

DJNZ R7,TT

MOV R7,#200

SETB 20H

AJMP TT

end

(2)数码管数据 p0,数码管控制p2 独立按键p1口 ,对独立键进行按键次数计数,三位数码管显示。 *

K1按下后,进行加1计数 *

K2按下后,进行减1计数。 *

K3按下后,进行加5计数。*

K4按下后,清计数单元,数码管显示0。 *

按住键可以快速计数。

K1 BIT P1.4

K2 BIT P1.5

K3 BIT P1.6

K4 BIT P1.7

K_OLD EQU 30H

K_NEW EQU 31H

K_COUNT EQU 32H

DISSTART EQU 40H显示单元首地址

LED_DATA EQU P0 数码管数据口定义

---------------------------------------------------------

ORG 0000H

JMP MAIN

ORG 0080H

---------------------------------------------------------

MAIN:

MOV SP,#60H

MOV P1,#0FFH

MOV P0,#0FFH

MOV K_OLD,#00H

MOV K_COUNT,#00H

MAIN1:

CALL CONVT

CALL PLAY

CALL KEY_PROG

JMP MAIN1

KEY_PROG:

CALL K_SCAN 键扫描

MOV A,K_NEW

CJNE A,K_OLD,KEY_P1

JMP KEY_P_END

KEY_P1:

MOV R4,#20

KEY_P2:

CALL CONVT用显示程序来进行键延时

CALL PLAY

DJNZ R4,KEY_P2

CALL K_SCAN 再判断键是否按下

MOV A,K_NEW

CJNE A,K_OLD,KEY_P3

JMP KEY_P_END

KEY_P3:

JB ACC.0,LOOP1 K1按下

JB ACC.1,LOOP2 K2按下

JB ACC.2,LOOP3 K3按下

JB ACC.3,LOOP4 K4按下

JMP KEY_P_END

LOOP1:

INC K_COUNT 键计数加1

JMP KEY_P_END

LOOP2:

DEC K_COUNT 键计数减1

JMP KEY_P_END

LOOP3:

INC K_COUNT 键计数加5

INC K_COUNT

INC K_COUNT

INC K_COUNT

INC K_COUNT

JMP KEY_P_END

LOOP4:

MOV K_COUNT,#00H 键计数单元清零

KEY_P_END:

RET

---------------------------------------------------------

代码变换 (HEX TO BCD)

---------------------------------------------------------

CONVT:

MOV A,K_COUNT

MOV B,#100

DIV AB

MOV DISSTART+2,A百位存放在DISSTART+2

MOV A,#10

XCH A,B

DIV AB

MOV DISSTART+1,A十位存放在DISSTART+1

MOV DISSTART,B 个位存放在DISSTART

RET

---------------------------------------------------------

键扫描子程序

---------------------------------------------------------

K_SCAN:

MOV P1,#0FFH

MOV K_NEW,#00H

MOV A,P1

CPL A

ANL A,#0F0H

SWAP A

MOV K_NEW,A

RET

---------------------------------------------------------

延时子程序

---------------------------------------------------------

DELAY:

MOV R6,#200

DEL:

MOV R7,#0FFH

DJNZ R7,$

DJNZ R6,DEL

RET

---------------------------------------------------------

PLAY:

MOV R0,#DISSTART 获得显示单元首地址

MOV R1,#07FH 从第一个数码管开始

MOV R2,#03H 共显示3位数码管

DISP1:

MOV A,@R0 获得当前位地址

MOV DPTR,#TAB_NU 获得表头

MOVC A,@A+DPTR查表获得显示数据

MOV LED_DATA,A显示数据

MOV P2,R1 开始显示当前位

MOV A,R1 准备显示下一位

RR A

MOV R1,A 下一位

INC R0取下一个单元地址

LCALL DELAY2MS延时 2 MS

DJNZ R2,DISP1 重复显示下一个

MOV P2,#0FFH 关闭显示

RET 显示完成,返回

---------------------------------------------------------

延时子程序

---------------------------------------------------------

DELAY2MS:

MOV R6,#10

DEL1:

MOV R7,#100

DJNZ R7,$

DJNZ R6,DEL1

RET

TAB_NU:

db 28h,7eh,0a2h,62h,74h,61h,21h,7ah,20h,60h 字形代码表

**********************************************************

END

两个例子我想够你明白的了。详细的解释,代表性的例子,可慢慢学习

不要将信号的边沿检测搞成这么多。写成下面这样试试看:

if clk'event and clk='1' then

if et='0' then

case state is

when "00" =>count := 0stop := 0

when "01" =>count := 2stop := 0

when "10" =>count := 5stop := 0

when others =>stop := 1

end case

else if count=0 then count := 9

else count := count-1

end if

end if

end if


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/11755936.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-18
下一篇 2023-05-18

发表评论

登录后才能评论

评论列表(0条)

保存