要求1、按开关K1 秒表开始计时 再按开关K1计时暂停,按开关K2秒表复位
2,如果可以的话顺便发一下电路图
3、最好是用汇编编写程序(本人看不懂C)
谢谢
;汇编程序如下。
;使用T0定时方式1,每隔50ms中断一次,用于修改时间及显示
;使用外部中断0、1,用于控制启动和清零
;========================================================
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
SETB EX1
SETB EA ;定时器初始化结束,下面循环显示即可
MOV R1, #99H ;0~99计数.
MOV R7, #1 ;50ms计数.
MOV P0, #0C0H
MOV P2, #0C0H
LOOP:
SJMP LOOP
;-----------------------------------------------------------
DELAY: ;延时子程序.
AA4: MOV R4, #0
DJNZ R4, $
DJNZ R4, $
RET
;-----------------------------------------------------------
X0_INT: ;启动/停止
CPL F0
RETI
;-----------------------------------------------------------
X1_INT: ;清零
MOV R1, #0
MOV P0, #0C0H
MOV P2, #0C0H
RETI
;-----------------------------------------------------------
T0_INT: ;50ms中断执行一次.
MOV TL0, #(65536-50000) MOD 256;
MOV TH0, #(65536-50000) / 256 ;50ms@12MHz
DJNZ R7, T0_END ;中断不到20次.
MOV R7, #20
JNB F0, T0_END
MOV A, R1
ADD A, #1
DA A
MOV R1, A
ANL A, #0FH
MOV DPTR, #TAB
MOVC A, @A+DPTR ;查出段码
MOV P2, A
MOV A, R1
SWAP A
ANL A, #0FH
MOVC A, @A+DPTR ;查出段码
MOV P0, A ;显示十位数.
T0_END:
RETI
;-----------------------------------------------------------
TAB:
DB 0c0H,0f9H,0a4H,0b0H,99H,92H,82H,0f8H,80H, 90H
END
;===========================================================
;仿真截图如下:
对不起,我不会用汇编做,所以用c语言编了一个,希望对你有帮助
#include <reg51.h>
#define uchar unsigned char
sbit start=P3^6;
sbit stop=P3^5;
uchar code dulatab[]={0x3f,0x06,0x5b,0x4f,0x66,
0x6d,0x7d,0x07,0x7f,0x6f,0x40}; //数字编码0-9
uchar code welatab[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};//位控制字
uchar msec,sec,min;
void delay(uchar time) //延时
{
uchar i,j;
for(i=0;i<time;i++)
{
for(j=0;j<110;j++)
;
}
}
void writeled(uchar num,uchar addr)
{
//关显示
P2=0xff;
//送数据
P0=dulatab[num];
//开显示
P2=welatab[addr];
delay(4);
}
void display(uchar msec,uchar sec,uchar min)
{
uchar msech,msecl,sech,secl,minh,minl;
msech=msec/10;
msecl=msec%10;
sech=sec/10;
secl=sec%10;
minh=min/10;
minl=min%10;
writeled(minh,0);
writeled(minl,1);
writeled(10,2);
writeled(sech,3);
writeled(secl,4);
writeled(10,5);
writeled(msech,6);
writeled(msecl,7);
}
void init()
{
TMOD=0x10;
TH1=0xd8;
TL1=0xf0;
// TR1=1;
EA=1;
ET1=1;
}
void keyscan()
{
if(start==0)
{
delay(2);
if(start==0)
{
TR1=~TR1;
while(start==0)
{
display(msec,sec,min);
}
}
}
if(stop==0&&TR1==0)
{
delay(2);
if(stop==0)
{
msec=0;
sec=0;
min=0;
while(stop==0)
{
display(msec,sec,min);
}
}
}
}
void main()
{
init();
while(1)
{
display(msec,sec,min);
keyscan();
}
}
void timer1() interrupt 3
{
TH1=0xd8;
TL1=0xf0;
msec++;
if(msec==100)
{
msec=0;
sec++;
if(sec==60)
{
sec=0;
min++;
if(min==60)
{
min=0;
}
}
}
}
求用单片机设计一个秒表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单片机设计一只电子秒表,倒计时(60~1每间隔1秒倒数)?_百 ...
硬件电路 有2位数码管可以显示秒表的时间 0~10秒 有3个按键 K1为开始计时 K2为停止计时 K3为清零 软件设计:K1按下则启动定时器定时 每到1秒 显示器缓冲单元内容加1 K2按下则停止定时器定时 K3按下则将显示器缓冲单元内容清零。
用单片机AT89C51制作电子秒表,需要用什么元器件。
元件:89c51,四位共阴极数码管,非自锁按键,10K电阻,10uf电解电容,30pf瓷片电容,10k排阻,晶振 留个邮箱,我把Proteus仿真图发给你,以下是程序,临时写的,Proteus测试正常,不知道符不符合你的要求,你可以自己再稍作修改。用的是12M晶振 include<reg51.h> define uchar unsigned char define uint...
单片机秒表设计
用AT89C51设计一个2位的LED数码显示作为“秒表”,这应该是一个仿真题,可用两位一体的共阴数码管,用定时器T0定时,得到1秒计时。
急~!!用数码管显示60秒的秒表设计(单片机AT89C51)
;程序如下:;fosc = 11.0592MHz SP1 BIT P3.2 LED BIT P3.4 ;--- ORG 0000H SJMP START ORG 000BH MOV TH0, #4CH JNB F0, T0_END DJNZ R5, T0_END MOV R5, #20 INC R4 CJNE R4, #60, T0_E1 ;最大为59 MOV R4, #0 CLR LED T0_E1...
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)\/\/判断按键是否按下 { Delay1ms(10);\/\/延时...
AT89C51单片机用4位数码管做秒表,要求用动态扫描做,汇编语言
;汇编时钟程序。4位共阳管。P0口段码,P2.0~P2.3位码。显示毫秒和秒。三个按键一个控制时钟开始走,一个控制暂停和继续。。。一个按键清0 ;12M晶振 2011 04 20 调试完成 STRT EQU P3.2 STP EQU P3.3 CLRR EQU P3.5 ORG 00H SJMP MAIN ORG 0BH AJMP T0INT ORG 30H MAIN: MOV ...
求C语言程序,AT89C51单片机为核心,DS18B20测温度,实时用4位LED显示...
include<reg52.h> \/\/ 试试#define uchar unsigned char #define uint unsigned int sbit DQ=P1^4; \/\/ds18b20与单片机连接口 unsigned char code str[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x00,0x40} ; \/\/共阴数码管字码表unsigned char code str1[]={0...
51单片机 秒表设计
\/\/ 51单片机 秒表,显示时间为0000—9999秒,启动、停止,(停止后再次启动复位)include<reg52.h> define uint unsigned int define uchar unsigned char uchar code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};uchar bai,shi;uint...
用单片机AT89C51扩展并行可编程I\/O接口芯片8255。
RD_8255 EQU P2.0 ;8255读引脚 低电平有效 WR_8255 EQU P2.1 ;8255写引脚 低电平有效 A0_8255 EQU P2.2 ;A1_8255 EQU P2.3 ;;A1,A0:地址选择线,用来选择8255的PA口,PB口,PC口和控制寄存器。;当A1=0, A0=0时,PA口被选择;;当A1=0, A0=1时,PB口被选择;;当A1=1, ...