【proteus仿真】基于51单片机的秒表设计
资料获取在文章结尾处!
更多资料获取链接:
https://docs.qq.com/sheet/DTExIc2dPUUJ5enZZ?tab=BB08J2
1.资料内容
- 源码
- proteus仿真图
演示视频:
【proteus仿真】基于51单片机的秒表设计_哔哩哔哩_bilibili
2.总体设计
本设计是采用AT89C51单片机为中心,利用其定时器/计数器定时和记数的原理,结合显示电路、电源电路、LCD1602液晶以及键盘电路来设计计时器。将软、硬件有机的结合起来,使得系统能够实现四位LCD显示,最大显示时间为09:59:99,有开始/暂停、复位、记录和查看功能,并设有每秒提醒功能。
此次的设计是采用定时器进行计时并且在LCD1602上显示时间,先要基本了解硬件内在结构,确定用P0并行端口进行LCD1602控制输入,使用P2.0、P2.1、P2.2控制LCD的RE、RW、EN端口。P1.0控制蜂鸣器、P1.1控制开始/暂停、P1.2、P1.3控制查看上一条、控制每秒提醒
3.部分电路展示
-
按键控制电路
-
LCD显示电路
4.部分代码
//函数声明
void LCD1602_WriteCom(unsigned char com); //1602部分
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," Stopwatch ");
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;
}
资料请在下面公众回复 51秒表