怎样用单片机编程:独立按键两个键控制一个数码管的加减 一个键加 一个键减

怎样用单片机编程:独立按键两个键控制一个数码管的加减 一个键加 一个键减,第1张

这个很容易嘛,你先设置一个寄存器,然后一直扫描两个按键(假设K1按下为加,K2按下为减),假设检测到K1被按下,寄存器就加1,如果检测到K2被按下,寄存器就减1;然后再调用显示函数就OK了。、

1、新建项目:打开VS2010-文件-新建-项目-MFC应用程序-名称(计算器)。

2、设置应用程序类型:点选为基于对话框,新建一个基于对话框的程序。如下图所示

3、调整对话框:删除对话框内所有控件,并将对话框调整至合适大小,如下图所示。

4、添加编辑框:添加三个编辑框加数1、加数2、和。ID分别设置IDC_ADD1、IDC_ADD2、IDC_SUM。和的属性Read Only设置为true,其余的默认。如下图所示。

5、添加静态文本:添加五个静态文本控件分别修改Caption为加数1,加数2,加运算符,和、+,=。如下图所示。

6、添加计算按钮:添加一个计算按钮,设置Caption为计算,ID为ID_ADD。如下图所示。

7、编辑代码:添加如下代码计算结果UpdateData(true);//读取编辑框的值到关联的值变量中m_sum=m_add1+m_add2;//计算结果存到编辑框的关联变量中UpdateData(false);//将计算的结果显示到编辑框中。

8、运行测试:编译运行,输入数值分别输入两个加数然后点击计算按钮,效果如下图所示。

K2 BIT P14    //+

K3 BIT P15    //-

K4 BIT P16    //CLR

K_OLD EQU 30H

K_NEW EQU 31H

K_COUNT  EQU 32H

S_BUF    EQU 33H

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_NEW,#00

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   K_OLD,A

CJNE  A,#1, NEXT_K1

AJMP  LOOP1

NEXT_K1:

CJNE  A,#2, NEXT_K2

AJMP  LOOP2

NEXT_K2:

CJNE  A,#3, KEY_P_END

AJMP  LOOP3

LOOP1:

INC K_COUNT ;键计数加1

JMP KEY_P_END

LOOP2:

DEC K_COUNT ;键计数减1

JMP KEY_P_END

LOOP3:

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

JMP KEY_P_END

KEY_P_END:

CALL PLAY

JNB K2,KEY_P_END

JNB K3,KEY_P_END

JNB K4,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+0,B ;个位存放在DISSTART

RET

;---------------------------------------------------------

; 键扫描子程序

;---------------------------------------------------------

K_SCAN:

SETB K2

JB  K2 ,NEXT_KEY1

AJMP   KEY1_DOWN //加1

NEXT_KEY1:

SETB K3

JB  K3 ,NEXT_KEY2

AJMP   KEY2_DOWN //减1

NEXT_KEY2:

SETB K4

JB   K4 ,END_KEY

AJMP CLEAR_KEY

CLEAR_KEY:

MOV A,#3

JMP END_KEY1

KEY1_DOWN: // 加1键按下

    MOV A,#1

JMP END_KEY1

KEY2_DOWN:  //

MOV A,#2

JMP END_KEY1

END_KEY1:

MOV K_NEW,A

AJMP EXIT_KET

END_KEY:

MOV K_NEW,#0

EXIT_KET:

RET

;---------------------------------------------------------

;延时子程序

;---------------------------------------------------------

DELAY:

MOV R6,#200

DEL:

MOV R7,#0FFH

DJNZ R7,$

DJNZ R6,DEL

RET

;---------------------------------------------------------

PLAY:

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

MOV R1,#0feH ;从第一个数码管开始

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

DISP1:

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

MOV DPTR,#TAB_NU ;获得表头

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

//CPL  A

MOV LED_DATA,A ;显示数据

MOV P2,R1 ;开始显示当前位

MOV A,R1 ;准备显示下一位

RL 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 03fh,06h,05bh,04fh,066h,06dh,07dh,07h,07fh,06fh ;字形代码表

;

END

LD I00

EU

R Q00,15

以上程序就可以使输出复位。

你的程序没有让输出复位的原因可能是:程序里面还有一些输出,比如说LD M00 =Q00之类的语句,这样一方面输出清零,另一方面又给出输出,显然不行,所以要停止整个程序,最好把M,V等等这些凡是使用到的变量统统复位为0,那么就完全没有任何问题了。

就是说向上的键按一次乘以十,按下的键除以十对吗(两端的先不考虑),如果这样可以判断所按键的键值啊,当为上键是将文本框内容乘以十,按下除以十,然后显示再处理一下,但为什么不用列表框呢?

以上就是关于怎样用单片机编程:独立按键两个键控制一个数码管的加减 一个键加 一个键减全部的内容,包括:怎样用单片机编程:独立按键两个键控制一个数码管的加减 一个键加 一个键减、MFC计算器按钮代码怎么写,比如我按了按钮数字键1,那怎么把它显示在编辑框你输入的是1,还有加减乘除、51单片机按键加减清零汇编语言编程等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

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

原文地址: https://outofmemory.cn/zz/9423993.html

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

发表评论

登录后才能评论

评论列表(0条)

保存