IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 嵌入式 -> 基于51单片机的秒表设计 -> 正文阅读

[嵌入式]基于51单片机的秒表设计

51单片机基础难点知识理解后,直接通过下面3个小项目可以更好理解51单片机。中断 定时器 串口甚至是基础的IO输入输出都有结合,再加上一些外设模块的学习(如1602显示屏,L298N电机驱动等)
项目一:秒表设计
项目二:LCD1602显示器显示
项目三:循迹+蓝牙小车

题目要求

设计一个秒表,具有清理 暂停/启动功能
1.显示格式
分 - 秒 - 毫秒(精确到50ms)
例如:08 - 26 - 18 表示 8分26秒900毫秒
2.按键要求
s1 启动/暂停
s2 清零

原理分析

知识点

①数码管显示数字:51单片机基本IO的输入与输出
②秒表功能的实现: 51单片机定时器功能
③按键要求 : 51单片机的按键访问或者外部中断的应用
④动态数码管显示: 74HC138芯片的应用+视觉暂留效应1

硬件原理图:

采用普中A2开发板
如图所示,开发板的数码管模块由74HC138芯片驱动,通过控制138芯片的ABC三个输入端来控制对应数码管(3-8段译码器)
在这里插入图片描述在这里插入图片描述

独立按键模块
简单来看,就是开发板上四个按键一端接GND 一端接上51单片机的四个IO口,默认情况为高电平
在这里插入图片描述

代码实现

代码的封装
1.解决数码管显示: 定义好相关变量已经存放数码管段码的数组
2.解决定时器部分:定时器初始化 定时器中断服务函数
3.解决数码管动态显示 : 74HC138的动态显示
4.按键功能
5.主函数不断的调用各部分函数

#include "reg52.h"
sbit s1 = P3^1;
sbit s2 = P3^0;			//定义两个按键
sbit LSA = P2^2;
sbit LSB = P2^3;
sbit LSC = P2^4;		//HC138芯片的三个输入端
sbit led1 = P2^0;		//测试灯
typedef unsigned int u16;
u16 hour=0;
u16 minute=0;
u16 second=0;
u16 msecond = 0;		//定义时 分 秒 毫秒的变量
u16 stat;
int code smg_duan [] = {0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};//共阴数码管0-9段码
int xsq[8] = {0};		//开发板上8位数码管显示内容存储数组

void Delay(u16 time)	//延时函数,用于动态显示
{
	while(time--);
}
//定时器0初始化
void Init_All()
{
	TMOD &= 0xf0;	//低位寄存器清0
	TMOD |= 0x01;	//低位寄存器赋指定值,实现定时器的配置
	TH0 = (65536-50000)/256;
	TL0 = (65536-50000)%256;	//50ms定时
	ET0 = 1;		//打开定时器0中断
	EA = 1;			//打开总中断
  	TR0 = 1;		//定时器0的开启标志
}
//定时器0中断服务函数
void timer0_ser () interrupt 1
{
	TH0 = (65536-50000)/256;
	TL0 = (65536-50000)%256;		//每进一次中断直接重新赋值
  	msecond++;						//精确要求 50ms
	if(msecond==20)//定时1000ms = 1s了
	{
		msecond=0;
		led1 = ~led1;		//每秒实现翻转,测试作用
		second++;			//+1s
		if(second==60)		//60s = 1min了
		{
			second=0;
			minute++;		
			if(minute==60)
			{
				minute=0;
				hour++;
				if(hour==60)
					hour=0;
			}
		}
	}
}
//数码管动态显示
void PrintShuMa ()
{
	 u16 i;
	 for(i=0;i<8;i++){
	   switch(i)
	   {
	   	case (0):
			LSA=0,LSB=0,LSC=0;
			break;
		case (1):
			LSA=1,LSB=0,LSC=0;
			break;
		case (2):
			LSA=0,LSB=1,LSC=0;
			break;
		case (3):
			LSA=1,LSB=1,LSC=0;
			break;
		case (4):
			LSA=0,LSB=0,LSC=1;
			break;
		case (5):
			LSA=1,LSB=0,LSC=1;
			break;
		case (6):
			LSA=0,LSB=1,LSC=1;
			break;
		case (7):
			LSA=1,LSB=1,LSC=1;
			break;
	 	}
		P0 = xsq [i];			//数码管模块位于P0寄存器口
		Delay(200);			//视觉暂留,延时端一点 200us
		P0=0x00;		  //消隐
	}
}

void key()
{
	if(s1 == 0)
	{
		Delay(200);
		if(s1 == 0)
		{
			TR0 = ~TR0;//???ˉ/?Yí£μ?×ó±í
		}
		while(!s1);
	}
	if(s2 == 0)
	{
		Delay(200);
		if(s2 == 0)
		{
			led1 = ~led1;
			hour = 0;
			minute = 0;
			second = 0;
			msecond = 0;
		}
		while(!s2);
	}
}
void display()
{	//00 - 00 - 00
	//将获取的动态值放到存储数组中,主函数中不断显示数组的值
	xsq[7]=smg_duan[hour/10];
	xsq[6]=smg_duan[hour%10];
	xsq[5]=0x40;
	xsq[4]=smg_duan[minute/10];
	xsq[3]=smg_duan[minute%10];
	xsq[2]=0x40;
	xsq[1]=smg_duan[second/10];
	xsq[0]=smg_duan[second%10];
}

int main()
{
	Init_All();
	while(1)
	{
		PrintShuMa();
		key();
		display();
	}

}

还可以往以下方面拓展:
1.把按键访问改成用外部中断的模式,如果外部中断IO口(就两个)不够,还可以外加芯片来拓展中断IO口
2.可以加上按键按其它的实现加减功能,拓展成矩阵按键实现更多功能,如设定指定时间报警等
3.51单片机的定时器还可以实现测频率的功能(但不是很准)

总结

这个小实验不是很难而且还可以帮助很好的理解定时器,定时器中断的概念以及使用数码管的显示原理,74HC138芯片的应用
结合原理图独立把代码敲出来,换个定时器,改变定时器参数,定时器还可以往不同方向拓展,基本上从IO到定时器都没问题了


  1. 人眼在观察景物时,光信号传入大脑神经,需经过一段短暂的时间,光的作用结束后,视觉形象并不立即消失,这一现象则被称为“视觉暂留” 说白了就是人眼不能瞬时反应过来,眼中看上去没变,实则以飞快的速度在变化 ??

  嵌入式 最新文章
基于高精度单片机开发红外测温仪方案
89C51单片机与DAC0832
基于51单片机宠物自动投料喂食器控制系统仿
《痞子衡嵌入式半月刊》 第 68 期
多思计组实验实验七 简单模型机实验
CSC7720
启明智显分享| ESP32学习笔记参考--PWM(脉冲
STM32初探
STM32 总结
【STM32】CubeMX例程四---定时器中断(附工
上一篇文章      下一篇文章      查看所有文章
加:2021-08-09 10:23:46  更:2021-08-09 10:25:18 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/25 20:14:02-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码