编一个AT89C51单片机00 —99 秒的汇编程序,要求有循环和暂停,用两个独立数码管显示

作者&投稿:丁尤 (若有异议请与网页底部的电邮联系)
编一个AT89s51单片机99 —00 秒的汇编程序,用两个独立数码管显示~

ORG 0000H
LJMP MAIN
ORG 030H
MAIN:
MOV R2,#0FFH
MOV R5,#0AH
D0: INC R2
MOV R4,#64H
MOV R1,#0FFH
D1: MOV R3,#0FFH
INC R1
D2: MOV A,R1
DA A
MOV R1,A
ANL A,#0FH
ACALL CHA
MOV P2,#0EBH
ACALL DELAY
MOV A,R1
SWAP A
ANL A,#0FH
ACALL CHA
MOV P2,#0E7H
ACALL DELAY
MOV A,R2
ACALL CHA
MOV P2,#0E3H
ACALL DELAY
DJNZ R3,D2
DJNZ R4,D1
DJNZ R5,D0
LJMP MAIN

CHA: MOV DPTR,#TAB
MOVC A,@A+DPTR
MOV P0,A
RET
DELAY: MOV R6,#0FH
D4:MOV R7,#0FH
DJNZ R7,$
DJNZ R6,D4
RET
TAB: DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH
END
我的是000--999的,用38译码器控制数码管的3个共阴端,楼主自己修改一下吧!祝楼主好运了!

你好,因为是手机,所以无法贴出程序,但是你的要求很容易实现,我先给你点提示,自己先做一下,不行再回复我。
首先呢,定义两个全局变量,以作十与个并赋值为0,然后编写一个独立键盘函数,分别用于判断SB1~4,若 SB1==0,TR0=1,若SB2==0,TR0=0,若SB3==0,SHI ,若SB4==0,FEN 。主要功能就这样,当然这个并不完美,需要你自己去添加一些功能,然后再编写中断函数。
希望我的回答能帮助到你。

;利用中断的99秒计时器 ,动态扫描两位数码管

;P0口接J3,数据端口

;P2.2接 J2 B端子,表示段码锁存

;P2.3接 J2 A端子,标志位码锁存

LATCH1 BIT P2.2

LATCH2 BIT P2.3

ORG 00H

JMP START

ORG 0BH

JMP TIM0

START:MOV R3,#00   ;中断循环次数

      MOV R4,#0    ;时间初值

      MOV DPTR,#TABLE

      MOV SP,#40H

      MOV TMOD,#01H  ;定时器工作方式

      MOV TH0,#HIGH(65536-3800)

      MOV TL0,#LOW(65536-3800)  ;初值4MS

      SETB TR0

      MOV IE,#82H  ;开中断

TIM0:

     MOV TH0,#HIGH(65536-3800)

     MOV TL0,#LOW(65536-3800)

     INC R3

     CJNE R3,#250,X1  ;1S

     MOV R3,#0

              

     MOV A,R4       ;十进制转换

     MOV B,#10

     DIV AB

     MOV 20H,B  ; 个位

     MOV 21H,A  ; 十位

     INC R4

     CJNE R4,#100,LEDSCAN  ;到100则清零

     MOV R4,#0

LEDSCAN: CALL SCAN  ;调用数码管扫描

X1:   PUSH ACC

      PUSH PSW

      CALL SCAN

      POP PSW

      POP ACC

      RETI

SCAN:

     MOV A,21H

     MOVC A,@A+DPTR

     MOV P0,A

     SETB LATCH1

     CLR LATCH1

     MOV P0,#11111110B ;扫描子程序

     SETB LATCH2

     CLR LATCH2

     CALL DELAY1

     MOV A,20H

     MOVC A,@A+DPTR

     MOV P0,A

     SETB LATCH1

     CLR LATCH1

     MOV P0,#11111101B  ;0代表选通该位数码管

     SETB LATCH2

     CLR LATCH2

     CALL DELAY1

     RET

DELAY:MOV R5,#50         ;典型延时程序

D1:   MOV R6,#40

D2:   MOV R7,#248

      CALL SCAN

      DJNZ R7,$

      DJNZ R6,D2

      DJNZ R5,D1

      RET

DELAY1:MOV R6,#4    ;扫描延时

D3:    MOV R7,#248

       DJNZ R7,$

       DJNZ R6,D3

       RET

TABLE:DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH    ;共阴字码表

END 

是用动态扫描的方法显示的,用了2个锁存器,8个数码管的。 

附上电路图



ORG 0000H

LJMP MAIN

ORG 000BH

LJMP T0ISR

ORG 0030H

MAIN:

MOV TMOD,#01H

MOV TH0,#HIGH(65536-10000)

MOV TL0,#LOW(65536-10000)

SETB ET0

SETB TR0

SETB EA

SETB 00H

LOOP:

SJMP LOOP

T0ISR:

CLR TR0

MOV TH0,#HIGH(65536-10000)

MOV TL0,#LOW(65536-10000)

SETB TR0

MOV DPTR,#TABLE

T0C:

CPL 00H

JB 00H,T001

MOV P3,#0FDH

MOV A,R1

MOVC A,@A+DPTR

MOV P2,A

SJMP T002

T001:

MOV P3,#0FEH

MOV A,R0

MOVC A,@A+DPTR

MOV P2,A

T002:

INC R2

MOV A,R2

CJNE A,#100,T0E

MOV R2,#0

INC R0

CJNE R0,#9,T0E

MOV R0,#0

INC R1

CJNE R1,#9,T0E

MOV R1,#0

T0E:

RETI

TABLE:      ; 共阴极数码管显示代码表

DB    3FH,06H,5BH,4FH,66H ;01234

DB    6DH,7DH,07H,7FH,6FH ;56789


END



这个就可以:
http://zhidao.baidu.com/question/156237554.html?push=core
http://hi.baidu.com/%D7%F6%B6%F8%C2%DB%B5%C0/blog/item/295f9639bccb7c2f96ddd86f.html

wo lai bangzhu ni


求用单片机设计一个秒表AT89C51
ORG 0000H AJMP MAIN ORG 0003H AJMP X0_INT ORG 000BH AJMP T0_INT ORG 0013H AJMP X1_INT MAIN:MOV TMOD,#01H ;T0定时方式1 MOV TH0, #(65536-50000) \/ 256 ;50ms@12MHz MOV TL0, #(65536-50000) MOD 256;SETB TR0 SETB ET0 ;开启定时中断 SETB EX0 SET...

单片机做数字时钟,有两个芯片,一个是AT89C51,一个是74LS245,将程序烧录...
把程序烧录到AT89C51芯片就可以了,74LS245是我们常用的芯片,用来驱动led或者其他的设备,它是8路同相三态双向总线收发器,可双向传输数据。

at89c51单片机的累计器A只有一个吗? 还有寄存器R可以用CLR CPL RL RR...
A是只有一个。工作寄存器有4组,每组8个,R0-R7 CPL, CLR ,RL, RR 只能对A操作,不能用Rn作为操作数。

编一个AT89C51单片机00 —99 秒的汇编程序,要求有循环和暂停,用两个...
SETB LATCH1 CLR LATCH1 MOV P0,#11111101B ;0代表选通该位数码管 SETB LATCH2 CLR LATCH2 CALL DELAY1 RET DELAY:MOV R5,#50 ;典型延时程序 D1: MOV R6,#40 D2: MOV R7,#248 CALL SCAN DJNZ R7,DJNZ R6,D2 DJNZ R5,D1 RET DELAY1:MOV R6,#4 ;扫描延时 D3: ...

用C语言编写AT89C51单片机程序,设计一个智能数字钟。
sbit s4=P2^1; \/\/s4按键,减1 sbit led1=P0^0;sbit led2=P0^1;sbit led3=P0^2;uchar count;uchar sec,minu,hour,day,week,mon;uchar n_sec,n_minu,n_hour;uint year;uchar set_2=1,set_1=1;uchar hs,hg,mis,mig,ss,sg;uchar nhs,nhg,nms,nmg,nss=0,nsg=0;uchar ms,mg,...

在AT89C51单片机中,如果采用6MHz晶振,一个机器周期为()。
在AT89C51单片机中,如果采用6MHz晶振,一个机器周期为()。A.1us B.2us C.4us D.8us 正确答案:B

求一个AT89C51闪烁灯C语言程序
sbit p1=P1^1;sbit p2=P1^2;sbit p3=P1^3;sbit p4=P1^4;sbit p5=P1^5;sbit p6=P1^6;sbit p7=P1^7;然后写一个延时函数,来调节流水灯的时间间隔 void mdelay(unsigned int t){ unsigned char n;for(;t>0;t--)for(n=0;n<125;n++){;} } 下面就是主函数,包括流水灯的反复...

跪求一个at89c51单片机的c语言程序
date=1;month=1;year=1;flag=0;wela1=0;wela2=0;EA=1;ET0=1;TMOD=0x01;TH0=(65536-50000)\/256;TL0=(65536-50000)%256;TR0=1;} void delay(uint z){ uint x,y;for(x=z;x>0;x--)for(y=110;y>0;y--);} void second_display(){ int sec_shi,sec_ge;sec_shi=sec\/10...

编写一段程序,要求用at89c51控制四个led灯,是他们逐个亮以后在逐个灭...
LED 灯逐个亮起来然后再逐个灭掉的效果。其中,sbit 定义了四个位于 P2 口的 LED 灯,而 delay 函数则是一个延时函数,可以用来控制 LED 灯亮起和灭掉的时间。注意:在编译运行上述代码前,请确保你已经安装了编译器和相应的驱动软件,并且按照规定的方式将代码下载到 AT89C51 微控制器上。

89c51和89c52可以用同一个代码
可以。AT89C51是一种带4K字节FLASH存储器的低电压、高性能CMOS 8位微处理器,俗称单片机。与89c52代码是可以通用的,是一种低功耗、高性能 CMOS8位微控制器,具有8K在系统可编程Flash存储器。

南涧彝族自治县13347843772: AT89c51单片机程序控制两个数码管显示00 - 59秒表的程序要怎么编啊? -
冀轰邦瑞: display(second)子函数与两个数码管的连接方式有关 void main(void )//主程序 { TMOD=0x01;// 定时器1工作方式一 ET0=1; EA=1; TH0=(65536-10000)/256;//定时10ms TL0=(65536-10000)%256; TR0=0;//上电先不启动 while(1) { if(key1==0)//判...

南涧彝族自治县13347843772: 写一个有关单片机AT89C51的程序
冀轰邦瑞: ORG 0000H ;单片机上电后从0000H地址执行 AJMP START ;跳转到主程序存放地址处 ORG 0030H ;设置主程序开始地址 START:MOV SP,#60H ;设置堆栈起始地址为60H MOV A,#0FEH ;ACC中先装入LED1亮的数据(二进制的...

南涧彝族自治县13347843772: 用C语言编写AT89C51单片机程序,设计一个智能数字钟. -
冀轰邦瑞: 基本要求:1.C语言程序要求是模块化设计.2.该闹钟基于AT89C51单片机及相关外围电路进行设计.3.该闹钟有6个数码管(共阳极),可分别显示时间(时、分、秒)、及定时时间(分、秒).4.该闹钟有4个按钮,S1是切换显示按键,该键按下时可分别实现切换正常走时显示、设定走时显示、设置定时时间,启动定时,回到正常状态等功能.S2是设定键,即该键按下,将分别选中需要设定的选项.S3键是加键,即按下去表示相应选项加1.S4键是减键,即按下去表示相应的选项减1.5.该闹钟可以定时时间到,LED将发出提示闪光,且持续30s.发挥要求:1.定时时间可被打断,即打断后恢复时继续计时.2.设置闹钟报警功能;3.能切换显示年月日等信息.

南涧彝族自治县13347843772: 请大神们帮我编个简单的AT89C51单片机的c语言程序 -
冀轰邦瑞: #include "reg51.h" void main(void) {P1=P1 | 0X40;//P1.6=1P1=P1 & 0X7F;//P1.7=0P0=P0 | 0X07;//P0.0=1,P0.1=1,P0.2=1while(1){if((P1 & 0X40)==0)//P1.6=0{P0=P0 & 0XF8;//P0.0=0,P0.1=0,P0.2=0}if((P1 & 0X80)>0)//P1.7=1{PCON=PCON | 2;//睡眠}} }

南涧彝族自治县13347843772: 单片机编程AT89C51 初始时数码管显示0000,按一次KEY1,数码管显示内容加1,按一次K -
冀轰邦瑞: #include<reg52.h> #define uint unsigned int #define uchar unsigned char sbit wela=P2^7; sbit dula=P2^6; sbit key1=P3^4;//独立键盘,看你自己需要按哪个键 sbit key2=P3^5;//独立键盘 sbit key3=P3^6;//独立键盘 uint qian,bai,shi,ge,num; ...

南涧彝族自治县13347843772: 用AT89C51单片机编写一个C语言程序实现2个数码管秒计数器,用4个按键分别控制暂停、加一秒、减一秒和继续 -
冀轰邦瑞: #include<reg51.h>#define uchar unsigned char; uchar LED1,LED2; uchar distab[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90}; uchar num=0;sec,key; void delay(unsigned int a) { unsigned int i,j; for(i=0;i<a;i++) for(j=0;j<120;j++); } void ...

南涧彝族自治县13347843772: 用单片机c51,c语言编00 - 99计数器程序!谢谢!! -
冀轰邦瑞: 这个以前做过,给:#include <AT89X51.H> unsigned char code table[]={0x3f,0x06,0x5b,0x4f,0x66, 0x6d,0x7d,0x07,0x7f,0x6f}; unsigned char Count;void delay10ms(void) { unsigned char i,j; for(i=20;i>0;i--) for(j=248;j>0;j--); }void main(void) { ...

南涧彝族自治县13347843772: 关于单片机AT89C51程序,利用两个数码管,利用按键控制实现“数字减一”显示99到00. -
冀轰邦瑞: #include "reg52.h" #include<intrins.h> #define uchar unsigned char uchar code LED_TAB[]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F}; unsigned int x=9999; void delay(unsigned int z) { unsigned int x,y; for(x=z;x>0;x--) for(y=110;y>...

南涧彝族自治县13347843772: 单片机at89c51程序 -
冀轰邦瑞: #include<reg51.h> void delay(int a) { while(a--); } main() { int i; for(i=0;i<3;i++) { P1=0x16; delay(30000); P1=0x00; delay(30000); } P1=0x16; P2=0x35; while(1); }

南涧彝族自治县13347843772: AT89C51单片机设计一个简易秒表? -
冀轰邦瑞: 定时器10ms中断 检测按键且10ms位加一 若10ms=10,100ms位加一 若10ms=10,1000ms位加一 以此内推 显示最好用LCD的 用数码管的也行 有疑问mail:290765583@163.com

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