基于LCD1602显示屏设计一个具有复位功能的秒表

控制/MCU

1878人已加入

描述

之前介绍了1602的显示屏的接口(连接:LCD1602显示屏接口介绍)和读写操作的相关函数(连接:LCD1602读写控制与初始化函数)。今日做一个简单1602应用案例----设计一个秒表。要求:具有秒表启动和复位功能按键,秒表计时时间实时显示在LCD1602。

1.系统的硬件电路原理图:

LCD1602

2.系统的程序设计

 2.1 头文件、全局变量和函数的声明

#include "LCD_1602.h"
        #include
        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();//定时器初始化
        void delay(unsigned int i);//延时函数
        void start();//启动秒表
        void stop();//停止复位秒表
        void second_cal_show();//秒的计算与显示
 

2.2 主程序

主程序主要完成显示屏的初始化和初始化显示、定时器的初始化,注意定时初始化的时候不启动。启动有开始按键控制,不按下开始键不启动定时器。初始化完了,在while循环中调用start();确定是否启动定时器,调用stop();根据按键状态确定是否停止秒表并复位;调用second_cal_show(); 进行秒的计算和显示。

        void main()
        {

            InitLcd1602();
            LcdShowStr(0, 0, "Current : 0 S");
            LcdShowStr(0, 1, "Last    : 0 S");
            timer_inial();
        while(1)
        {
             start();
             stop();
             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 延时函数:软件延时,主要用按键软件消抖

//延时函数
void delay(unsigned int i)
{
        unsigned int k;
      for(k=0;k

2.3.3 启动函数:检测按键是否按下,按键如果按下则启动定时器T0,并从0开始计数。

void start()
{
    if(0==key_set)
         {
             delay(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)
         {
             delay(1200);//10ms消抖
             if(0==key_reset)//再次检测按键是否按下
             {
                    while(!key_reset);//等待按键释放
                  TR0=0;
                  LcdWriteCmd(0x01);  //清屏
                  LcdShowStr(0, 0, "Current : 0 S");
                  LcdShowStr(0, 1, "Last    : 0 S");
                  LcdShowStr(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次一秒
            {
              time_count=0;
                time_S++;
                sprintf(Disp_Buffer,"%d S",time_S);
            LcdShowStr(10, 0, Disp_Buffer);    
            }
            
        }
}

以上是全部代码,编译情况如下:

LCD1602



审核编辑:刘清

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分