当前位置:首页 » 编程软件 » 电子秒表显示器单片机编译图

电子秒表显示器单片机编译图

发布时间: 2022-09-12 21:03:06

1. 单片机 按键秒表

你好!我这有份资料,希望对你有用!99秒马表设计1. 实验任务
(1. 开始时,显示“00”,第1次按下SP1后就开始计时。
(2. 第2次按SP1后,计时停止。
(3. 第3次按SP1后,计时归零。2. 电路原理图
图4.17.13. 系统板上硬件连线(1. 把“单片机系统”区域中的P0.0/AD0-P0.7/AD7端口用8芯排线连接到“四路静态数码显示模块”区域中的任一个a-h端口上;要求:P0.0/AD0对应着a,P0.1/AD1对应着b,……,P0.7/AD7对应着h。 (2. 把“单片机系统”区域中的P2.0/A8-P2.7/A15端口用8芯排线连接到“四路静态数码显示模块”区域中的任一个a-h端口上;要求:P2.0/A8对应着a,P2.1/A9对应着b,……,P2.7/A15对应着h。 (3. 把“单片机系统“区域中的P3.5/T1用导线连接到”独立式键盘“区域中的SP1端口上; 4. 程序框图
主程序框图T0中断服务程序框图 图4.17.2 5. 汇编源程序
TCNTA EQU 30H
TCNTB EQU 31H
SEC EQU 32H
KEYCNT EQU 33H
SP1 BIT P3.5
ORG 00H
LJMP START
ORG 0BH
LJMP INT_T0
START: MOV KEYCNT,#00H
MOV SEC,#00H
MOV A,SEC
MOV B,#10
DIV AB
MOV DPTR,#TABLE
MOVC A,@A+DPTR
MOV P0,A
MOV A,B
MOV DPTR,#TABLE
MOVC A,@A+DPTR
MOV P2,A
MOV TMOD,#02H
SETB ET0
SETB EA
WT: JB SP1,WT
LCALL DELY10MS
JB SP1,WT
INC KEYCNT
MOV A,KEYCNT
CJNE A,#01H,KN1
SETB TR0
MOV TH0,#06H
MOV TL0,#06H
MOV TCNTA,#00H
MOV TCNTB,#00H
LJMP DKN
KN1: CJNE A,#02H,KN2
CLR TR0
LJMP DKN
KN2: CJNE A,#03H,DKN
MOV SEC,#00H
MOV A,SEC
MOV B,#10
DIV AB
MOV DPTR,#TABLE
MOVC A,@A+DPTR
MOV P0,A
MOV A,B
MOV DPTR,#TABLE
MOVC A,@A+DPTR
MOV P2,A
MOV KEYCNT,#00H
DKN: JNB SP1,$
LJMP WT
DELY10MS:
MOV R6,#20
D1: MOV R7,#248
DJNZ R7,$
DJNZ R6,D1
RET
INT_T0:
INC TCNTA
MOV A,TCNTA
CJNE A,#100,NEXT
MOV TCNTA,#00H
INC TCNTB
MOV A,TCNTB
CJNE A,#4,NEXT
MOV TCNTB,#00H
INC SEC
MOV A,SEC
CJNE A,#100,DONE
MOV SEC,#00H
DONE: MOV A,SEC
MOV B,#10
DIV AB
MOV DPTR,#TABLE
MOVC A,@A+DPTR
MOV P0,A
MOV A,B
MOV DPTR,#TABLE
MOVC A,@A+DPTR
MOV P2,A
NEXT: RETI
TABLE: DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH
END

2. 用单片机的汇编语言编写一个(十秒秒表 的编程)

这是一个秒表,有按键实现 启动、暂停核清零功能。
#include <reg51.H>
sbit P3_5 =P3^5;
unsigned char code dispcode[]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,
0x80,0x90,0x88,0x83,0xC6,0xA1,0x86,0x8E,0x00};
unsigned char second;
unsigned char keycnt;
unsigned int tcnt;

void main(void)
{
unsigned char i,j;

TMOD=0x02;
ET0=1;
EA=1;
second=0;
P1=dispcode[second/10];
P2=dispcode[second%10];
while(1)
{
if(P3_5==0)
{
for(i=20;i>0;i--)
for(j=248;j>0;j--);
if(P3_5==0)
{
keycnt++;
switch(keycnt)
{
case 1:
TH0=0x06;
TL0=0x06;
TR0=1;
break;
case 2:
TR0=0;
break;
case 3:
keycnt=0;
second=0;
P1=dispcode[second/10];
P2=dispcode[second%10];
break;
}
while(P3_5==0);
}
}
}
}

void t0(void) interrupt 1 using 0
{
tcnt++;
if(tcnt==4000)
{
tcnt=0;
second++;
if(second==100)
{
second=0;
}
P1=dispcode[second/10];
P2=dispcode[second%10];
}
}

3. 单片机C51做一个秒表程序用定时器、数码管完成一个秒表程序 晶振频率为11.0592MHZ 定时中断完成计时与显示

; P0段选 ,P2.0个位位选,P2.1十位位选 。共阳数码管 16M晶振。
STRT EQU P2.5
STP EQU P2.6
CLRR EQU P2.7

ORG 00H
AJMP MAIN
ORG 0BH
AJMP T0INT
ORG 30H

MAIN: MOV R0,#20
MOV TMOD,#01H
MOV TH0,#3CH
MOV TL0,#0B0H
MOV DPTR,#TABLE
SETB EA
SETB ET0

k1: LCALL DISP
JB STRT,K2
LCALL DISP
JNB STRT,$-3
AJMP START

k2: JB STP,K3
LCALL DISP
JNB STP,STOP

K3: JB CLRR,K1
LCALL DISP
JNB CLRR,CLEAR
AJMP K3

START: SETB TR0
AJMP K1

STOP: CLR TR0
AJMP K2

CLEAR: CLR TR0
MOV 40H,#0
AJMP K1

T0INT: MOV TH0,#3CH
MOV TL0,#0B0H
DJNZ R0,RTI
MOV R0,#20
MOV A,40H
CJNE A,#99,ADD1
MOV 40H,#00H
CLR TR0
AJMP RTI

ADD1: ADD A,#01H
MOV 40H,A

RTI: RETI

DISP: MOV A,40H
MOV B,#10
DIV AB ;//当前值除以10
MOV 20H,A ;//得出的商送给十位
MOV 21H,B ;//得出的余数送给个位

CLR P2.0
SETB P2.1
MOV A,20H ;//十位显示
MOVC A,@A+DPTR
MOV P0,A

LCALL DELAY

CLR P2.1
SETB P2.0
MOV A,21H ; //个位显示
MOVC A,@A+DPTR
MOV P0,A

RET

DELAY: ;误差 0us
MOV R6,#01H
DL0:
MOV R5,#61H
DJNZ R5,$
DJNZ R6,DL0
RET

TABLE: DB 0C0H,0F9H,0A4H,0B0H,99H ;//共阳极0-9显示代码
DB 92H,82H,0F8H,80H,90H

END

4. 51单片机的秒表计时器设计,求大神帮忙设计电路图和c语言程序!!

这个程序可以实现秒的计时,按键控制开始、暂停、清零功能,更多功能自己在看清程序的基础上进行改进。

#include <reg51.H>
sbit P3_5 =P3^5;
unsigned char code dispcode[]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,
0x80,0x90,0x88,0x83,0xC6,0xA1,0x86,0x8E,0x00};
unsigned char second;
unsigned char keycnt;
unsigned int tcnt;

void main(void)
{
unsigned char i,j;

TMOD=0x02;
ET0=1;
EA=1;
second=0;
P1=dispcode[second/10];
P2=dispcode[second%10];
while(1)
{
if(P3_5==0)
{
for(i=20;i>0;i--)
for(j=248;j>0;j--);
if(P3_5==0)
{
keycnt++;
switch(keycnt)
{
case 1:
TH0=0x06;
TL0=0x06;
TR0=1;
break;
case 2:
TR0=0;
break;
case 3:
keycnt=0;
second=0;
P1=dispcode[second/10];
P2=dispcode[second%10];
break;
}
while(P3_5==0);
}
}
}
}

void t0(void) interrupt 1 using 0
{
tcnt++;
if(tcnt==4000)
{
tcnt=0;
second++;
if(second==100)
{
second=0;
}
P1=dispcode[second/10];
P2=dispcode[second%10];
}
}

5. 单片机的秒表设计的程序

这个程序本身思路都已经非常清晰了呀,主要就是再把流程优化下即可了。定时器T0只负责产生秒信号,用两个计数单元来计数需要显示的内容,在低位秒信号满100后清零同时把高位单元加一,还有就是对按键的处理和显示的处理问题上,比如两个键同时按下如何处理,显示是用锁位来实现,还是不停的动态扫描实现等等

6. 2位数码管显示00-99的89s51单片机电子秒表设计 的程序和电路图

/*应该是 2位数码管显示00-99的89c51单片机电子秒表设计 的程序和电路图*/
P0段选 ,P2.0个位位选,P2.1十位位选 。共阳数码管 16M晶振。
STRT EQU P2.5
STP EQU P2.6
CLRR EQU P2.7

ORG 00H
AJMP MAIN
ORG 0BH
AJMP T0INT
ORG 30H

MAIN: MOV R0,#20
MOV TMOD,#01H
MOV TH0,#3CH
MOV TL0,#0B0H
MOV DPTR,#TABLE
SETB EA
SETB ET0

k1: LCALL DISP
JB STRT,K2
LCALL DISP
JNB STRT,$-3
AJMP START

k2: JB STP,K3
LCALL DISP
JNB STP,STOP

K3: JB CLRR,K1
LCALL DISP
JNB CLRR,CLEAR
AJMP K3

START: SETB TR0
AJMP K1

STOP: CLR TR0
AJMP K2

CLEAR: CLR TR0
MOV 40H,#0
AJMP K1

T0INT: MOV TH0,#3CH
MOV TL0,#0B0H
DJNZ R0,RTI
MOV R0,#20
MOV A,40H
CJNE A,#99,ADD1
MOV 40H,#00H
CLR TR0
AJMP RTI

ADD1: ADD A,#01H
MOV 40H,A

RTI: RETI

DISP: MOV A,40H
MOV B,#10
DIV AB ;//当前值除以10
MOV 20H,A ;//得出的商送给十位
MOV 21H,B ;//得出的余数送给个位

CLR P2.0
SETB P2.1
MOV A,20H ;//十位显示
MOVC A,@A+DPTR
MOV P0,A

LCALL DELAY

CLR P2.1
SETB P2.0
MOV A,21H ; //个位显示
MOVC A,@A+DPTR
MOV P0,A

RET

DELAY: ;误差 0us
MOV R6,#01H
DL0:
MOV R5,#61H
DJNZ R5,$
DJNZ R6,DL0
RET

TABLE: DB 0C0H,0F9H,0A4H,0B0H,99H ;//共阳极0-9显示代码
DB 92H,82H,0F8H,80H,90H

END

7. 单片机秒表计时器c语言程序图 需要图和程序

#include<reg51.h> // 时钟与秒表

#define uchar unsigned char

#define uint unsigned int

sbit qingling=P1^0; //清零

sbit tiaofen=P1^1; //调分

sbit tiaoshi=P1^2; //调时

sbit sounder=P1^7; //naozhong

uint a,b;

uchar hour,minu,sec, //时钟

hour0,minu0,sec0, //秒表

hour1,minu1,sec1;

h1,h2,m1,m2,s1,s2, //显示位

k,s; //状态转换标志

uchar code select[]={0x7f,0xbf,0xdf,0xef,0xf7,0xfb,0xfd,0xfe};

uchar code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};

/*****************函数声明***********************/

void keyscan();

void init();

void delay(uchar z);

void display(uchar,uchar,uchar);

void sounde();

/*****************主函数*************************/

void main()

{

init();

while(1)

{

while(TR1)

{

keyscan(); // 扫描函数

while(s==1) // s是状态标志,当s=0时,闹钟取消。s=1时,设定闹钟时间

//(也是通过调时,调分函数);

{ //s=2时,闹钟工作,时间与设定时刻一致时,闹钟响

// (一分钟后自动关闭,可手动关闭)。再次切换,s=0.

keyscan(); //s状态切换(0-》1-》2-》0)通过外部中断1实现。

display(hour1,minu1,sec1); //闹钟时刻显示

}

display(hour0,minu0,sec0);//时钟表显示

while(k) /*k是秒表状态(0-》1-》2-》0)通过外部中断0实现。

0秒表关;1秒表从零计时;2秒表停,显示计时时间*/

{

display(hour,minu,sec); //秒表显示

}

}

}

}

/*****************初始化函数***********************/

void init()

{

a=0;

b=0;

k=0;

s=0;

hour0=0;

minu0=0;

sec0=0;

hour=0;

minu=0;

sec=0;

hour1=0;

minu1=0;

sec1=0;

TMOD=0x11; //定时器0,1工作于方式1;赋初值

TH0=(65536-5000)/256;

TL0=(65536-5000)%256;

TH1=(65536-50000)/256;

TL1=(65536-50000)%256;

EA=1;

EX0=1; //秒表中断

EX1=1; //闹钟设定中断

ET0=1;

ET1=1;

IT0=1; //边沿触发方式

IT1=1;

PX0=1;

PX1=1;

TR0=0; //初始,秒表不工作

TR1=1; //时钟一开始工作

}

/*****************定时器0中断*************/

void timer0_int() interrupt 1 //秒表

{

TH0=(65536-5000)/256;

TL0=(65536-5000)%256;

a++;

if(a==2)

{

a=0;

sec++;

if(sec==100)

{

sec=0; //毫秒级

minu++;

if(minu==60)

{

minu=0; //秒

hour++;

if(hour==60) //分

{

hour=0;

}

}

}

}

}

/*************外部中断0中断函数************/

void ex0_int() interrupt 0

{

k++;

if(k==3)

k=0;

if(k==1)

{

TR0=~TR0;

if(TR0==1)

{

hour=0;

minu=0;

sec=0;

}

}

if(k==2)

{

TR0=~TR0;

}

}

/*************外部中断1中断函数************/

void ex1_int() interrupt 2

{

s++;

if(s==3)

s=0;

}

/*************定时器1中断****************/

void timer1_int() interrupt 3 //控制时钟工作

{

TH1=(65536-50000)/256;

TL1=(65536-50000)%256;

if(s==2)

{

if(hour1==hour0 && minu0==minu1)

sounde();

}

b++;

if(b==20)

{

b=0;

sec0++;

if(sec0==60)

{

sec0=0;

minu0++;

if(minu0==60)

{

minu0=0;

hour0++;

if(hour0==24)

hour0=0;

}

}

}

}

/*************键盘扫描****************/

void keyscan()

{

if(s==1)

{

if(qingling==0)

{

delay(10);

if(qingling==0)

{

sec1=0;

minu1=0;

hour1=0;

}

}

if(tiaofen==0)

{

delay(10);

if(tiaofen==0)

{

minu1++;

if(minu1==60)

{

minu1=0;

}

while(!tiaofen);

}

}

if(tiaoshi==0)

{

hour1++;

if(hour1==24)

{

hour1=0;

}

while(!tiaoshi);

}

}

else //调整时钟时间

{

if(qingling==0)

{

delay(10);

if(qingling==0)

{

sec0=0;

minu0=0;

hour0=0;

}

}

if(tiaofen==0)

{

delay(10);

if(tiaofen==0)

{

minu0++;

if(minu0==60)

{

minu0=0;

}

while(!tiaofen);

}

}

if(tiaoshi==0)

{

hour0++;

if(hour0==24)

{

hour0=0;

}

while(!tiaoshi);

}

}

}

/*************显示函数****************/

void display(uchar hour,uchar minu,uchar sec)

{

h1=hour/10;

h2=hour%10;

m1=minu/10;

m2=minu%10;

s1=sec/10;

s2=sec%10;

P0=0xff;

P2=table[h1];

P0=select[7];

delay(5);

P0=0xff;

P2=table[h2];

P0=select[6];

delay(5);

P0=0xff;

P2=0x40;;

P0=select[5];

delay(5);

P0=0xff;

P2=table[m1];

P0=select[4];

delay(5);

P0=0xff;

P2=table[m2];

P0=select[3];

delay(5);

P0=0xff;

P2=0x40;

P0=select[2];

delay(5);

P0=0xff;

P2=table[s1];

P0=select[1];

delay(5);

P0=0xff;

P2=table[s2];

P0=select[0];

delay(5);

}

/*************闹钟函数****************/

void sounde()

{

sounder=~sounder;

}

/*************延时函数****************/

void delay(uchar z)

{

int x,y;

for(x=z;x>0;x--)

for(y=110;y>0;y--);

}

热点内容
什么样配置手机适合玩大型游戏 发布:2025-04-04 13:00:51 浏览:138
ios天天酷跑刷分脚本 发布:2025-04-04 13:00:05 浏览:263
c二维码源码 发布:2025-04-04 12:47:31 浏览:635
地铁加密线是什么意思 发布:2025-04-04 12:32:00 浏览:120
linux下载解压 发布:2025-04-04 12:23:45 浏览:790
怎么在服务器里设材质包 发布:2025-04-04 12:10:08 浏览:630
php学习路线 发布:2025-04-04 12:05:13 浏览:754
压缩文件视频 发布:2025-04-04 12:00:48 浏览:319
17php 发布:2025-04-04 11:54:33 浏览:213
仿链家源码 发布:2025-04-04 11:48:46 浏览:423