173 2438 5004
KEROS加密芯片——品牌直销 | 免费样品 | 技术支持
当前位置:网站首页 > 资讯中心 正文 资讯中心

单片机课程设计秒表

htxw 2023-03-14 资讯中心 16 ℃

51单片机完成简易秒表的设计

硬件电路简单,我说下软件部分

用一个定时器定时中断做键盘扫描,数码管用动态扫描的方法,数码管显示和按键处理都放在主程序中进行

求用单片机设计一个秒表AT89C51

;汇编程序如下。

;使用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

;===========================================================

;仿真截图如下:

单片机课程设计电子秒表

电路原理图已画好

实现你描述的全部功能

Keil uVision3编译通过,C语言编写,有详细注释

实机调试通过

留个邮箱发给你...

----------------------------

邮件已发......

单片机秒表设计

用AT89C51设计一个2位的LED数码显示作为“秒表”,这应该是一个仿真题,可用两位一体的共阴数码管,用定时器T0定时,得到1秒计时。

51单片机制作一个秒表

//功能:0~99秒的简易秒表设计,两个静态数码管,定时器采用中断方式

#include"reg51.h"

#define uchar unsigned char

#define uint unsigned int

uchar count=0;  //对50ms定时时间进行计数

uchar miao=0;     //秒计数器

//函数名:timer_1()

//函数功能:定时器T1的中断函数,T1在工作方式1下每50秒产生中断,执行该中断函数

//形式参数:无

//返回值:无

void timer_1() interrupt 3   //T1的中断类型号为3

{

 TH1=(65536-50000)/256;   //重新设置T1计数初值高8位

 TL1=(65536-50000)%256;   //重新设置T1计数初值低8位

 count++;      //50ms计数器加1

 if(count==20)     //1s时间到

 {

  count=0;     //50ms计数器清0

  miao++;         //秒计数器加1

  if(miao==100)miao=0;  //miao计数到100,则从0开始计数

 }

}

bit b=0;

void int_0() interrupt 0

{

 if(b == 0){TR1 = 0;b = 1;}

 else

 {

  b = 0;

  TR1 = 1;

 }

}

void int_1() interrupt 2

{

 miao=0;

 count = 0;

 TH1=(65536-50000)/256; 

 TL1=(65536-50000)%256;

 TR1=1;

}

//函数名:disp

//函数功能:将i的值显示在两个静态连接的数码管上

//形式参数:i,取值范围0~99

//返回值:无

void disp(uchar i)

{

 uchar led[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};

 //定义0~9显示码,共阳极数码管

 P1=led[i/10];   //显示i高位

 P2=led[i%10];   //显示i地位

}

void main()

{

 TMOD=0x10;    //设置T1在工作方式1 

 TH1=(65536-50000)/256; //设置T1计数初值高8位,定时时间50ms 

 TL1=(65536-50000)%256; //设置T1计数初值低8位

 ET1=1;     //开放T1中断允许

 EX0 = 1;

 IT0 = 1;

 EX1 = 1;

 IT1=1;

 EA=1;     //开放总中断允许

 TR1=1;     //启动T1开始计时

 while(1)

 {

  disp(miao);   //显示秒计数器值

 }

}

单片机课程设计秒表的介绍就聊到这里吧,感谢您花时间阅读,谢谢。

本文标签:单片机课程设计秒表

<