汇编语言51单片机怎么实现用KEY 1控制数码管上显示的数字加1 KEY2控制数码管上显示数字减1?

作者&投稿:许许 (若有异议请与网页底部的电邮联系)
单片机怎么实现用KEY 1控制数码管上显示的数字加1 KEY2控制数码管上显示数字减1?~

C_BUFFER EQU 32H
KEY1 BIT P1.0
KEY2 BIT P1.1
COUNT EQU 33H
BT0 BIT 20H.0

ORG 0000H
LJMP START
ORG 000BH
LJMP TIMER

START: MOV P1,#0FFH
MOV P2,#0FFH
MOV TMOD,#01H
MOV DPTR,#65536-10000
MOV DPH,TH0
MOV DPL,TL0
SETB EA
SETB ET0
SETB TR0
MOV 20H,#00H

MAIN: ACALL KEY_SCAN
ACALL DIS_PLAY
MOV PCON,#01H
JMP MAIN
KEY_SCAN:
MOV A,P1
CJNE A,#0FFH,NEXT
MOV C_BUFFEF,#0FFH
LJMP RET1
NEXT: CJNE A,C_BUFFER,M00
JB BT0,RET1
SETB BT0
CJNE A,#0FEH,KEY2
INC COUNT
MOV A,COUNT
CJNE A,#100,RET1
MOV COUNT,#00H
LJMP RET1
KEY2: CJNE A,#0FDH,RET1
DEC COUNT
CJNE A,#-1,RET1
MOV COUNT,#99
LJMP RET1
M00: MOV C_BUFFER,A
RET1: CLR BT0
RET
DIS_PLAY:
MOV DPTR,#TAB
MOV A,COUNT
MOV B,#10
DIV AB
MOVC A,@A+DPTR
MOV P2,A
SETB P1.7
CLR P1.6
ACALL DEL_1MS
MOV P2,#0FFH

MOV A,B
MOVC A,@A+DPTR
MOV P2,A
SETB P1,6
CLR P1.7
ACALL DEL_1MS
MOV P2,#0FFH
RET

TIMER: MOV DPTR,#65536-10000
MOV DPH,TH0
MOV DPL,TL0
RETI
DEL_1MS:
MOV R7,#2
D1: MOV R6,#250
DJNZ R6,$
DJNZ R7,D1
RET
TAB: DB ; 自己去查数码管0~9的代码;共阳的
这是51单片机的,12MHz晶振
再给你补个C的,我这的按键可以做实际产品的,无偿给你咯,共享,呵呵!愿你努力学习 啊!
#include
#define uchar unsigned char
#define uint unsigned int
#define DATAPORT P0
#define KEY P1
sbit DX=P2^2;
sbit WX=P2^3;
bit bdata flag;
uchar TEMP,num,i;
uchar code duanma[10]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};// 显示段码值0~9
void key_scan();
void dis_play();
void delay(uint t)
{
uint x,y;
for(x=0;x<t;x++)
for(y=122;y>0;y--);
}
void init()
{
TMOD=0x01;
TH0=(65536-10000)/256;
TL0=(65536-10000)%256;
TR0=1;
EA=1;
ET0=1;
}
void main()
{flag=0;
init();
while(1)
{
key_scan();
dis_play();
}
}
void key_scan()
{
if(KEY!=0xff)
{
if(KEY==TEMP)
{
if(flag==0)
{
flag=1;
sw
}
}
else
TEMP=KEY;
}
else
flag=0;
//TEMP=0xff;
}
void dis_play()
{
uchar m,n;
m=duanma[num/10];
n=duanma[num%10];
DATAPORT=0xfe;
WX=1;
WX=0;
DATAPORT=m;
DX=1;

DX=0;
delay(5);
DATAPORT=0xfd;
WX=1;
WX=0;
DATAPORT=n;
DX=1;

DX=0;
delay(5);
}
void timer0(void) interrupt 1
{
TH0=(65536-10000)/256;
TL0=(65536-10000)%256;

i++;
if(i==100)
{
i=0;
num++;
if(num==100)
num=0;
}
}
C语言没有按你的要求,以前课堂上写的!但差不多,自己看明白了往里面加就是咯 !显示部分自己改成你的,我不做说明了

第二个到底要实现什么,没看懂!
第一个如下
ORG 0000H
LJMP MAIN
ORG 0003H
LJMP INT_0
ORG 0030H
MAIN: MOV R3,#0
MOV DPTR,#TAB
SETB EA
SETB IT0
SETB EX0
SJMP $
INT_0: CLR EA
MOV A,R3
LCALL DISP
MOV A,R3
CJNE A,#9,LP
MOV R3,#0
SJMP RETURN
LP: INC R3
RETURN:SETB EA
RETI
DISP: MOVC A,@A+DPTR
MOV P2,A

RET
TAB: DB 0c0H,0f9H,0a4H,0b0H,99H,92H,82H,0f8H,80H,90H
END

原有key1为P3.4,添加个key2键为P3.5;

1、按你显示程序的逻辑,对TAB修改如下:

TAB:DB 00H,3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH,77H,7CH,39H,5EH,79H,71H,00H

即数据的首尾为0(这是个标记而已),中间才是七段码 0--F 的显示数据;

2、对CK1、CK2键盘按下及松开程序做了修改;

3、显示程序也进行了修改,唯独延时程序不用修改;

代码如下:

MAIN:

  MOV DPTR,#TAB 

  MOV R4,#00H 

  MOV R5,#01H 

  CLR A 

  LCALL DISPLAY

LOOP: 

  LCALL KEYDOWN

  LCALL DISPLAY 

  SJMP LOOP


KEYDOWN:

  JB P3.4,CK11    ;key1没有按下则转到key2

  LCALL DS1MS    ;P3.4=0表示Key1按下

  JB P3.4,CK11    ;key1还不能松开

  MOV R5,#01H

  INC R4      ;key1按下为加

  RET

CK11:

  JB P3.5,KEYDOWN   ;key2没有按下则转到key1

  LCALL DS1MS     ;P3.5=0表示Key2按下

  JB P3.4,KEYDOWN   ;key2还不能松开

  MOV R5,#10H

  DEC R4       ;key2按下为减

  RET


D1::

  MOV R4,R5

DISPLAY:

  MOV A,R4 

  MOVC A,@A+DPTR 

  JZ D1 //累加器(A)=0转

  MOV P0,A 

  SETB P2.6 

  CLR P2.6 

  MOV P0,#0FEH 

  SETB P2.7 

  CLR P2.7 

  LCALL DS1MS   ;延时

  LCALL KEYUP

  RET


KEYUP:

  JNB P3.4,KEYUP    ;P3.4=0转

  JNB P3.5,KEYUP    ;等待松开按键

  LCALL DS1MS 

  JNB P3.4,KEYUP

  JNB P3.5,KEYUP

  RET 


TAB:DB 00H,3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH,77H,7CH,39H,5EH,79H,71H,00H


END




51单片机,stm32,arduino都是用什么语言进行编程的?
1. 51单片机通常使用汇编语言或C语言进行编程,目前大多数情况下采用C语言。2. STM32单片机也主要使用C语言进行编程,其官方库函数和HAL库均基于C语言开发,虽含有部分汇编代码。3. Arduino拥有专用的编程环境,用户通过该环境使用C语言进行编程。4. 51单片机在中国引入较早,早期教育多以汇编语言为主,...

51单片机初学者该怎么学?
51单片机初学者学习步骤:1.第一步:基础理论知识学习。单片机编程用C语言或汇编语言都可以,但是我建议用C语言比较好,模块化管理编程方便,移植性强,适合编写大程序。如果是用C语言编程对单片机进行编程,需要掌握的知识就那么3个条件判断语句、3个循环语句、3个跳转语句和1个开关语句。别小看这10个语句,用...

51单片机C语言编程模板
```html51单片机C语言编程模板概览<\/ 快速入门指南 主函数模板<\/: void main() { while(1);} 循环结构<\/: - if(1) - while(1) - do-while(1) - switch(a) - for(i=0; i<65535; i++) 中断处理<\/: - void name() interrupt 1 using 1 { ......

怎样自学 51 单片机?
首先,从基础出发,C语言是单片机开发的基石,掌握《新概念51教程》和《爱上单片机》这样的入门书籍,它们将带你一步步走进单片机的世界,结合实际的传感器应用,理论与实践并重。选择一款适合的51开发板,郭天祥和金沙滩的教程是初学者的良师益友,它们将帮助你理解51单片机编程和硬件设计的底层原理。当你对...

51单片机编程题,用汇编语言怎么做?
ET0=1; TR0=1;} void timer0() interrupt 1 { TH0 = (65536-500)\/256; \/\/定时器装初值500, 1mS 中断一次 TL0 = (65536-500)%256;CP=~CP; \/\/改变脉冲信号的输出状态 } void main(){ Timer0_init();CP=0;while(1) { } } 汇编语言,才看到,算了,你别人的回答吧 ...

51单片机是什么?如何学习它的编程?都用在哪些方面
知识上,其实不需要多少东西,会简单的C语言,知道51单片机的基本结构就可以了。一般的大学毕业生都可以了,自学过这2门课程的高中生也够条件。设备上,一般是建议购买一个仿真器,例如,的“双功能下载线”就具有良好的稳定性和较快的下载速度,上位机可扩展,可以下载更多的单片机及嵌入式芯片。通过...

例说51单片机(C语言版)目录
以下是51单片机(C语言版)的详细目录,涵盖了从基础到高级功能的全面讲解:第1章 - uVision3简介: 了解并掌握这款集成开发环境的入门知识和基本操作。第2章 - uVision3与KeilC: 探索KeilC语言在51单片机开发中的角色,以及如何高效编写程序。第3章 - 输出口的应用: 学习如何利用单片机的输出功能实现...

51单片机的编程语言汇编和C各自有什么好处,那种更好?
汇编语言比较贴近硬件,编写者需要熟悉单片机的硬件,对硬件的利用率较高,但可读性较差,有时候自己写的程序即使加上详细注释过断时间也不好看懂,可移植性较差。C语言是面向对象的,不必太了解硬件也可以编程,可移植性好,但对硬件操作性差。这两种不能单纯的说哪种好,具体要看开发什么系统。

51单片机,stm32,arduino都是用什么语言进行编程的?
51单片机的编程 51单片机进入中国比较早,在早前用汇编编程比较多,我在上大学时也是学习的汇编编程,但是现在我用C语言编程,汇编已经不会了。51单片机比较常用的编程环境是Keil,现在Keil更新到Keil5了。如下是51单片机Keil的编程环境。STM32单片机的编程 STM32单片机是意法半导体推出的高性价比、片上资源...

怎样将汇编语言写入51单片机
首先要用编译器,编译成可以下载的文件,像51单片机,一般最后生成一个。hex文件。然后用一个下载工具,网上有卖,或者学校实验室等。将单片机放入烧录座上,用电脑上的上位机软件将得到的hex文件下载进去即可。

临渭区19214511372: 用单片机实现按下KEY1键三次后p1口的LED灯全部点亮再按一次K1键后LED灯全灭可反复 -
笪虏分清: 以51单片机为例,现场编写,没通过编译,大概原理是这样 #define LED P1 sbit key=P0.0;//定义按键与单片机接口,按下为低电平 unsigned char count=0;//定义全局变量,记录按键次数 void key_scan() {if(key==0){delay(10ms);//延时函数消抖,if(key==0)count++;} } main() {while(1){key_scan();if(count==3) LED=255; //按下三次,全亮,高电平点亮if(count==4) {LED=0; count=0}} }

临渭区19214511372: 单片机怎么实现用KEY 1控制数码管上显示的数字加1 KEY2控制数码管上显示数字减1? -
笪虏分清: 这个简单啊 调用数组就可以了 比如 定义一个数组 uchar code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7...

临渭区19214511372: 求编程单片机89c51,要求:按key1(P3.4,p3.5)键三次后,P1口的LED灯全部点亮,再按1次key1 -
笪虏分清: /***************** 晶振4MHZ,按键key1为P3.4,P3.5接口 功能:按 key1键三次,P1灯亮,再按一次灭 ,如此重复******************/#include<reg51.h> sbit key1 = P3^4;/****************** void delay40us(uint time) 输入参数:time 输出参数:无 函数功...

临渭区19214511372: 怎么用51单片机汇编语言实现下面的功能?K是按键L是灯 -
笪虏分清: MOV C,K0 MOV L7,C MOV C,K1 MOV L6,C ,,,,,其它位同上,如果接Kn和Ln分别接在同一组IO口,可以先读出来,然后反向,再输出

临渭区19214511372: 51单片机汇编语言编程独立按键 -
笪虏分清: 四个按键,定义如下:KEY1 BIT P3.0 KEY2 BIT P3.1 KEY3 BIT P3.2 KEY4 BIT P3.3按键处理程序: ;----------------------------------- READ_KEY: JB KEY1, K2CALL DELAYJB KEY1, K2JNB KEY1, $ PUSH ACCINC 75HMOV A, 75H...

临渭区19214511372: MCS - 51单片机 汇编语言 keil 软件编程 内容如下 求高人拯救 在线等 !!!!!! -
笪虏分清: KEYCODE EQU 30H MAIN: LCALL GETKEY MOV A,KEYCODE JZ MAIN MOV DPTR,#FUNC CLR C DEC A MOV R2,A RLC A ADD A,R2 JMP @A+DPTR FUNC: LJMP ADDFUN LJMP SUBFUN LJMP MULFUN LJMP DIVFUN ADDFUN: MOV...

临渭区19214511372: 用汇编语言写一个程序用51单片机实现四位密码开门,怎么写呢 -
笪虏分清: 不论是汇编程序还是C语言程序,首先要有原理图,或仿真图,才能写程序.四位密码锁要有按键的,最好是矩阵按键.还有,有没有显示电路,用数码管显示还是LCD显示?密码锁程序就挺麻烦的,用汇编语言写就更麻烦了.

临渭区19214511372: 单片机编程中怎么往缓冲区写数字 -
笪虏分清: 51单片机情况下:如果用汇编的话,用MOVX @DPTR,A如果用C语言,*ADDR=0xxx

临渭区19214511372: 单片机汇编按键程序 -
笪虏分清: loop:jnb key1,tokey1 jnb key2,tokey2 jnb key3,tokey3 jnb key4,tokey4...ljmp loop tokey1:lcall d10ms ;按键去抖动 jb key1,loop lcall display ;数码管扫描程序 ajmp loop

临渭区19214511372: 汇编语言里如何调用功能键F1F2F3等,用什么代码实现 -
笪虏分清: mov ah,1 int 21h or al,al jz non_func_key mov ah,1 int 21h cmp al,3bh ;F1 jz func_F1 cmp al,3ch ;F2 jz func_F2 cmp al,3dh ;F3 jz func_f3 jmp other_keynon_func_key: XXXXXfunc_F1:XXXXXXXXXX扩展功能键一般应该用BIOS的16调用实现.上面给的程序也能实现,但对于其它特殊键是不适用的,建议你看下BIOS调用.希望能帮到你

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 星空见康网