基于51单片机的秒表设计
(仿真+程序+原理图+设计报告)
功能介绍
具体功能:
1.数码管显示,精度为0.01;
2.按键控制启动/停止,暂停/开始;
3.有一秒钟一次提示音(嘀嘀滴声,跟新闻联播倒计时一样),可按键控制打开/关闭;
演示视频:
基于51单片机的秒表设计—有提示音
/**************************************************************************************************
51单片机简易秒表
**************************************************************************************************/
#include <reg51.h>
#define false 0
#define true 1
#define uchar unsigned char //0-255
#define uint unsigned int //0-65535
#define ulong unsigned long //0-4294967295
sbit start_key = P3^0; //启动
sbit pause_key = P3^1; //暂停
sbit beep_key = P3^3; //提示音
sbit start_led = P3^4; //启动指示灯
sbit pause_led = P3^5; //暂停指示灯
sbit beep_led = P3^6; //喇叭指示灯
sbit beep = P3^7; //喇叭
uchar disCode[10] = {0x03,0x9f,0x25,0x0d,0x99,0x49,0x41,0x1f,0x01,0x09}; //段码 0~9
uchar locCode[8] = {0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80}; //位码
void displayTime(void); //刷新时间显示
void disPlay(uchar num, uchar loc); //数码管显示韩函数
void Delay1ms(unsigned int n); //延时1ms
uchar state; //状态:0-停止,1-启动,2-暂停
ulong ms = 0; //存储毫秒值
uchar fen = 0; //分钟数
uchar miao; //秒数
uchar ms2; //毫秒数的10位
bit isBeep = false; //是否开启蜂鸣器
/*******************************************************************************
* 函数名 : T0_INT
* 函数功能 : T0定时器中断10ms
* 输入 : 无
* 输出 : 无
*******************************************************************************/
void T0_INT(void) interrupt 1
{
TL0= (65536-9000)/256;
TH0= (65536-9000)%256;
ms ++;
}
/*******************************************************************************
* 函数名 : main
* 函数功能 : 主函数
* 输入 : 无
* 输出 : 无
*******************************************************************************/
void main(void)
{
TMOD=0x61; //0110 0001 //方式一
TL0= (65536-10000)/256; // 10ms
TH0= (65536-10000)%256;
TR0=1; //开启T0
//ET0=1; //T0中断允许
EA=1; //总中断开启
start_led = 0;
pause_led = 0;
beep_led = 0;
while(1)
{
displayTime(); //刷新时间显示
//检测启动、停止按钮
if(start_key == 0) //按下了启动、停止按钮
{
Delay1ms(10); //延时消抖
if(start_key == 0)
{
if(state == 0)
{
state = 1;
ms = 0;
fen = 0;
ET0 = 1;
start_led = 1;
}else{
state = 0;
ET0 = 0;
start_led = 0;
pause_led = 0;
}
while(start_key == 0) displayTime();
}
}
//检测暂停按钮,按下暂停,再次按下继续
if(state != 0 && pause_key == 0)
{
Delay1ms(10);
if(pause_key == 0)
{
if(state == 2)
{
state = 1;
pause_led = 0;
ET0 = 1;
}else{
state = 2;
pause_led = 1;
ET0 = 0;
}
while(pause_key == 0) displayTime();
}
}
//检测声音按钮,按键按下开始报警
if(beep_key == 0)
{
Delay1ms(10);
if(beep_key == 0)
{
isBeep = ~isBeep;
beep_led = isBeep;
while(beep_key == 0) displayTime();
}
}
if(fen==10)//分钟等于10开始报警
{
isBeep = ~isBeep;
beep_led = isBeep;
}
}
}
硬件设计
使用元器件:
单片机:STC89C51;
(注意:单片机是通用的,无论51还是52、无论stc还是at都一样,引脚功能都一样。程序也是一样的。)
9*15万用板;共阴极数码管*6
40脚IC座;10k电阻;
2k电阻;103排阻;
10uf电解电容;12M晶振;
30pf电容*2;470uf电容;
0.1uf电容;Led灯*14;
按键*4;自锁开关;
导线:若干;
流程图:
设计资料
01 仿真图
本设计使用proteus8.9版本设计,资料里有安装教程,无需担心!具体如图!
02 原理图
本系统原理图采用Altium Designer19设计,具体如图!
03 程序
本设计使用软件keil5版本编程设计,资料里有安装教程,无需担心!具体如图!
04 设计报告
一万字设计报告,具体如下!
05 设计资料
资料获取请关注同名公众号,全部资料包括仿真源文件 、程序(含注释)、AD原理图、开题报告、参考论文、流程图、讲解视频等。具体内容如下,全网最全! !
资料获取请观看前面演示视频!
点赞分享一起学习成长。