【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 天前
C语言内存函数
c语言·后端
norlan_jame4 天前
C-PHY与D-PHY差异
c语言·开发语言
czy87874755 天前
除了结构体之外,C语言中还有哪些其他方式可以模拟C++的面向对象编程特性
c语言
悠哉悠哉愿意5 天前
【单片机学习笔记】串口、超声波、NE555的同时使用
笔记·单片机·学习
m0_531237175 天前
C语言-数组练习进阶
c语言·开发语言·算法
Lester_11015 天前
STM32霍尔传感器输入口设置为复用功能输入口时,还能用GPIO函数直接读取IO的状态吗
stm32·单片机·嵌入式硬件·电机控制
LCG元5 天前
低功耗显示方案:STM32L0驱动OLED,动态波形绘制与优化
stm32·嵌入式硬件·信息可视化
三佛科技-187366133975 天前
120W小体积碳化硅电源方案(LP8841SC极简方案12V10A/24V5A输出)
单片机·嵌入式硬件
z20348315205 天前
STM32F103系列单片机定时器介绍(二)
stm32·单片机·嵌入式硬件
古译汉书5 天前
【IoT死磕系列】Day 7:只传8字节怎么控机械臂?学习工业控制 CANopen 的“对象字典”(附企业级源码)
数据结构·stm32·物联网·http