【51单片机】【protues仿真】基于51单片机秒表系统(LCD1602多功能、可保持30条记录)

目录

一、主要功能

二、使用步骤

三、硬件资源

四、软件设计

五、实验现象

一、主要功能

1、LCD1602液晶显示

2、按键开始和暂停计时,查看和复位记录​

3、可记录30个数据

二、使用步骤

基于51单片机的秒表系统设计通常包含硬件电路设计、定时器配置、显示模块和按键控制等核心模块

三、硬件资源

1、51单片机核心模块

2、按键模块

3、蜂鸣器模块

4、LCD1602显示模块

四、软件设计

#include<reg52.h>

#include<intrins.h>

//1602定义

sbit RS = P2^0; //定义端口

sbit RW = P2^1;

sbit EN = P2^2;

#define RS_CLR RS=0 //状态量定义,方便读取代码

#define RS_SET RS=1

#define RW_CLR RW=0

#define RW_SET RW=1

#define EN_CLR EN=0

#define EN_SET EN=1

#define DataPort P0

//按键定义

sbit key1=P1^3; //Up

sbit key2=P1^2; //Down

sbit key3=P1^1; //Start/Stop

sbit key4=P1^4; //Record

sbit Beep=P1^0;

//全局变量定义

unsigned char RecordTableH[32];

unsigned char RecordTableL[32];

unsigned int CountTimeH;

unsigned char CountTimeL;

unsigned char DataRecordFlag = 0;

unsigned char DataFlag = 0;

code unsigned char NumTable[]="0123456789";

bit Counting = 0;

//函数声明

void LCD1602_WriteCom(unsigned char com);

void LCD1602_WriteData(unsigned char Data);

void LCD1602_Clear(void);

void LCD1602_PutString(unsigned char x,unsigned char y,unsigned char *s);

void LCD1602_PutChar(unsigned char x,unsigned char y,unsigned char Data);

void LCD1602_Init(void);

void LCD1602_Delay(unsigned int t);

void delay_ms(unsigned int t);

void IniTC0(void) ; //初始化定时计数器0

void KeyWork(void); //按键扫描以及按键功能动作

void DisplayCountTime(void); //显示计时的时间

void main()

{

IniTC0();

LCD1602_Init();

Beep = 1;

LCD1602_PutString(4,0,"Well Come"); //开机欢迎可不要

LCD1602_PutString(2,1,"Time Counter");

delay_ms(1000);

LCD1602_Clear();

while(1)

{

DisplayCountTime();

KeyWork();

}

}

/*------------------------------------------------

写入命令函数

------------------------------------------------*/

void LCD1602_WriteCom(unsigned char com)

{

LCD1602_Delay(5);

RS_CLR;

RW_CLR;

EN_SET;

DataPort= com;

nop();

EN_CLR;

}

/*------------------------------------------------

写入数据函数

------------------------------------------------*/

void LCD1602_WriteData(unsigned char Data)

{

LCD1602_Delay(5);

RS_SET;

RW_CLR;

EN_SET;

DataPort= Data;

nop();

EN_CLR;

}

/*------------------------------------------------

清屏函数

------------------------------------------------*/

void LCD1602_Clear(void)

{

LCD1602_WriteCom(0x01);

LCD1602_Delay(5);

}

/*------------------------------------------------

写入字符串函数

------------------------------------------------*/

void LCD1602_PutString(unsigned char x,unsigned char y,unsigned char *s)

{

if (y == 0)

{

LCD1602_WriteCom(0x80 + x); //表示第一行

}

else

{

LCD1602_WriteCom(0xC0 + x); //表示第二行

}

while (*s)

{

LCD1602_WriteData( *s);

s ++;

}

}

/*------------------------------------------------

写入字符函数

------------------------------------------------*/

void LCD1602_PutChar(unsigned char x,unsigned char y,unsigned char Data)

{

if (y == 0)

{

LCD1602_WriteCom(0x80 + x);

}else {

LCD1602_WriteCom(0xC0 + x);

}

LCD1602_WriteData( Data);

}

void LCD1602_Delay(unsigned int t)

{

unsigned char c;

while(t--)

{

for(c = 50; c > 0; c--);

}

}

void delay_ms(unsigned int t)

{

unsigned char c;

while(t--)

{

for(c = 50; c > 0; c--);

}

}

五、实验现象

演示视频:

【51单片机-B049】【protues仿真】基于51单片机秒表仿真(LCD1602多功能、可保持30条记录)

相关推荐
CodeSheep程序羊1 小时前
拼多多春节加班工资曝光,没几个敢给这个数的。
java·c语言·开发语言·c++·python·程序人生·职场和发展
I'mChloe1 小时前
PTO-ISA 深度解析:PyPTO 范式生成的底层指令集与 NPU 算子执行的硬件映射
c语言·开发语言
2的n次方_1 小时前
Runtime 内存管理深化:推理批处理下的内存复用与生命周期精细控制
c语言·网络·架构
嵌入小生0072 小时前
标准IO---核心函数接口延续(嵌入式Linux)
c语言·vscode·vim·嵌入式·小白·标准io·函数接口
全栈游侠2 小时前
STM32F103XX 02-电源与备份寄存器
stm32·单片机·嵌入式硬件
Lsir10110_2 小时前
【Linux】中断 —— 操作系统的运行基石
linux·运维·嵌入式硬件
历程里程碑2 小时前
Linux20 : IO
linux·c语言·开发语言·数据结构·c++·算法
深圳市九鼎创展科技4 小时前
瑞芯微 RK3399 开发板 X3399 评测:高性能 ARM 平台的多面手
linux·arm开发·人工智能·单片机·嵌入式硬件·边缘计算
辰哥单片机设计5 小时前
STM32项目分享:车辆防盗报警系统
stm32·单片机·嵌入式硬件
智者知已应修善业5 小时前
【洛谷P9975奶牛被病毒传染最少数量推导,导出多样例】2025-2-26
c语言·c++·经验分享·笔记·算法·推荐算法