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

相关推荐
10001hours3 小时前
C语言第23讲
c语言·开发语言·算法
___波子 Pro Max.4 小时前
Linux与STM32实时性与系统资源解析
linux·stm32
Tolines4 小时前
PCIe外接卡标准尺寸
嵌入式硬件·硬件工程·设计规范
寅双木4 小时前
常见的九种二极管
笔记·嵌入式硬件·稳压二极管·tvs·肖特基二极管·发光二极管·齐纳击穿
Black doncky prince4 小时前
QR反激电源副边整流二极管电压波形分析
单片机·嵌入式硬件·硬件工程
currycheng64 小时前
开关电源测试及方法
单片机·嵌入式硬件·硬件架构·硬件工程
SundayBear5 小时前
基于MCU的文件系统
linux·服务器·单片机
自激振荡器7 小时前
1,LVGL(V8.3.10版本)裸机移植教程
stm32·lvgl·移植·裸机开发
༾冬瓜大侠༿10 小时前
C语言:自定义类型——联合体和枚举
java·c语言·开发语言