以前,介绍了1602显示器的接口(连接) LCD1602显示器的接口介绍)和读写操作相关函数(连接) LCD1602读写控制和初始化函数)。 今天设计一个简单的1602应用实例——秒表。 要求:有秒表启动和复位功能按钮,秒表计时时间实时显示在液晶屏1602上。
1 .系统硬件电路图:
2 .系统编程
2.1声明头文件、全局变量和函数
#include 'LCD_1602.h '
#include stdio.h
unsigned char Disp_Buffer[10]; //将其设置得稍大一点,不影响结果显示,在显示时遇到字符串结束标志时结束
//定义两个位变量,分别对应键开始按钮和停止复位按钮
sbit key_set=P3^2;
sbit key_reset=P3^3;
unsigned char time_count=0;
unsigned int time_S=0;
void timer_inial (; //计时器初始化
未指定Inti (语音延迟); //延迟函数
Void开始(; //开始秒表
语音停止(; //停止重置秒表
void second_cal_show (; 计算和显示//秒
2.2主程序
注意主程序主要完成显示器初始化和初始化显示、定时器初始化,定时器初始化时不启动。 有开始键控件,不按开始键的话计时器就不能启动。 初始化完成后,在while循环中调用start (; 决定是否启动计时器,调用stop (); 根据键的状态,停止秒表并决定是否复位; 调用second_cal_show (; 计算和显示秒。
Void主() )
{
init液晶屏1602 (;
液晶屏showstr (0,0,' Current : 0 S ' );
液晶屏showstr (0,1,' Last : 0 S ';
timer_inial (;
while(1)。
{
开始(;
停止(;
second_cal_show (;
}
}
2.3子程序
2.3.1初始计时器:计时器T0工作在模式1,计时器的计时器时间为0.02秒。
void timer_inial ()
{
TMOD=0X01; //
TH0=0XB8; //定时0.02s
TL0=0X00;
}
2.3.2延迟函数:软件延迟,主要通过关键软件消除抖动
//延迟函数
唯一延迟(unsigned inti ) )。
{
未指定Int k;
for(k=0; ki; k;
}
2.3.3启动函数:检测是否按下键,如果按下键,启动计时器T0,从0开始计数。
void start () )
{
if(0==key_set ) )。
{
延迟(1200; //10ms消除颤抖
检测if(0==key_set ) /再次按下键
{
while (! key_set; //等待按钮释放
TR0=1;
time_S=0;
time_count=0;
}
}
}
2.3.4停止重置函数:检测是否按下停止按钮,如果按下按钮,停止计时器T0,更新LCD显示信息。
void stop () )
{
if(0==key_reset ) )。
{
延迟(1200; //10ms消除颤抖
检测是否按下了if(0==key_reset ) /再次按键
{
while (! key_reset; //等待按钮释放
TR0=0;
lcdwritecmd(0x01; //透明屏幕
液晶屏showstr (0,0,' Current : 0 S ' );
液晶屏showstr (0,1,' Last : 0 S ';
液晶屏showstr (10,1,Disp_Buffer );
}
}
}
2.3.5秒处理和显示函数:每当计时器T0溢出时,对time_count的值加1,进行50次相加就是秒,对秒变量time_S的值加1,然后更新显示器的显示信息。
void second_cal_show (
{
if(TF0==1) ) ) ) )。
{
TF0=0;
TH0=0XB8;
TL0=0X00;
time_count;
if(time_count=50 )/50次1秒
{
time_count=0;
time_S;
sprintf(disp_buffer,' %d S ',time_S );
液晶屏showstr (10,0,Disp_Buffer );
}
}
}
以上是所有代码,编译情况如下。
将程序下载到单片机,实际运行效果如下视频连接: LCD1602液晶应用实例---单片机控制秒表设计