【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 RecordTableH32;

unsigned char RecordTableL32;

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

相关推荐
c++之路16 小时前
CMake 系列教程(一):CMake 基础知识
c语言·开发语言·c++
踏着七彩祥云的小丑17 小时前
嵌入式测试第 32 天:升级测试:固件OTA升级、断点续传、回滚测试
单片机·嵌入式硬件·学习
点灯小铭17 小时前
基于单片机与DAC0832的双路波形信号发生系统设计
数据库·单片机·mongodb·毕业设计·课程设计·期末大作业
我还记得那天17 小时前
C语言随机数生成机制与猜数字游戏实现
c语言·开发语言·游戏
sramdram17 小时前
基于MCU微控制器的电子血压计应用解决方案
单片机·嵌入式硬件·mcu·mcu微控制器
Szime17 小时前
AD9218 国产替代方向:双通道 10 位 105MSPS ADC 选型支持
单片机·嵌入式硬件·fpga开发·汽车
万法若空17 小时前
C/C++基本类型表示范围
c语言·开发语言·c++
凡人叶枫17 小时前
Effective C++ 条款15:在资源管理类中提供对原始资源的访问
linux·开发语言·c++·stm32·单片机
数智工坊18 小时前
机器人控制总线深度解析:CAN与EtherCAT,谁在决定机器人的稳定性?
嵌入式硬件·学习·机器人
张海森-16882019 小时前
库里搜索函数 api接口__grep命令
单片机