实验名称:利用1602实现数字时钟

实验环境:普中实验系统;Keil μVision 4软件;
实验目的:
(1)掌握1602液晶显示器的工作原理和接口方法。
(2)利用本课程前面所学的知识,实现数字时钟功能。
硬件连线:
LCD1602的RS、R/W*和E这3个引脚分别接在P2.0、P2.1和P2.2引脚
数据口D0-D7接p3.0-3.7
实验主要代码:
Main.c

/**************************************************************************************
*                     LCD1602液晶显示实验                                               *
实现现象:下载程序后插上LCD1602液晶在开发板上,即可显示
注意事项:如果不想让点阵模块显示,可以将74HC595模块上的JP595短接片拔掉。
***************************************************************************************/#include "reg52.h"             //此文件中定义了单片机的一些特殊功能寄存器
#include "lcd.h"typedef unsigned int u16;   //对数据类型进行声明定义
typedef unsigned char u8;u8 Disp1[]="hello world 2021";
u8 Disp2[]="12 03 happyday";/*******************************************************************************
* 函 数 名         : main
* 函数功能         : 主函数
* 输    入         : 无
* 输    出         : 无
*******************************************************************************/
void main(void)
{u8 i;LcdInit();if(i<40){LcdWriteCom(0x80);}else{LcdWriteCom(0xC0);}for(i=0;i<40;i++){LcdWriteData(Disp1[i]);  }for(i=40;i<80;i++){LcdWriteData(Disp2[i-40]);}while(1);
}

Lcd.c

#include "lcd.h"/*******************************************************************************
* 函 数 名         : Lcd1602_Delay1ms
* 函数功能         : 延时函数,延时1ms
* 输    入         : c
* 输    出         : 无
* 说    名         : 该函数是在12MHZ晶振下,12分频单片机的延时。
*******************************************************************************/void Lcd1602_Delay1ms(uint c)   //误差 0us
{uchar a,b;for (; c>0; c--){for (b=199;b>0;b--){for(a=1;a>0;a--);}     }}/*******************************************************************************
* 函 数 名         : LcdWriteCom
* 函数功能         : 向LCD写入一个字节的命令
* 输    入         : com
* 输    出         : 无
*******************************************************************************/
#ifndef     LCD1602_4PINS    //当没有定义这个LCD1602_4PINS时
void LcdWriteCom(uchar com)   //写入命令
{LCD1602_E = 0;     //使能LCD1602_RS = 0;      //选择发送命令LCD1602_RW = 0;    //选择写入LCD1602_DATAPINS = com;     //放入命令Lcd1602_Delay1ms(1);        //等待数据稳定LCD1602_E = 1;           //写入时序Lcd1602_Delay1ms(5);      //保持时间LCD1602_E = 0;
}
#else
void LcdWriteCom(uchar com)   //写入命令
{LCD1602_E = 0;     //使能清零LCD1602_RS = 0;  //选择写入命令LCD1602_RW = 0;    //选择写入LCD1602_DATAPINS = com; //由于4位的接线是接到P0口的高四位,所以传送高四位不用改Lcd1602_Delay1ms(1);LCD1602_E = 1;     //写入时序Lcd1602_Delay1ms(5);LCD1602_E = 0;LCD1602_DATAPINS = com << 4; //发送低四位Lcd1602_Delay1ms(1);LCD1602_E = 1;     //写入时序Lcd1602_Delay1ms(5);LCD1602_E = 0;
}
#endif
/*******************************************************************************
* 函 数 名         : LcdWriteData
* 函数功能         : 向LCD写入一个字节的数据
* 输    入         : dat
* 输    出         : 无
*******************************************************************************/
#ifndef     LCD1602_4PINS
void LcdWriteData(uchar dat)            //写入数据
{LCD1602_E = 0;    //使能清零LCD1602_RS = 1;  //选择输入数据LCD1602_RW = 0;    //选择写入LCD1602_DATAPINS = dat; //写入数据Lcd1602_Delay1ms(1);LCD1602_E = 1;   //写入时序Lcd1602_Delay1ms(5);   //保持时间LCD1602_E = 0;
}
#else
void LcdWriteData(uchar dat)            //写入数据
{LCD1602_E = 0;      //使能清零LCD1602_RS = 1;      //选择写入数据LCD1602_RW = 0;    //选择写入LCD1602_DATAPINS = dat;    //由于4位的接线是接到P0口的高四位,所以传送高四位不用改Lcd1602_Delay1ms(1);LCD1602_E = 1;      //写入时序Lcd1602_Delay1ms(5);LCD1602_E = 0;LCD1602_DATAPINS = dat << 4; //写入低四位Lcd1602_Delay1ms(1);LCD1602_E = 1;     //写入时序Lcd1602_Delay1ms(5);LCD1602_E = 0;
}
#endif
/*******************************************************************************
* 函 数 名       : LcdInit()
* 函数功能       : 初始化LCD屏
* 输    入       : 无
* 输    出       : 无
*******************************************************************************/
#ifndef     LCD1602_4PINS
void LcdInit()                        //LCD初始化子程序
{LcdWriteCom(0x38);  //开显示LcdWriteCom(0x0c);  //开显示不显示光标LcdWriteCom(0x06);  //写一个指针加1LcdWriteCom(0x01);  //清屏LcdWriteCom(0x80);  //设置数据指针起点LcdWriteCom(0x28);}
#else
void LcdInit()                        //LCD初始化子程序
{LcdWriteCom(0x32);  //将8位总线转为4位总线LcdWriteCom(0x28);     //在四位线下的初始化LcdWriteCom(0x0c);  //开显示不显示光标LcdWriteCom(0x06);  //写一个指针加1LcdWriteCom(0x01);  //清屏LcdWriteCom(0x80);  //设置数据指针起点LcdWriteCom(0x28);
}
#endif

实验结果与心得:
实验效果:LCD液晶显示器第一行显示hello world 2021,第二行显示12 03 happyday字样

心得:1.单片机控制LCD 1602显示字符,只需将待显示字符的ASCII码写入显示数据存储器(DDRAM),内部控制电路就可将字符在显示器上显示出来。
2.LCD 1602的引脚包括8条数据线、3条控制线和3条电源线。
3.让液晶显示器显示字符,首先对其进行初始化设置:对有、无光标、光标移动方向、光标是否闪烁及字符移动方向等进行设置,才能获得所需显示效果。
4.命令6:功能设置命令。N—显示器行数选择控制位。0:单行显示,1:两行显示。
5.命令8:DDRAM地址设置。命令格式:80H+地址码。第二行格式80H+40H+地址码即0xC0H为起始地址

C51单片机实验——LCD 1602液晶显示器相关推荐

  1. c语言编程流水灯与交通灯实验,C51单片机实验报告_流水灯_交通灯_定时器_双机交互_时钟.doc...

    C51单片机实验报告_流水灯_交通灯_定时器_双机交互_时钟 学 号: 班 级: 自动化10班 姓 名: 张 指导老师: 胡 2012.12 单片机核心板实验要求 流水灯实验 实验目的: 简单I/O引 ...

  2. 单片机原理及其应用——单片机控制单个发光二极管实验(附超详细的C51单片机实验教程)

    目录 一.实验要求 二.利用Proteus仿真软件画原理图 三.Keil编程软件编写程序 (一)新建工程 (二)工程设置 (三)编写程序 四.将可执行文件加载到仿真图 五.连接电路图 六.通过烧录软件 ...

  3. C51单片机实验——LED流水灯

    实验一 LED流水灯实验报告 实验名称:LED流水灯实验 实验环境:普中实验系统:Keil μVision 4软件: 实验目的: (1)掌握uVision实验环境的使用 (2)掌握单片机I/O控制方法 ...

  4. c51单片机矩阵键盘1602计算器_【Proteus】单片机配合矩阵键盘LCD1602制作简易计算器...

    前言 想出一个关于Protues仿真的系列,回想起在大学时做课程设计,大多数是用这个来做,这个系列就围绕一些常用的外设或者说课程设计题目来进行对以前知识的回顾,温故而知新,同时也希望能对新手读者的学习 ...

  5. c51单片机矩阵键盘1602计算器_基于51单片机矩阵键盘的简易计算器制作

    1. 运算过程.符号公式实时显示在显示屏上(I2C 1602). 2. 自带三角函数.开根号.平方运算. 3. 计算得出的结果可设置保存并用以下一次计算. 4. 所有运算结果精确到至少小数点后两位. ...

  6. 在学习c51单片机实验七(双机通信及pcb设计)操作Keil uVision4和protus的时候遇到的两个坑

    第一个问题,这个问题用keil编程经常遇到 特别是懒的时候,对于新手,每次用一个工程文件,因为创建不熟练,就容易出现这个问题 Build target 'Target 1' linking... ** ...

  7. c51单片机矩阵键盘1602计算器_单片机LCD1602+矩阵+计算器程序(有详细代码注释)

    #include #include #include "keyport.h" #include "delay.h" #include #include &quo ...

  8. 【C51】基于C51单片机的LCD电子时钟设计(含代码,电路图,拿去直接用)

    学校的一个课设 可以去"链接"直接打包下载 1 LCD电子时钟设计 1. 制作一个基于LCD显示的电子钟,在LCD显示器上显示当前时间. 2. 使用字符型LCD显示器显示时间. 3 ...

  9. 【C51】基于C51单片机的LCD定时闹钟设计(含代码,电路,直接用)

    学校的一个课设 可以去"我的下载"直接打包下载 2 LCD定时闹钟设计 1. 分别显示时钟/定时时间,格式"时时:分分:秒秒": 2. 两屏显示区分:均分两行显 ...

最新文章

  1. 基于aspectj实现AOP操作的两种方式——xml配置
  2. 匿名函数,结合闭包的写法,js对象的案例
  3. LeetCode 453. 最小移动次数使数组元素相等(数学)
  4. linux系统下网络连接不上的问题
  5. js创建file对象 字符串 txt_js-创建对象的多种方式
  6. 郑大计算机组成与维护在线测试,郑大远程教育《计算机组成原理》第08章在线测试...
  7. 我可以在CSS中使用onclick效果吗?
  8. 一个对iBatis的总结写的不错(转载)
  9. class不生效 weblogic_weblogic部署常见问题
  10. ubuntu修改ip地址
  11. Python 九九乘法表打印
  12. 汇编语言基础:寄存器和寻址方式
  13. shared_ptr中的owner_before解析(最易懂,最全面)
  14. iphone/ipad 连接smb服务器,实现局域网内文件共享
  15. 怎么可以快速解决网络劫持
  16. 【常用传感器】LCD1602液晶工作原理详解及例程代码
  17. Tomcat之——宕机自动重启和每日定时启动tomcat
  18. HTML5之FileReader的使用
  19. 【学习笔记】第五章 线性规划
  20. PyQt5制作简单的 数据标注 工具(分类用)

热门文章

  1. Android - Audio - Qcom平台 - hac器件bring up
  2. srsLTE安装、运行及测试
  3. 数据分析与数据挖掘方面招聘的笔试题分享
  4. 洛谷P1004方格取数
  5. 用python 画太阳_Python PIL画一个太阳神的圆圈
  6. SQL Server 数据库中将数据表中的数据转化为Insert 语句
  7. 显示器接口:VGA、HDMI、DVI 、DisplayPort
  8. DNA 4. SCI 文章中基因组的突变信号(maftools)
  9. RobotFramework-自定义远程java关键字库能否返回Map类型
  10. 企业为什么要申请高新技术企业认定