【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条记录)

相关推荐
时空自由民.3 小时前
ST7701S 3.5寸显示屏
单片机
金戈鐡馬3 小时前
BetaFlight中的定时器引脚绑定详解
stm32·单片机·嵌入式硬件·无人机
智者知已应修善业4 小时前
【51单片机单按键切换广告屏】2023-5-17
c++·经验分享·笔记·算法·51单片机
hhh3u3u3u4 小时前
Visual C++ 6.0中文版安装包下载教程及win11安装教程
java·c语言·开发语言·c++·python·c#·vc-1
泛凡(Linyongui)4 小时前
PY32F002B实践之二--宠物腹背理疗仪项目介绍及头文件解析
c语言·keil·py32·32位单片机·腹背理疗仪项目实践
Wave8454 小时前
FreeRTOS软件定时器详解
stm32·单片机·freertos
VBsemi-专注于MOSFET研发定制5 小时前
奶茶制作机器人功率MOSFET选型方案——高效、精准与可靠驱动系统设计指南
单片机·嵌入式硬件
网域小星球7 小时前
C 语言从 0 入门(十四)|文件操作:读写文本、保存数据持久化
c语言·开发语言·文件操作·fopen·fprintf
水云桐程序员7 小时前
单片机项目从入门到精通
单片机·嵌入式硬件
网域小星球7 小时前
C 语言从 0 入门(七)|字符数组与字符串完整精讲|VS2022 高质量实战
c语言·开发语言·字符串·vs2022·字符数组