电路图如下:

1、请描述液晶显示器的显示原理,及其与数码管相比的技术特点。

显示原理:

液晶显示器是利用偏光板这个特性来完成的,利用上下两片栏栅之间相互垂直的偏光板之间充满了液晶,

再利用电场控制液晶分支的旋转,来改变光的行进方向。

与数码管相比:数码管是元件,显示器是器件。

数码管在单片机中,一般仅做数字显示,而LCD可以显示数字、字符、汉字和图形。

还有LCD显示器体积小,厚度薄,重量轻、耗能少、工作电压低(1.5到6V)且无辐射,无闪烁并能直接与CMOS集成电路匹配。

2、
定义uchar变量data,要求在LCD1602上实现数字0~99的循环显示。
代码如下:

#include <reg52.h>
#include <intrins.h>
#define uchar unsigned char
#define uint unsigned int
#define out P0
/***********端口定义***************************************/
sbit rs=P2^0;
sbit rw=P2^1;
sbit e=P2^2;
/***********函数申明******************************************/
void check_busy(void);
void write_command(uchar com);
void write_data(uchar dat);
void LCD_initial(void);
void string(uchar ad ,uchar *s);
void lcd_test(void);
void delay(uint);
/***********主程序*********************************/
void main(void)
{LCD_initial();              //LCD1602 初始化while(1){ unsigned int i;unsigned char m,n;delay(10);for(i=0;i<=99;i++){if(i<10){n=i+'0';dis_char(0x08,n);//显示字符string(0x48,"wxh");//显示我的名字}else if(i<100){m=i/10+'0';n=i%10+'0';dis_char(0x08,m);//显示字符dis_char(0x09,n);string(0x48,"wxh");//显示我的名字}delay(100); write_command(0x01);     //清屏delay(100);        }}
}
//输出字符(数字)
void dis_char(unsigned char ad, unsigned char input){write_command(ad+0x80);write_data(input);delay(10);}
//1ms延时程序
void delay(uint j)
{uchar i=250;for(;j>0;j--){while(--i);i=249;while(--i);i=250;}
}
//查忙程序
void check_busy(void)
{uchar dt;do{dt=0xff;e=0;rs=0;   rw=1;e=1;dt=out;}while(dt&0x80);e=0;
}
//写控制指令
void write_command(uchar com)
{check_busy();e=0;rs=0;rw=0;out=com;e=1;_nop_();e=0;delay(1);
}
//写数据指令
void write_data(uchar dat)
{check_busy();e=0;rs=1;rw=0;out=dat;e=1;_nop_();e=0;delay(1);
}
//液晶屏初始化
void LCD_initial(void)
{write_command(0x38);//8位总线,双行显示,5X7的点阵字符write_command(0x0C);//开整体显示,光标关,无黑块write_command(0x06);//光标右移write_command(0x01);//清屏delay(1);
}
//输出字符串
void string(uchar ad,uchar *s)
{write_command(ad+0x80); //ad是显示位置信息while(*s>0){write_data(*s++);delay(100);}
}

3、在int0引脚上,利用按键实现中断触发,并在LCD1602上显示的触发次数。
代码如下:

#include <reg52.h>
#include <intrins.h>
#define uchar unsigned char
#define uint unsigned int
#define out P0
/***********端口定义***************************************/
sbit rs=P2^0;
sbit rw=P2^1;
sbit e=P2^2;
/***********函数申明******************************************/
void check_busy(void);
void write_command(uchar com);
void write_data(uchar dat);
void LCD_initial(void);
void string(uchar ad ,uchar *s);
void lcd_test(void);
void delay(uint);
/***********全局变量定义************************/unsigned int i=0;
/***********主程序*********************************/
void main(void)
{LCD_initial();              //LCD1602 初始化IT0=1;//设置P3.2引脚负跳变触发中断EA=1;//打开中断总开关EX0=1;//允许外部中断0引脚的中断PX0=1;//将外部中断0的优先权设置为高级中断        while(1){ unsigned char m,n;delay(10);if(i==0){string(0x00,"Hi! Teacher Chen");}else if(i<10){n=i+'0';dis_char(0x08,n);//显示字符string(0x48,"wxh");//显示我的名字}else if(i<100){m=i/10+'0';n=i%10+'0';dis_char(0x08,m);//显示字符dis_char(0x09,n);string(0x48,"wxh");//显示我的名字}delay(100);write_command(0x01);     //清屏delay(100);}
}
//INT0中断程序
void inter_0(void) interrupt 0{i++;if(i==99) i=0;
}
//输出字符(数字)
void dis_char(unsigned char ad, unsigned char input){write_command(ad+0x80);write_data(input);delay(10);}
//1ms延时程序
void delay(uint j)
{uchar i=250;for(;j>0;j--){while(--i);i=249;while(--i);i=250;}
}
//查忙程序
void check_busy(void)
{uchar dt;do{dt=0xff;e=0;rs=0;   rw=1;e=1;dt=out;}while(dt&0x80);e=0;
}
//写控制指令
void write_command(uchar com)
{check_busy();e=0;rs=0;rw=0;out=com;e=1;_nop_();e=0;delay(1);
}
//写数据指令
void write_data(uchar dat)
{check_busy();e=0;rs=1;rw=0;out=dat;e=1;_nop_();e=0;delay(1);
}
//液晶屏初始化
void LCD_initial(void)
{write_command(0x38);//8位总线,双行显示,5X7的点阵字符write_command(0x0C);//开整体显示,光标关,无黑块write_command(0x06);//光标右移write_command(0x01);//清屏delay(1);
}
//输出字符串
void string(uchar ad,uchar *s)
{write_command(ad+0x80); //ad是显示位置信息while(*s>0){write_data(*s++);delay(100);}
}

4、利用LCD1602显示出时分秒(时钟)
代码如下:

#include <reg52.h>
#include <intrins.h>
#define uchar unsigned char
#define uint unsigned int
#define out P0
/***********端口定义***************************************/
sbit rs=P2^0;
sbit rw=P2^1;
sbit e=P2^2;
/***********函数申明******************************************/
void check_busy(void);
void write_command(uchar com);
void write_data(uchar dat);
void LCD_initial(void);
void string(uchar ad ,uchar *s);
void lcd_test(void);
void delay(uint);
/***********全局变量定义******************************************/unsigned int hour=0;//时unsigned int min=0;//分unsigned int sec=0;//秒unsigned int counter=0;//软件计数
/***********主程序*********************************/
void main(void)
{
unsigned char period_number;LCD_initial();//LCD1602 初始化string(0x43,"Good night!");//晚安period_number=200;TMOD=0x02;//方式2TL0=0-period_number;//装初值TH0=0-period_number; TR0=1;//启动EA=1;//打开中断总开关ET0=1;//允许T0引脚的中断while(1){ unsigned char h1,h2,m1,m2,s1,s2;h1=hour/10+'0';h2=hour%10+'0';m1=min/10+'0';m2=min%10+'0';s1=sec/10+'0';s2=sec%10+'0';dis_char(0x04,h1);//显示时dis_char(0x05,h2);dis_char(0x06,':');dis_char(0x07,m1);//显示分dis_char(0x08,m2);dis_char(0x09,':');dis_char(0x0a,s1);//显示秒dis_char(0x0b,s2);}
}
//T0中断程序
void inter_1(void) interrupt 1{counter++;if(counter>=5000){counter=0;sec++;}if(sec>=60) {min++;sec=0;}if(min>=60){ hour++;min=0;}if(hour==24) hour=0;
}
//输出字符(数字)
void dis_char(unsigned char ad, unsigned char input){write_command(ad+0x80);write_data(input);delay(10);}
//1ms延时程序
void delay(uint j)
{uchar i=250;for(;j>0;j--){while(--i);i=249;while(--i);i=250;}
}
//查忙程序
void check_busy(void)
{uchar dt;do{dt=0xff;e=0;rs=0;   rw=1;e=1;dt=out;}while(dt&0x80);e=0;
}
//写控制指令
void write_command(uchar com)
{check_busy();e=0;rs=0;rw=0;out=com;e=1;_nop_();e=0;delay(1);
}
//写数据指令
void write_data(uchar dat)
{check_busy();e=0;rs=1;rw=0;out=dat;e=1;_nop_();e=0;delay(1);
}
//液晶屏初始化
void LCD_initial(void)
{write_command(0x38);//8位总线,双行显示,5X7的点阵字符write_command(0x0C);//开整体显示,光标关,无黑块write_command(0x06);//光标右移write_command(0x01);//清屏delay(1);
}
//输出字符串
void string(uchar ad,uchar *s)
{write_command(ad+0x80); //ad是显示位置信息while(*s>0){write_data(*s++);delay(100);}
}

单片机 LCD1602显示实验相关推荐

  1. Proteus8仿真:51单片机LCD1602显示

    51单片机LCD1602显示 元器件 原理图部分 代码 main.c 工程文件 元器件 元器件 名称 排阻 RESPACK-8 51单片机 AT89C51 LCD1602 LM016L 按键 BUTT ...

  2. 实验(四):LCD1602显示实验

    一.实验目的与任务 实验目的: 1. 掌握LCD1602显示控制方法: 2. 掌握利用Proteus进行单片机控制系统的仿真及调试方法. 3. 掌握单片机开发板的使用. 任务: 1.根据要求编写程序, ...

  3. MSP430+LCD1602显示实验

    MSP430+LCD1602显示实验 LCD12864同样适用 1.本实验用开发板 2.程序代码 3.实验效果 1.本实验用开发板 使用的模块是TI官方的MSP430F5529开发板,只需更改引脚即可 ...

  4. 基于51单片机LCD1602显示

    基于51单片机LCD1602显示 要在1602上显示字符,要大概明白1602液晶显示屏工作原理. 一般的液晶显示器(Liquid Crystal Display, LCD) 的主要原理是以电流刺激液晶 ...

  5. STM32单片机TFTLCD显示实验:TFTLCD简介

    STM32单片机TFTLCD显示实验学习笔记 1.TFTLCD模块接口图 以2.8寸的TFTLCD为例,采用16位的并方式与外界进行连接,模块接口图如下所示: 具有如下一些信号线: CS:TFTLCD ...

  6. 【优秀课设】51单片机LCD1602显示的温度控制系统设计 包括时间显示 校时、设置最值温度报警功能

    1.将DS18B20温度传感器的温度读出来,并在LCD1602上显示出来. 2.在LCD上分别切换显示,软件设计时钟(时.分.秒),和当前温度值,和温度上下控制值.并可以通过按键进行修改设置,温度高于 ...

  7. 51单片机LCD1602显示电子时钟 带按键设置和星期显示

    当时看书看到lcd那章,就想利用定时器做一个电子时钟,当时也不知道有时钟模块的,以为都是定时器定时产生的时间,也是一个main文件从头到尾的版本,注释倒不少,不要说什么模块化编程和代码优化,想到什么就 ...

  8. 简单易懂的51单片机LCD1602显示protues仿真程序

    时序图  仿真效果  #include"AT89X51.h" typedef unsigned char u8; typedef unsigned int u16;#define ...

  9. 仿真软件proteus构建LCD1602显示字符串实验

    LCD1602模块的显示需要注意几点: 1.显示两行,第一行的起始地址是0x80,第二行的地址是0x80+0x40 = 0xC0. 2.RS,RW,EN接线没有说一定要接到P1,P2,P3上,只要给对 ...

最新文章

  1. 网络协议关系拓扑图 很全面 很好
  2. 本地navicat连接阿里云数据库
  3. ae中合成设置的快捷键_AE项目工作流程讲解及项目与合成设置
  4. oracle简易版创建数据库,浅析新建Oracle数据库的三种方法
  5. Nginx配置服务器静态文件支持跨域访问
  6. 淘宝支付页面代码php,支付页面html模板
  7. 嵌入式C开发中用到的位域结构体
  8. Android AlarmManager广播接收器和服务
  9. Java读取、创建Excel;验签,加密
  10. 参数估计:文本分析的参数估计方法
  11. android加载框效果《IT蓝豹》
  12. 全民主公2怎么在电脑上玩 全民主公2安卓模拟器玩法教程
  13. 小学教育专业语文方向毕业论文怎么选题?
  14. element提交图片限制一张_ElementUI 上传文件以及限制
  15. u8 客户端修改服务器地址,u8服务器地址怎么修改
  16. 30 个 Python 的最佳实践、小贴士和技巧
  17. TCP/IP 之 大明王朝邮差
  18. 郎平的与时俱进-《夺冠》观后感
  19. ICPC Central Russia Regional Contest (CRRC 19)
  20. 标题爱奇艺的数据库选型大法,实用不纠结!

热门文章

  1. 教育部计算机英语怎么说,教育部课题、国家社科基金、国家自然基金的英文翻译???...
  2. activemq后台管理 看topic消息_消息队列之ActiveMQ
  3. 破解IT公司高管频繁离职的密码
  4. 文件的基本操作--利用爬取的王者荣耀李信台词进行练习
  5. 2022年自考专业(公关关系)传播学概论练习题
  6. 合战忍者村/锄战三国村布局
  7. 51job爬虫-xpath
  8. 井柏然自己的字体,手写语录合集
  9. 编译linux0.11内核
  10. Java反射invoke报错wrong number of arguments