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 小米 华为 单反 装机 图拉丁
 
   -> 嵌入式 -> LCD1602液晶应用案例--单片机控制的秒表设计 -> 正文阅读

[嵌入式]LCD1602液晶应用案例--单片机控制的秒表设计

之前介绍了1602的显示屏的接口(连接:LCD1602显示屏接口介绍)和读写操作的相关函数(连接:LCD1602读写控制与初始化函数)。今日做一个简单1602应用案例----设计一个秒表。要求:具有秒表启动和复位功能按键,秒表计时时间实时显示在LCD1602。

???? 1.系统的硬件电路原理图:

图片

????2.系统的程序设计

??? 2.1 头文件、全局变量和函数的声明

#include "LCD_1602.h"
????????#include <stdio.h>
????????unsigned char Disp_Buffer[10];//这个可以稍微设置大一点,不影 ????????响结果显示,显示的时候遇到字符串结束标志就结束
????????//定义二个位变量,分别对应按键开始按键和停止复位按键
????????sbit key_set=P3^2;
????????sbit key_reset=P3^3;
????????unsigned char time_count=0;
????????unsigned int time_S=0;
????????void timer_inial();//定时器初始化
????????void delay(unsigned int i);//延时函数
????????void start();//启动秒表
????????void stop();//停止复位秒表
????????void second_cal_show();//秒的计算与显示

??? 2.2 主程序

? 主程序主要完成显示屏的初始化和初始化显示、定时器的初始化,注意定时初始化的时候不启动。启动有开始按键控制,不按下开始键不启动定时器。初始化完了,在while循环中调用start();确定是否启动定时器,调用stop();根据按键状态确定是否停止秒表并复位;调用second_cal_show(); 进行秒的计算和显示。

????????void main()
????????{

?? ?????????InitLcd1602();
?? ?????????LcdShowStr(0, 0, "Current : 0 S");
?? ?????????LcdShowStr(0, 1, "Last??? : 0 S");
?? ?????????timer_inial();
??? ????while(1)
??? ????{
?? ??? ? ????start();
?? ??? ? ????stop();
?? ??? ? ????second_cal_show();?? ?
?? ?????}
????}

??? 2.3 子程序

?? 2.3.1 初始定时器:定时器T0工作在模式1,定时器定时时间0.02秒。

????void timer_inial()
????{
?? ?????TMOD = 0X01;//
?? ?????TH0=0XB8;//定时0.02s
?? ?????TL0=0X00;
????}

?2.3.2 延时函数:软件延时,主要用按键软件消抖

//延时函数
void delay(unsigned int i)
{
?? ??? ?unsigned int k;
?? ?? for(k=0;k<i;k++);
}

?2.3.3 启动函数:检测按键是否按下,按键如果按下则启动定时器T0,并从0开始计数。

void start()
{
?? ?if(0==key_set)
?? ??? ? {
?? ??? ??? ? delay(1200);//10ms消抖
?? ??? ??? ? if(0==key_set)//再次检测按键是否按下
?? ??? ??? ? {
?? ??? ??? ??? ??? ?while(!key_set);//等待按键释放
?? ??? ??? ??? ?? TR0=1;
?? ??? ??? ??? ?? time_S=0;
?? ??? ??? ??? ?? time_count=0;
?? ??? ??? ??? ?
?? ??? ??? ? }
?? ??? ?
?? ??? ? }

}

2.3.4 停止复位函数:检测停止按键是否按下,按键如果按下则停止定时器T0,并更新LCD显示屏信息。

void stop()
{
? if(0==key_reset)
?? ??? ? {
?? ??? ??? ? delay(1200);//10ms消抖
?? ??? ??? ? if(0==key_reset)//再次检测按键是否按下
?? ??? ??? ? {
?? ??? ??? ??? ??? ?while(!key_reset);//等待按键释放
?? ??? ??? ??? ?? TR0=0;
?? ??? ??? ??? ?? LcdWriteCmd(0x01);? //清屏
?? ??? ??? ??? ?? LcdShowStr(0, 0, "Current : 0 S");
?? ??? ??? ??? ?? LcdShowStr(0, 1, "Last??? : 0 S");
?? ??? ??? ??? ?? LcdShowStr(10, 1, Disp_Buffer);
?? ??? ??? ? }
?? ??? ?
?? ??? ? }
?? ??? ?
}

2.3.5 秒处理及显示函数:定时器T0每溢出一次,time_count值加1,加50次为秒,秒变量time_S的值加1,然后更新显示屏显示信息。

void second_cal_show()
{
? if(TF0==1)
?? ??? ?{
?? ??? ??? ?TF0=0;
?? ??? ?? TH0=0XB8;
?? ??? ??? ?TL0=0X00;
?? ??? ??? ?time_count++;
?? ??? ??? ?if(time_count>=50)//50次一秒
?? ??? ??? ?{
?? ??? ??? ?? time_count=0;
?? ??? ??? ??? ?time_S++;
?? ??? ??? ??? ?sprintf(Disp_Buffer,"%d S",time_S);
?? ??? ???? LcdShowStr(10, 0, Disp_Buffer);?? ?
?? ??? ??? ?}
?? ??? ??? ?
?? ??? ?}
}

以上是全部代码,编译情况如下:

图片

将程序下载至单片机,实际运行效果如下视频连接:LCD1602液晶应用案例--单片机控制的秒表设计

?

  嵌入式 最新文章
基于高精度单片机开发红外测温仪方案
89C51单片机与DAC0832
基于51单片机宠物自动投料喂食器控制系统仿
《痞子衡嵌入式半月刊》 第 68 期
多思计组实验实验七 简单模型机实验
CSC7720
启明智显分享| ESP32学习笔记参考--PWM(脉冲
STM32初探
STM32 总结
【STM32】CubeMX例程四---定时器中断(附工
上一篇文章      下一篇文章      查看所有文章
加:2021-11-30 15:46:40  更:2021-11-30 15:48:16 
 
开发: 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/26 10:51:12-

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