当前位置: 首页 > news >正文

51单片机基础(C语言):定时器时钟

 1.使用定时器 1 和LCD1602设计一个简易数字时钟。

main.c

#include <REGX52.H>
#include "Delay.h"
#include "LCD1602.h"
#include "Timer0.h"unsigned char Sec=55,Min=59,Hour=23;void main()
{LCD_Init();Timer0Init();LCD_ShowString(1,1,"Clock:");	//上电显示静态字符串LCD_ShowString(2,1,"  :  :");while(1){LCD_ShowNum(2,1,Hour,2);	//显示时分秒LCD_ShowNum(2,4,Min,2);LCD_ShowNum(2,7,Sec,2);}
}void Timer0_Routine() interrupt 1
{static unsigned int T0Count;TL0 = 0x18;		//设置定时初值TH0 = 0xFC;		//设置定时初值T0Count++;if(T0Count>=1000)	//定时器分频,1s{T0Count=0;Sec++;			//1秒到,Sec自增if(Sec>=60){Sec=0;		//60秒到,Sec清0,Min自增Min++;if(Min>=60){Min=0;	//60分钟到,Min清0,Hour自增Hour++;if(Hour>=24){Hour=0;	//24小时到,Hour清0}}}}
}

Timer0.c

#include <REGX52.H>/*** @brief  定时器0初始化,1毫秒@12.000MHz* @param  无* @retval 无*/
void Timer0Init(void)
{TMOD &= 0xF0;		//设置定时器模式TMOD |= 0x01;		//设置定时器模式TL0 = 0x18;		//设置定时初值TH0 = 0xFC;		//设置定时初值TF0 = 0;		//清除TF0标志TR0 = 1;		//定时器0开始计时ET0=1;EA=1;PT0=0;
}/*定时器中断函数模板
void Timer0_Routine() interrupt 1
{static unsigned int T0Count;TL0 = 0x18;		//设置定时初值TH0 = 0xFC;		//设置定时初值T0Count++;if(T0Count>=1000){T0Count=0;}
}
*/

Timer0.h

#ifndef __TIMER0_H__
#define __TIMER0_H__void Timer0Init(void);#endif

2. 使用定时器 0 和数码管设计一个数字时钟。

1.动态数码管显示,点亮一瞬间,显示00—00—00

2.定时器中断,每隔一秒秒钟加一,过六十,分钟加一,到达24:00:00,变为00:00:00

比如 00—00—01    00—01—00

3.完成以上两个任务,就完成了与第一个题一样的效果了,

现在加入第三个模块,独立按键模块,我们规定如下:

1.独立按键一:按下按键,暂停,再按下,启动,(刚开始是暂停的)

2.独立按键二:暂停情况,修改时钟个位,个位加一,个位加到10,十位进一,加到24,变为0;

3.独立按键三:暂停情况,修改分钟个位,个位加一,个位加到10,十位进一,加到60,都变0;

4.独立按键四:暂停情况,修改秒钟个位,个位加一,个位加到10,十位进一,加到60,变为0;

下面为现象:

定时器时钟仿真

代码如下:模块化编程,一共用了4个模块,在我模块化编程大全里面有,直接调用即可,分别是

延迟模块,独立按键模块,定时器中断模块,动态数码管模块。

这里我们写main.c的代码:

#include <reg52.h>
#include "Nixie.h"
#include "Timer0.h"
#include "Key.h"
#define uint unsigned int
#define uchar unsigned charuchar keynumber,Mode;
uint hour_ge=0,hour_shi=0,minute_ge=0, minute_shi=0,second_ge,second_shi;//6个数码管刚好对应每一位void main()
{Timer0Init();while(1){keynumber= Key();if(keynumber){if(keynumber==1){Mode++;if(Mode>=2){Mode=0;}}if(keynumber==2){if(Mode==0){hour_ge++;if(hour_ge>=10){hour_ge=0;hour_shi++;}if(hour_shi==2&&hour_ge==4){hour_shi=0;hour_ge=0;}}}if(keynumber==3){if(Mode==0){minute_ge++;if(minute_ge>=10){minute_ge=0;minute_shi++;}if(minute_shi==6&&minute_ge==0){minute_shi=0;minute_ge=0;}}}if(keynumber==4){if(Mode==0){second_ge++;if(second_ge>=10){second_ge=0;second_shi++;}if(second_shi==6&&second_ge==0){second_shi=0;second_ge=0;}}}}Nixie(1,hour_shi);Nixie(2,hour_ge);Nixie(3,10);Nixie(4,minute_shi);Nixie(5,minute_ge);Nixie(6,10);Nixie(7,second_shi);Nixie(8,second_ge);}
}void Timer0_Routine() interrupt 1
{static unsigned int T0Count;TL0 = 0x18;		//设置定时初值TH0 = 0xFC;		//设置定时初值T0Count++;if(T0Count>=100)	//定时器分频,1s{T0Count=0;if(Mode==1){second_ge++;			//1秒到,second_ge自增if(second_ge>=10){second_ge=0;		//10秒到,second_ge清0,second_shi自增second_shi++;;if(second_shi==6){second_shi=0;	//60秒钟到,second_shi清0,minute_ge自增minute_ge++;if(minute_ge==10){minute_ge=0;minute_shi++;if(minute_shi==6){minute_shi=0;hour_ge++;if(hour_ge==10){hour_ge=0;hour_shi++;}if(hour_shi==2&&hour_ge==4){hour_shi=0;hour_ge=0;}}}}                         }}}
}

相关文章:

  • 一、Docker部署MySQL
  • 书生谱语-大语言模型测试demo
  • LeetCode、72. 编辑距离【中等,二维DP】
  • 2.6:冒泡、简选、直插、快排,递归,宏
  • Docker 容器网络:C++ 客户端 — 服务器应用程序。
  • 搜索+哈希/平衡树,LeetCode 987. 二叉树的垂序遍历
  • Spring Boot 笔记 010 创建接口_更新用户头像
  • springboot/ssm学生信息管理系统Java学生在线选课考试管理系统
  • Maven详细配置整理
  • ChatGPT升级版本GPT-4V(ision)支持多模态语音和图像
  • SpringBoot 动态加载jar包,动态配置
  • 单片机学习路线(简单介绍)
  • Git分支和迭代流程
  • Xubuntu16.04系统中修改系统语言和系统时间
  • 代码随想录算法训练营day14||二叉树part01、理论基础、递归遍历、迭代遍历、统一迭代
  • 【前端学习】-粗谈选择器
  • avalon2.2的VM生成过程
  • canvas 五子棋游戏
  • Computed property XXX was assigned to but it has no setter
  • IndexedDB
  • java2019面试题北京
  • leetcode-27. Remove Element
  • Linux快速配置 VIM 实现语法高亮 补全 缩进等功能
  • MyEclipse 8.0 GA 搭建 Struts2 + Spring2 + Hibernate3 (测试)
  • node-glob通配符
  • Rancher如何对接Ceph-RBD块存储
  • react-native 安卓真机环境搭建
  • Ruby 2.x 源代码分析:扩展 概述
  • SegmentFault 技术周刊 Vol.27 - Git 学习宝典:程序员走江湖必备
  • Swift 中的尾递归和蹦床
  • 从 Android Sample ApiDemos 中学习 android.animation API 的用法
  • 对话 CTO〡听神策数据 CTO 曹犟描绘数据分析行业的无限可能
  • 深入 Nginx 之配置篇
  • Oracle Portal 11g Diagnostics using Remote Diagnostic Agent (RDA) [ID 1059805.
  • 通过调用文摘列表API获取文摘
  • #if #elif #endif
  • #vue3 实现前端下载excel文件模板功能
  • $ is not function   和JQUERY 命名 冲突的解说 Jquer问题 (
  • (3)Dubbo启动时qos-server can not bind localhost22222错误解决
  • (Java)【深基9.例1】选举学生会
  • (第二周)效能测试
  • (教学思路 C#之类三)方法参数类型(ref、out、parmas)
  • (免费领源码)Python#MySQL图书馆管理系统071718-计算机毕业设计项目选题推荐
  • (十三)Maven插件解析运行机制
  • (十一)图像的罗伯特梯度锐化
  • (原+转)Ubuntu16.04软件中心闪退及wifi消失
  • (转)Google的Objective-C编码规范
  • .bat批处理(五):遍历指定目录下资源文件并更新
  • .NET 8 编写 LiteDB vs SQLite 数据库 CRUD 接口性能测试(准备篇)
  • .NET Compact Framework 多线程环境下的UI异步刷新
  • .NET Micro Framework初体验(二)
  • .net 微服务 服务保护 自动重试 Polly
  • .NET/C# 检测电脑上安装的 .NET Framework 的版本
  • .NET/C# 判断某个类是否是泛型类型或泛型接口的子类型
  • .NET国产化改造探索(三)、银河麒麟安装.NET 8环境