欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 新闻 > 资讯 > 单片机 单片机与液晶实验 实验六

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

2025/2/6 12:58:30 来源:https://blog.csdn.net/m0_64711058/article/details/143753278  浏览:    关键词:单片机 单片机与液晶实验 实验六

实验六 单片机与液晶实验

  • 实验目的  

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灯亮}
    }

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com