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

基于51单片机的秒表设计

  • 题目要求
  • 原理分析
    • 知识点
    • 硬件原理图:
  • 代码实现
  • 总结

题目要求

设计一个秒表,具有清理 暂停/启动功能
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; //低位寄存器清0TMOD |= 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++;                      //精确要求 50msif(msecond==20)//定时1000ms = 1s了{msecond=0;led1 = ~led1;     //每秒实现翻转,测试作用second++;            //+1sif(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);          //视觉暂留,延时端一点 200usP0=0x00;       //消隐}
}void key()
{if(s1 == 0){Delay(200);if(s1 == 0){TR0 = ~TR0;//Æô¶¯/ÔÝÍ£µç×Ó±í}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. 人眼在观察景物时,光信号传入大脑神经,需经过一段短暂的时间,光的作用结束后,视觉形象并不立即消失,这一现象则被称为“视觉暂留” 说白了就是人眼不能瞬时反应过来,眼中看上去没变,实则以飞快的速度在变化 ↩︎

基于51单片机的秒表设计相关推荐

  1. 基于51单片机信号发生器仿真设计

    本设计 基于51单片机信号发生器仿真设计 (仿真+程序源码+设计说明书) 仿真原版本:proteus 7.8 程序编译器:keil 4/keil 5 编程语言:C语言 设计编号:S0015 目录标题 ...

  2. 基于51单片机数字电压表的设计 仿真、程序、原理图(转发)

    摘 要 数字电压表简称DVM,数字电压表基本原理是将输入的模拟电压信号转化为数字信号,再进行输出显示.而A/D转换器的作用是将连续变化的模拟信号量转化为离散的数字信号,器基本结构是由采样保持,量化,编 ...

  3. stc89c51单片机音乐盒系统设计_基于51单片机音乐盒课程设计1.doc

    基于51单片机音乐盒课程设计1 课程名称: 微机原理课程设计 题 目: 基于单片机的音乐盒设计 摘要 随着人类社会的发展,人们对视觉.听觉方面的享受提出了越来越高的要求.小小的音乐盒可以给人们带来美好 ...

  4. 基于51单片机自行车码表设计

    [毕设课设]基于51单片机自行车码表设计 ​效果图 Proteus仿真: 功能简介: 文件内容: 程序框架: 网盘链接: ​效果图 更多内容请关注@WENJIE电子科技 ​ 基于51单片机proteu ...

  5. c语言 计步算法,基于51单片机的计步器设计

    基于51单片机的计步器设计(任务书,开题报告,外文翻译,论文15000字) 摘  要 随着科技发展和国民健康意识的提高,许多检测健康状态的电子产品开始普及.电子计步器作为一种越来越流行的平民锻炼检测装 ...

  6. 基于51单片机的温度报警器设计

    目 录 前言.............................................................................................. ...

  7. 用计算机设计电路图,基于51单片机的计算器设计(含电路图,程序)

    基于51单片机的计算器设计(含电路图,程序)(课题申报表,任务书,开题报告,中期检查表,外文翻译,论文11200字,程序,答辩PPT) 摘 要 计算器一般是指"电子计算器",能进行 ...

  8. 基于51单片机 数控恒流源设计 可调电流源

    设计硬件组成: 基于51单片机 数控恒流源设计 可调电流源基于单片机可调电流源设计  项目定制觉得选题不错 分享一下 由51单片机+LCD1602液晶+变压器+整流桥+开关电源LM2596+TLC56 ...

  9. 基于51单片机音乐盒仿真设计(音乐播放器)

    基于51单片机音乐盒仿真设计( proteus仿真+程序+原理图+PCB+报告+讲解视频) 仿真图proteus 7.8及以上 程序编译器:keil 4/keil 5 编程语言:C语言 设计编号:S0 ...

  10. 基于51单片机实现秒表_☆往事随風☆的博客

    基于51单片机实现秒表 前言 一.实现功能 二.关键程序 (1)key函数 (2)display函数 (3)中断函数 三.完整程序 四.仿真 五.效果展示 六.项目地址 前言 基于51单片机实现一个共 ...

最新文章

  1. 融合基础设施会给私有云带来什么?
  2. QuickPager asp.net 分页控件 转
  3. 2014 I/O归来:Google连接一切
  4. 上传文件时路径总是C:\fakepath\的问题
  5. Zookeeper场景实践:(5)分布式通知/协调
  6. html语言中bodyalink表示,HTML语言中,
  7. linux自定义服务
  8. RGB 与 RGBA 与 16进制 与 HSL 之间的简单转换
  9. 游戏开发中的基本数学与物理
  10. oracle定时任务定时无效
  11. 项目范围频繁变更怎么办?
  12. 空间统计说历史:奥德修斯的归家之路
  13. ieee754最小规格化正数C语言,IEEE754标准浮点格式
  14. Java Long类型对比
  15. 最新车载以太网解决方案
  16. 蕴含存在的意义到底是什么
  17. 微信小程序、uni-app使用iconfont-tools将iconfont彩色字体图标组件化并使用
  18. 正使用其他防病毒提供程序
  19. linux下eclipse修改tab,eclipse 更改 tab 缩进字符数
  20. 6个不可多得的黑科技网站,让你在办公中如有神助,请低调收藏

热门文章

  1. 敏捷经验教训, 开发总结!
  2. FPGA综合系统设计(四):串口控制的DDS信号发生器
  3. RC电路一阶线性微分方程
  4. 计算机重启快捷键是什么,重启计算机的快捷键是什么?
  5. Windows 10调整色温显示器
  6. Ribbon的基本应用
  7. 网络工程师必备「真实案例」分享网络工程师面试经历_一些常见问题,你准备好了吗?
  8. 使用echarts中国地图上绘制散点图(自适应宽高)
  9. dell进入u盘启动模式_戴尔主板bios设置u盘启动
  10. 什么是模型管理和模型运维?