当前位置: 首页 > article >正文

单片机 单片机与液晶实验 实验六

实验六 单片机与液晶实验

  • 实验目的  

1、掌握液晶LCD1602和单片机通信的原理。

2、掌握液晶LCD1602和单片机通信程序的设计方法及其过程。

3、掌握液晶和LCD1602和单片机通信的电路应用。

  • 实验任务

设计一个两位秒表,显示于LCD1602,计时结束后,LED灯亮。

  • 实验原理

本实验需要用到液晶屏的工作原理和定时器的工作原理,定时器的工作原理在实验4中已经有详细的介绍,在这里将不再介绍。

液晶屏LCD1602一共有16个引脚,各个引脚的功能为:

第1脚:VSS,电源地。

第2脚:VDD,+5V电源。

第3脚:VEE,液晶显示对比度调整输入端

第4脚:RS,数据/命令选择端

第5脚:R/W,读/写选择端 ,

第6脚:E,使能端,读操作上升沿有效,  写操作下降沿有效

第7~14脚:D0~D7,为8位双向数据线

第15脚:BLA,背光源正极。

第16脚:BLK,背光源负极。

LCD1602 在读写数据时需要通过一定的时序来完成。

 1602时序解析

LCD1602初始化过程:

  1. 清屏。清除屏幕,将显示缓冲区DDRAM的内容全部写入空格(ASCII20H)。  

(2) 功能设置。设置数据位数,设置显示行数 。设置字形大小 .  

(3) 开/关显示设置。控制光标显示、字符是否闪烁等。

(4)输入方式设置。设定光标的移动方向以及后面的内容是否移动

LCD1602和单片机电路连接图如图6-1所示:

图 6-1 液晶屏和LCD1602电路连接图

  • 程序流程图

图6-2定义声明延时函数

如图6-2所示,该程序主要内容,定义液晶显示,特殊功能位RS、RW、LED声明,初始化倒计时秒数,延时函数。

图6-3忙、写命令、写数据、初始化函数

图6-4定时器中断、显示、时钟控制函数

如图6-4所示,设置定时器模式为模式1,设置定时器的初值。使用写命令、写数据函数,写入需要显示的数据。时钟控制倒计时的时间,当倒计时结束则需要执行LED灯亮起的命令。

图6-5主函数、定时器0中断函数

如图6-5所示,主函数中调用其他函数进行显示,定时器0中断处理函数重新设置定时器0的初值,使得定时器能够继续计数,并在计时结束时控制LED灯亮起。

  • 实验结果及分析总结

图6-6仿真成功电路图

将程序下载至仿真电路图中,仿真成功实现倒计时计数(内容是从10-0)如图6-6所示,当倒计时至0之后LED灯会亮起(如图6-7所示)。

图6-7倒计时至0是LED灯亮起

本次实验在完成设计一个两位秒表计时显示的过程中掌握了液晶LCD1602和单片机通信的原理和电路应用,通信程序的设计方法及其过程。

实验中,对于定时器的使用还是存在调用的不准确的情况,在实验过后又复习了一遍定时器的原理,在实验的最后,遗留下来的问题是在仿真图中没有更改LED灯所连接电阻的阻值。导致一直无法仿真成功。

  • 程序附录

    #include <reg51.h>
    #define LCD_DATA P2
    unsigned char num[10] = {'0','1','2','3','4','5','6','7','8','9'}; //定义液晶端口
    sbit RS = P3^5;
    sbit RW = P3^6;
    sbit E = P3^7;
    sbit LED = P1^7;
    
    unsigned char second = 9; // 初始倒计时秒数
    
    void delay(unsigned int a) //延时函数
    {
        while(a--);
    }
    
    void lcd_busy() //检查LCD忙函数
    {
        LCD_DATA = 0xff;
        RS = 0;
        RW = 1;
        E = 0;
        E = 1;
        while(LCD_DATA & 0X80) {
            E = 0;
            E = 1;
        } //忙等待
    }
    
    void write_com(unsigned char command) //写命令函数
    {
        lcd_busy();
        E = 0;
        RS = 0;
        RW = 0;
        E = 1;
        LCD_DATA = command;
        E = 0;
    }
    
    void write_data(unsigned char lcd_data) //写数据函数
    {
        lcd_busy();
        E = 0;
        RS = 1;
        RW = 0;
        E = 1;
        LCD_DATA = lcd_data;
        E = 0;
    }
    
    void init_lcd() //初始化LCD函数
    {
        write_com(0x01); //清屏
        write_com(0x38); //5*7点阵
        write_com(0x0c); //显示器开,光标关闭,字符不闪烁
        write_com(0x06); //字符不开,光标自动向右移1格
    }
    
    void init_interrupt()
    {
        TMOD = 0x01;
        TH0 = 0x3c;
        TL0 = 0xb0;
        ET0 = 1;
        TR0 = 1;
        EA = 1;
    }
    
    void display()
    {
        write_com(0x80); //第一行第1个地址
        write_data('C');
        write_data('l');
        write_data('o');
        write_data('c');
        write_data('k');
        write_data(':');
        write_com(0xc4);
        write_data(num[second]);
        delay(50000);
    }
    
    void clock()
    {
        if(second > 0) {
            second--;
        }
    }
    
    void main()
    {
        init_interrupt();
        init_lcd();
        while(1) {
            display();
            clock();
        }
    }
    
    void Timer0() interrupt 1
    {
        TH0 = 0x3c;
        TL0 = 0xb0;
        if(second == 0) {
            LED = 0; // 计时结束后,LED灯亮
        }
    }


http://www.kler.cn/a/397779.html

相关文章:

  • IDEA leetcode插件代码模板配置,登录闪退解决
  • rk3399开发环境使用Android 10初体验蓝牙功能
  • 【CV】头盔检测区域入侵项目
  • LLMs之Code:Qwen2.5-Coder的简介、安装和使用方法、案例应用之详细攻略
  • 六、volatile
  • 深入探索 Kubernetes 安全容器:Kata Containers 与 gVisor
  • Spring Boot框架:网上商城开发新选择
  • C# WPF 记录DataGrid的表头顺序,下次打开界面时应用到表格中
  • 软件设计师 - 第1章 计算机网络概论
  • Spring Boot框架:电商解决方案的创新
  • 泛型11.16
  • “倒时差”用英语怎么说?生活英语口语学习柯桥外语培训
  • 30-集群Backup Restore
  • 【#IEEE独立出版、EI稳定检索##高录用 快见刊 稳检索#】2024健康大数据与智能医疗国际会议(ICHIH 2024,12月13-15日)
  • 【Java知识】Java性能测试工具JMeter
  • node.js下载安装步骤整理
  • Linux基础5-进程控制1(fork创建子进程,写时拷贝,进程退出)
  • nuget 管理全局包、缓存和临时文件夹
  • Zotero 7本地pdf文件名自适应中英文格式
  • stm32使用cJSON_Print返回空
  • Gin 框架入门(GO)-1
  • 正态分布密度函数的基本概念
  • Pandas进行时间选择与过滤
  • vue3设置第三方组件 样式::v-deep
  • 智能化运维与AI/ML辅助决策:实现自动化与预测优化
  • 游戏引擎学习第八天