《单片机应用技术》课件第2章单片机输入输出应用.ppt

上传人(卖家):momomo 文档编号:7652498 上传时间:2024-05-24 格式:PPT 页数:151 大小:10.40MB
下载 相关 举报
《单片机应用技术》课件第2章单片机输入输出应用.ppt_第1页
第1页 / 共151页
《单片机应用技术》课件第2章单片机输入输出应用.ppt_第2页
第2页 / 共151页
《单片机应用技术》课件第2章单片机输入输出应用.ppt_第3页
第3页 / 共151页
《单片机应用技术》课件第2章单片机输入输出应用.ppt_第4页
第4页 / 共151页
《单片机应用技术》课件第2章单片机输入输出应用.ppt_第5页
第5页 / 共151页
点击查看更多>>
资源描述

1、第第2章章 单片机输入输出应用单片机输入输出应用 流水灯设计流水灯设计矩阵键盘设计矩阵键盘设计LCD液晶设计液晶设计数码管设计数码管设计 2.1单片机并行输入输出端口结构单片机并行输入输出端口结构知识51系列单片机一般采用系列单片机一般采用40只引脚的双列直插式(只引脚的双列直插式(DIPDual In-line Package)封装结构)封装结构DIP引脚分布 电源及晶振引脚(共电源及晶振引脚(共4只)只)控制引脚(共控制引脚(共4只)只)端口引脚端口引脚(共(共32只)只)三类 并行输入/输出电路结构P0.0P0.1P0.2 P0.3 P0.4 P0.5 P0.6 P0.7P1.0P1.1

2、P1.2 P1.3 P1.4 P1.5 P1.6 P1.7P2.7 P2.6 P2.5 P2.4 P2.3 P2.2 P2.1 P2.0P3.0P3.1P3.2 P3.3 P3.4 P3.5 P3.6 P3.7u4 4个个8 8位并行位并行I/OI/O口:口:P0P0,P1P1,P2P2,P3P3;u均可作为双向均可作为双向I/OI/O端口使用。端口使用。P0P0:访问片外扩展存储器时,访问片外扩展存储器时,复用为低复用为低8 8位地址线和数据线位地址线和数据线 P2P2:高高8 8位地址线。位地址线。P1P1:双向双向I/OI/O端口端口 P3P3:第二功能第二功能1234567891011

3、121314151617181920403938373635343332313029282726252424222180318051 875189C51P0P3小结P0P3口都可作为准双向通用口都可作为准双向通用I/O口。口。1.其中只有其中只有P0口需要口需要外接上拉电阻外接上拉电阻(10k);2.在需要扩展片外设备时,在需要扩展片外设备时,P2口可作为其口可作为其地址线接口地址线接口,3.P0口可作为口可作为其地址线其地址线/数据线复用接口数据线复用接口,此时它是真正的双,此时它是真正的双向口。向口。2.2 LED流水灯项目设计流水灯项目设计项目任意模式霓虹灯显示任意模式霓虹灯显示 各显示

4、模式字之间无任各显示模式字之间无任何变化规律,无法采用何变化规律,无法采用移位指令和循环结构的移位指令和循环结构的程序来实现。应该采用程序来实现。应该采用什么结构的程序呢?什么结构的程序呢?任务任务i=0P0.7=1 P0.6=1 P0.5=1 P0.4=0 P0.3=0 P0.2=1 P0.1=1 P0.0=1LED7灭 LED6灭 LED5灭 LED4亮 LED3亮 LED2灭 LED1灭 LED0灭i=1P3.7=1 P3.6=1 P3.5=0 P3.4=1 P3.3=1 P3.2=0 P3.1=1 P3.0=1LED7灭 LED6灭 LED5亮 LED4灭 LED3灭 LED2亮 LE

5、D1灭 LED0灭i=2P3.7=1 P3.6=0 P3.5=1 P3.4=1 P3.3=1 P3.2=1 P3.1=0 P3.0=1LED7灭 LED6亮 LED5灭 LED4灭 LED3灭 LED2灭 LED1亮 LED0灭i=3P3.7=0 P3.6=1 P3.5=1 P3.4=1 P3.3=1 P3.2=1 P3.1=1 P3.0=0LED7亮 LED6灭 LED5灭 LED4灭 LED3灭 LED2灭 LED1灭 LED0亮动手做动手做画出硬件电路图画出硬件电路图 单片机有单片机有4个个8位的位的I/O口口P0、P1、P2、P3,任意一个,任意一个I/O口都可以用来控口都可以用来控制

6、制8个个LED灯的亮灭显示,该任务采用灯的亮灭显示,该任务采用P0口的控制口的控制8个个LED灯,电路如图灯,电路如图所示。所示。Proteus的元件有的元件有RESPACK-8等,等,1为公共引脚,其它位每个电阻为公共引脚,其它位每个电阻的另一个引脚的另一个引脚 为避免连线复杂,为避免连线复杂,Proteus可以采用网络标号,就是需要连接的两个可以采用网络标号,就是需要连接的两个点或更多的点用相同的网络标号标上,就与各点之间的连线等效了。点或更多的点用相同的网络标号标上,就与各点之间的连线等效了。CPU的微操作必须在统一的时钟控制下才能正确进行,微调电容微调电容:C1、C2 540pF 晶振

7、:石英晶体封裝晶振:石英晶体封裝 MCS-51的时钟频率为612MHz可选不同的晶振需要通过单片机引脚接入晶振元件晶振元件或外部时钟外部时钟内部时钟方式时钟电路时钟电路单片机本身就是一个复杂的同步时序电路,为了保证同步工作方式的实现,电路应该在唯一的时钟信号控制下严格的按时序进行工作。时钟电路用于产生单片机所需要的时钟信号。XTAL2XTAL122pF22pF12M时序的定时单位:时钟振荡周期P、机器周期、指令周期 1个机器周期=12个时钟振荡周期 1个指令周期约为14个机器周期 使CPU和系统中的其他功能部件都处在一个确定的初始状态,并从这个状态开始工作。必须使RST/VPD加上持续两个机器

8、周期以上的高电平。PC=0000H P0P3=0FFH ,SP=07H 其他SFR均为00H,片内RAM为任意状态RST10uF+5v10k1kRST+5v10k1k10uF+5v10kRST 上电复位(开机、掉电后重新上电)按键复位(例如发生故障后、死机时)/功能:采用数组实现的任意变化的霓虹广告灯控制程序功能:采用数组实现的任意变化的霓虹广告灯控制程序#include /包含头文件包含头文件REG51.H#define uchar unsigned char /定义数据类型定义数据类型void delay(uchar x);/延时函数声明延时函数声明void main()/主函数主函数 u

9、char i;uchar display=0 xe7,0 xdb,0 xbd,0 x7e;while(1)for(i=0;i4;i+)P0=displayi;/显示字送显示字送P0口口 delay(250);delay(250);delay(250);/延时延时 程序设计程序设计/*延时函数延时函数t(ms)*/void delay(unsigned char t)unsigned char j,k;for(j=0;jt;j+)for(k=0;k255;k+)Keil C规规定定16进制数必须以进制数必须以 0 x开头,比如开头,比如 0 x1表示一个表示一个16进制数,比如进制数,比如0 x

10、fe就是代表十就是代表十六进制数六进制数fe,用二进制表示就是,用二进制表示就是1111 1110。数组分为一维、二维、三维和多维数组等,常用的是一维、二数组分为一维、二维、三维和多维数组等,常用的是一维、二维和字符数组。维和字符数组。(1)一维数组的定义格式如下:)一维数组的定义格式如下:类型说明符类型说明符 数组名数组名常量表达式常量表达式;例如例如“char a5;”即定义字符数组即定义字符数组a,有,有5个元素。个元素。(2)数组元素的一般形式为:)数组元素的一般形式为:数组名数组名下标下标 例如:例如:tab5、numi+j、ai+都是合法的数组元素。都是合法的数组元素。(3)数组初

11、始化赋值的一般形式为:)数组初始化赋值的一般形式为:类型说明符类型说明符 数组名数组名常量表达式常量表达式=值,值值,值值值;例如:例如:int num10=0,1,2,3,4,5,6,7,8,9;动手做动手做proteus仿真仿真从PROTEUS中选取如下元器件:(1)AT89C51,单片机;(2)RES,电阻;(3)CAP、CAP-ELEC,电容、电解电容;(4)LED,发光二极管。放置元器件、电源和地,设置参数,连线,最后进行电气规则检查,将目标代码文件.hex加载到AT89C51单片机中,电路仿真 P0.0P0.1P0.2P0.3P0.4P0.5P0.6P0.7P0.0P0.1P0.2

12、P0.3P0.4P0.5P0.6P0.7P0.0P0.1P0.2P0.3P0.4P0.5P0.6P0.7XTAL218XTAL119ALE30EA31PSEN29RST9P0.0/AD039P0.1/AD138P0.2/AD237P0.3/AD336P0.4/AD435P0.5/AD534P0.6/AD633P0.7/AD732P1.0/T21P1.1/T2EX2P1.23P1.34P1.45P1.56P1.67P1.78P3.0/RXD10P3.1/TXD11P3.2/INT012P3.3/INT113P3.4/T014P3.7/RD17P3.6/WR16P3.5/T115P2.7/A152

13、8P2.0/A821P2.1/A922P2.2/A1023P2.3/A1124P2.4/A1225P2.5/A1326P2.6/A1427AT89C5230pF30pF12M10uF+5v10k1kLED0LED1LED2LED3LED4LED5LED6LED7+5v2345678912202345678911k/流水灯项目拓展一:采用数组实现流水灯项目拓展一:采用数组实现8个个LED灯的中间灯的中间2个灯先亮个灯先亮后灭,并向外展开,再向内收缩。后灭,并向外展开,再向内收缩。#include#define uchar unsigned char /unsigned char简称为简称为uch

14、arvoid delay(uchar);/延时函数声明延时函数声明void main()uchar i;uchar display=0 xe7,0 xdb,0 xbd,0 x7e,0 xbd,0 xdb;/数组数组while(1)for(i=0;i6;i+)P0=displayi;/P0口输出控制流水灯口输出控制流水灯delay(250);delay(250);/延时延时500ms /流水灯项目拓展二:采用数组实现流水灯项目拓展二:采用数组实现8个个LED灯的自上而下点亮。灯的自上而下点亮。#include#define uchar unsigned char /unsigned char简称

15、为简称为ucharvoid delay(uchar);/延时函数声明延时函数声明void main()uchar i;uchar display=0 xfe,0 xfd,0 xfb,0 xf7,0 xef,0 xdf,0 xbf,0 x7f;while(1)for(i=0;i8;i+)P0=displayi;/P0口输出控制流水灯口输出控制流水灯delay(250);delay(250);/延时延时500ms 2.3 数码管显示项目设计数码管显示项目设计项目1.1.数码管的结构数码管的结构共阳极共阳极 共阴极共阴极 VCCGND共阳极数码管显示注意共阳极数码管显示注意Com端接端接Vcc,低电

16、平点亮数码管,低电平点亮数码管共阴极数码管显示注意共阴极数码管显示注意Com端接端接GND,高电平点亮数码管,高电平点亮数码管2.LED2.LED数码管的字型编码数码管的字型编码字型字型00011111字型码字型码dp g f e d c b a0 1 1 0 1 1 0 1十六进制:十六进制:0 x6d共阴极共阴极 共阴(阳)数码管码表动手做动手做画出硬件电路图画出硬件电路图 数码管静态显示需要合适的驱动电流,单片机输出口的输出电流会显得不够用,所以一般会使用74HC573锁存器作为驱动,并且采用300的限流电阻接数码管。74HC573的OE引脚在使用时通常与GND连接在一起,通过LE来选择

17、锁存器的锁存与使用状态。LE为高电平时,锁存器信号输入端接受信号发送到输出端,LE为低电平时,输入信号锁存在芯片内,D0-D7为信号输入端,Q1-Q7为信号输出端。静态数码管显示程序设计如下。#include sbit LE=P20;/P2.0管脚命名为LEvoid main(void)LE=1;/锁存器数据透明P0=0 x7d;/七段码,显示6LE=0;/锁存器数据锁存while(1);静态数码管项目仿真调试结果为显示“6”。动手做动手做proteus仿真仿真项目拓展:在数码管上循环显示十六个字符0F程序设计如下。#include#define uchar unsigned char /un

18、signed char简称为ucharvoid delay(uchar);/延时函数声明sbit LE=P20;void main(void)uchar i;uchar led=0 x3f,0 x6,0 x5b,0 x4f,0 x66,0 x6d,0 x7d,0 x7,0 x7f,0 x6f,0 x77,0 x7c,0 x39,0 x5e,0 x79,0 x71;/共阴七段码表数组 for(i=0;i16;i+)LE=1;/锁存器数据透明P0=ledi;/七段码显示LE=0;/锁存器数据锁存delay(250);delay(250);delay(250);delay(250);2.4 动态数码

19、管显示项目设计动态数码管显示项目设计项目 动态数码管的显示是指数码管不是一直点亮显示的,而是间歇点亮显示的。数码管的点亮时间为12ms,由于人的视觉暂留现象及发光二极管的余辉效应,尽管实际上数码管不是一直点亮,但只要扫描的速度足够快,给人的印象就是一个稳定的显示,不会有闪烁感,动态显示的效果和静态显示是一样的,能够节省大量的I/O端口,而且功耗更低。动态数码管项目设计任务为:单片机控制P口输出,用6个数码管动态显示某数字及字符,如显示电流1.255A的数字和字符为“1.255A”。动手做动手做画出硬件电路图画出硬件电路图 74LS138译码器:Y0Y7 译码使能端译码输入端译码输出端74LS1

20、38真值表真值表使 能 端输 入 端输 出 端E1 P2.3 S2 S2 C B AP2.2 P2.1 P2.0 Y0 Y1 Y2 Y3 Y4 Y5 Y6 Y71 0 01 0 01 0 01 0 01 0 01 0 01 0 01 0 00 0 0 0 0 1 0 1 0 0 1 1 1 0 0 1 0 1 1 1 0 1 1 1 0 1 1 1 1 1 1 1 1 0 1 1 1 1 1 1 1 1 0 1 1 1 1 1 1 1 1 0 1 1 1 1 1 1 1 1 0 1 1 1 1 1 1 1 1 0 1 1 1 1 1 1 1 1 0 1 1 1 1 1 1 1 1 0 动态数码

21、管显示程序设计如下。#include#define uchar unsigned char /unsigned char简称为ucharvoid delay(uchar);/延时函数声明void main()unsigned char i,abc=0 x8;/首个数码管显示 unsigned char led=0 x6,0 x80,0 x5b,0 x6d,0 x6d,0 x77;for(i=0;i6;i+)P2=abc+;if(abc=0 x0e)abc=0 x8;/第6个数码管后,回头P0=ledi;delay(2);/延时2ms 动手做动手做proteus仿真仿真项目拓展一:在第16个数码

22、管位置同时显示十六个字符0F#include#define uchar unsigned char /unsigned char简称为ucharvoid delay(uchar);/延时函数声明void main()uchar i,l,m,abc=0 x8;/首个数码管显示uchar led=0 x3f,0 x6,0 x5b,0 x4f,0 x66,0 x6d,0 x7d,0 x7,0 x7f,0 x6f,0 x77,0 x7c,0 x39,0 x5e,0 x79,0 x71;/数码管码表 for(i=0;i16;i+)for(m=0;m100;m+)for(l=0;l6;l+)P2=abc+

23、;if(abc=0 x0e)abc=0 x8;/第6个数码管后,回首P0=ledi;/数码管显示delay(2);/延时2ms 项目拓展二:在第16个数码管位置循环显示十二个字符0b。#include#define uchar unsigned char /unsigned char简称为ucharvoid delay(uchar);/延时函数声明void main()unsigned char i,abc=0 x8;/首个数码管显示unsigned char led=0 x3f,0 x6,0 x5b,0 x4f,0 x66,0 x6d,0 x7d,0 x7,0 x7f,0 x6f,0 x77

24、,0 x7c;/数码管码表 for(i=0;i12;i+)P2=abc+;if(abc=0 x0e)abc=0 x8;/第6个数码管后,回首 P0=ledi;/数码管显示delay(250);delay(250);/延时500ms 2.5独立按键项目设计独立按键项目设计项目 一个按键实际上是一个开关元件。单片机使用的按键是一一个按键实际上是一个开关元件。单片机使用的按键是一种常开型的开关,平时按键的两个触点处于断开状态,按种常开型的开关,平时按键的两个触点处于断开状态,按下键时它们才闭合。下键时它们才闭合。按键按键按键在闭合和断开时,触点会存在抖动现象:按键在闭合和断开时,触点会存在抖动现象:

25、键的抖动图 10.1 键盘抖动示意图去除键的抖动抖动时间一般为510ms。抖动会引起一次按键被误读多次。为确保CPU对键的一次闭合仅做一次处理,必须去除键抖动。抖动的去除可以采用硬件的办法,也可以软件的办法。软件去抖动的方法其实就是利用软件去抖动的方法其实就是利用延时来去掉这一抖动时间。延时来去掉这一抖动时间。独立按键项目设计任务为:用独立按键控制LED灯。动手做动手做画出硬件电路图画出硬件电路图 独立按键程序设计如下。#include#define uchar unsigned char /unsigned char简称为ucharvoid delay(uchar);/延时函数声明sbit

26、BUTTON0=P10;sbit BUTTON1=P11;sbit BUTTON2=P12;sbit BUTTON3=P13;/按键管脚定义sbit LED0=P00;sbit LED1=P01;sbit LED2=P02;sbit LED3=P03;/LED控制端定义void main()while(1)if(BUTTON0=0)delay(10);/延时10ms防抖if(BUTTON0=0)/查询按键0LED0=0;else LED0=1;else if(BUTTON1=0)delay(10);if(BUTTON1=0)/查询按键1LED1=0;else LED1=1;else if(BU

27、TTON2=0)delay(10);if(BUTTON2=0)/查询按键2LED2=0;else LED2=1;else if(BUTTON3=0)delay(10);if(BUTTON3=0)/查询按键3LED3=0;else LED3=1;动手做动手做proteus仿真仿真项目拓展-抢答器,4个按键中,如果一个按键被抢先按下,则相应LED灯亮起,再有其他按键,则不再作相应变化#include#define uchar unsigned char /unsigned char简称为ucharvoid delay(uchar);/延时函数声明sbit BUTTON0=P10;sbit BUTT

28、ON1=P11;sbit BUTTON2=P12;sbit BUTTON3=P13;/按键管脚定义sbit LED0=P00;sbit LED1=P01;sbit LED2=P02;sbit LED3=P03;/LED控制端定义uchar i;void main()while(1)if(BUTTON0=0)delay(10);/延时10ms防抖if(BUTTON0=0)/查询按键0LED0=0;i=1;else if(BUTTON1=0)delay(10);if(BUTTON1=0)/查询按键1LED1=0;i=1;else if(BUTTON2=0)delay(10);if(BUTTON2=

29、0)/查询按键2LED2=0;i=1;else if(BUTTON3=0)delay(10);if(BUTTON3=0)/查询按键3LED3=0;i=1;while(i);项目拓展-加减按键。按下一次按键B0,数码管显示加1;按下一次按键B1,数码管显示减1;按下按键B2,数码管清零,显示“0”。动手做动手做画出硬件电路图画出硬件电路图#include#define uchar unsigned char /unsigned char简称为ucharvoid delay(uchar);/延时函数声明sbit BUTTON0=P10;sbit BUTTON1=P11;sbit BUTTON2=P

30、12;/按键管脚定义sbit LE=P20;/74HC573锁存使能端定义uchar m,n;void main()unsigned char led10=0 x3f,0 x6,0 x5b,0 x4f,0 x66,0 x6d,0 x7d,0 x7,0 x7f,0 x6f;/09数码管码表LE=1;P0=led0;/数码管显示0LE=0;while(1)n=m;if(BUTTON0=0)delay(10);if(BUTTON0=0)/查询按键+n=n+1;if(n=9)n=9;LE=1;P0=ledn;LE=0;else if(BUTTON1=0)/查询按键-delay(10);if(BUTTO

31、N1=0)if(n=0)n=0;else n=n-1;LE=1;P0=ledn;LE=0;else if(BUTTON2=0)/查询按键归零delay(10);if(BUTTON2=0)n=0;LE=1;P0=led0;LE=1;delay(250);m=n;2.5 矩阵按键项目设计矩阵按键项目设计项目 键盘由一组规则排列的按键组成,也就是说键盘是一组键盘由一组规则排列的按键组成,也就是说键盘是一组规则排列的开关。规则排列的开关。矩阵式键盘矩阵式键盘为了减少键盘与单片机接口时所占用I/O线的数目,在键数较多时,通常都将键盘排列成行列矩阵形式。每一水平线(行线)与垂直线(列线)的交叉处通过一个按

32、键来连通。将IO口分为行线和列线,按键跨接在行线和列线上,列线通过上拉电阻接正电源。利用这种结构只需N条行线和M条列线,即可组成具有NM个按键的键盘。键值:按键闭合时的数值,键模:按键代表的数值。特点:占用IO口线较少,但软件将较为复杂。矩阵按键项目设计任务为:识别矩阵按键号,并用数码管显示。矩阵按键项目设计任务为:识别矩阵按键号,并用数码管显示。矩阵按键项目的程序设计如下。#include#define uchar unsigned char /unsigned char简称为ucharvoid delay(uchar);/延时函数声明uchar led=0 x3f,0 x6,0 x5b,0

33、 x4f,0 x66,0 x6d,0 x7d,0 x7,0 x7f,0 x6f,0 x77,0 x7c,0 x39,0 x5e,0 x79,0 x71;/数码管码表void main(void)P0=led0;/数码管显示0while(1)unsigned char key;P1=0 x0f;if(P1&0 x0f)!=0 x0f)delay(10);/延时10ms,防抖if(P1&0 x0f)!=0 x0f)P1=0 xfe;/第一行switch(P1)case 0 xee:/第一行第一列key=0;break;case 0 xde:key=1;break;case 0 xbe:key=2;

34、break;case 0 x7e:key=3;break;P1=0 xfd;/第二行switch(P1)case 0 xed:/第二行第一列key=4;break;case 0 xdd:key=5;break;case 0 xbd:key=6;break;case 0 x7d:key=7;break;P1=0 xfb;/第三行switch(P1)case 0 xeb:/第三行第一列key=8;break;case 0 xdb:key=9;break;case 0 xbb:key=10;break;case 0 x7b:key=11;break;P1=0 xf7;/第四行switch(P1)ca

35、se 0 xe7:/第四行第一列key=12;break;case 0 xd7:key=13;break;case 0 xb7:key=14;break;case 0 x77:key=15;break;P1=0 x0f;while(P1&0 x0f)!=0 x0f);/释放按键P0=ledkey;/显示键号动手做动手做proteus仿真仿真 2.7 LCD1602显示项目设计显示项目设计项目 由于液晶分子不会发光,需要借助背光来辅助,而驱动单元控制液晶分子的偏转角度,可以使光线亮度透过程度不同,从而呈现出不同的黑白灰阶层次,这样我们就能看到具备层次感的画面。光线在向外透射,将会透过彩色滤光片,

36、这是液晶面板出“色”的组件。彩色滤光片上R.G.B(红.绿.蓝)三个子元素为一组,对应液晶上的一个像素,而彩色滤光片上子元素的不同调节,就会调节出该像素上的颜色,众多像素的不同颜色和灰阶层次就组成了一副完整的具备生动色彩的画面。1602LCD是指显示的内容为162,即可以显示两行,每行16个字符液晶模块(显示字符和数字)。目前市面上字符液晶绝大多数是基于HD44780液晶芯片的,控制原理是完全相同的,因此基于HD44780写的控制程序可以很方便地应用于市面上大部分的字符型液晶。认识液晶显示模块认识液晶显示模块LCD1602LCD1602 在单片机的应用中,常采用1602液晶也叫1602字符型液

37、晶它是一种专门用来显示字母、数字、符号等的点阵型液晶模块 它有若干个57或者510等点阵字符位组成,每个点阵字符位都可以显示一个字符。每位之间有一个点距的间隔每行之间也有也有间隔,起到了字符间距和行间距的作用上图的左边就是字符A的字模数据,右边就是将左边数据用“”代表0,用“”代表1。字符A字模数据的代码的高4位是0100,低4位是0001,合在一起就是01000001b,即41H。它恰好与该字符的ASCII码一致,这样就给了我们很大的方便,我们可以在PC上使用P2=A这样的语法。编译后,正好是这个字符的字符代码。这些字符有:阿拉伯数字、英文字母的大小写、常用的符号、和日文假名等,每一个字符都

38、有一个固定的代码,。字符A的高4位是0100,低4位是0001,合在一起就是01000001b,即41H。它恰好与该字符的ASCII码一致,这样就给了我们很大的方便,我们可以在PC上使用P2=A这样的语法。编译后,正好是这个字符的字符代码。字符液晶能接收指令,显示相关字符,是由其背面的控制芯片控制的,液晶屏后面那个黑色的封装。市场上LCD1602绝大多数是基于HD44780液晶芯片的,HD44780内置了DDRAM、CGROM和CGRAM三个存储器。CGROM(Character Generator ROM)中存储了一些标准的 字符的字模编码,是液晶屏出厂时固化在控制芯片中的,用户不能改变其中

39、的存储内容,只能读取调用,包含有标准的ASCII码、日文字符和希腊文字符CGRAM(Character Generator RAM)是控制芯片留给用户,用以存储用户自己设计的字模编码DDRAM 是和屏幕显示区域有对应关系的一组存储器,其功能有点中转的性质。从ROM和RAM的名字我们也可以知道,ROM是早已固化在LCD1602模块中的,只能读取;而RAM是可读写的。也就是说,如果只需要在屏幕上显示已存在于CGROM中的字符,那么只须在DDRAM中写入它的字符代码就可以了;但如果要显示CGROM中没有的字符,比如摄氏温标的符号,那么就只有先在CGRAM中定义,然后再在DDRAM中写入这个自定义字符

40、的字符代码即可。LCD控制器内部有80字节的显示数据存储器DDRAM(Display Data RAM),用于存储当前要求显示的字符ASCII码,各个存储单元与显示屏上的字符位相对应,其地址和屏幕的对应关系如图所示,需要注意的是第1行DDRAM地址与第2行DDRAM地址并不连续。DDRAM相当于计算机的显存,我们为了在屏幕上显示字符,就把字符代码送入显存,这样该字符就可以显示在屏幕上了。但LCD1602的显示屏幕只有162大小,因此,并不是所有写入DDRAM的字符代码都能在屏幕上显示出来,只有写在上图所示范围内的字符才可以显示出来,写在范围外的字符不能显示出来。这样,我们在程序中可以利用“光标

41、或显示移动指令”使字符慢慢移动到可见的显示范围内,看到字符的移动效果。字符型字符型LCDLCD模块内部存储结构的划分模块内部存储结构的划分 如果在第二行的第3列显示字符E,请问应如何操作?首先定位显示字符的光标位置,根据上图的地址映射可知,字符E的显存地址为42H;然后得到字符E的显示码为45H。将显示码45H写入DDRAM的42H单元,即可显示字符E。AC 地址计数器是 DDRAM 或者 CGRAM 的地址指针引脚号引脚名称引脚功能含义1VSS地管脚(GND)2VDD+5V电源管脚(Vcc)3VEE(VO)液晶显示驱动电源(0V5V),可接电位器4RS数据和指令选择控制端,RS=0:命令/状

42、态;RS=1:数据5R/W 读写控制线,R/W=0:写操作;R/W=1:读操作6E使能信号:1为读,10为执行命令714DB0DB7数据线,可以用8位连接,也可以只用高4位连接,节约单片机资源一般来说,LCD1602有16条引脚,据说还有14条引脚的,与16脚的相比缺少了背光电源A(15脚)和地线K(16脚)。1.VSS接电源地。2.VDD接+5V。3.VEE(Vo)是液晶显示的偏压信号,可接10K的3296精密电位器,或同样阻值的可调电阻.4.RS是命令/数据选择引脚,接单片机的一个I/O,当RS为低电平时,选择命令;当RS为高电平时,选择数据。5.RW是读/写选择引脚,接单片机的一个I/O

43、,当RW为低电平时,向LCD1602写入命令或数据;当RW为高电平时,从LCD1602读取状态或数据。如果不需要进行读取操作,可以直接将其接VSS。6.E,执行命令的使能引脚,接单片机的一个I/O。7.D0D7,并行数据输入/输出引脚,可接单片机的P0P3任意的8个I/O口。如果接P0口,P0口应该接4.7K10K的上拉电阻。8.A背光正极,可接一个1047欧的限流电阻到VDD。9.K背光负极,接VSS。LCD1602显示项目硬件电路设计LCD1602显示项目程序设计在第一行第一列显示字符串“AT89S51”,在第二行第一列显示字符串“LCD1602”,程序设计如下。#include#defi

44、ne uchar unsigned char /unsigned char简称为ucharuchar LCDline1=AT89S51;/定义第一行的字符串uchar LCDline2=LCD1602;/定义第二行的字符串 sbit LCD_RS=P30;/P3.0为LCD_RS控制选择sbit LCD_E=P32;/P3.2为LCD_E使能端sbit LCD_RW=P31;/P3.1为LCD_RW读写选择bit LCD_Busy();/忙函数声明void LCD_write_command(uchar);/写命令函数声明void LCD_write_data(uchar);/写数据函数声明v

45、oid LCD_init();/初始化函数声明void LCD_1_line(uchar pos1,uchar*LCDline1);/第一行显示函数声明void LCD_2_line(uchar pos2,uchar*LCDline2);/第二行显示函数声明void delay(uchar);/延时函数声明/*主程序*/void main(void)LCD_init();LCD_1_line(0 x00,LCDline1);/第一行显示LCD_2_line(0 x00,LCDline2);/第二行显示while(1);/*忙检测函数*/bit LCD_Busy()bit LCD_Busy;LC

46、D_RS=0;LCD_RW=1;LCD_E=1;delay(1);LCD_Busy=(bit)(P0&0 x80);/取LCD数据首位,即忙信号位LCD_E=0;return LCD_Busy;/*写命令函数*/void LCD_write_command(uchar cmd)while(LCD_Busy();/等待显示器忙检测完毕delay(1);LCD_RS=0;LCD_RW=0;P0=cmd;delay(1);LCD_E=1;delay(1);LCD_E=0;/*写数据函数*/void LCD_write_data(uchar dat)while(LCD_Busy();/等待显示器忙检测

47、完毕delay(1);LCD_RS=1;LCD_RW=0;P0=dat;delay(1);LCD_E=1;delay(1);LCD_E=0;/*初始化函数*/void LCD_init()LCD_write_command(0 x38);/162,57点阵,8位delay(1);LCD_write_command(0 x01);/清屏delay(1);LCD_write_command(0 x06);/光标右移,字符不移 delay(1);LCD_write_command(0 x0f);/显示开,有光标,光标闪烁delay(1);/*显示第一行字符*/void LCD_1_line(ucha

48、r pos1,uchar*LCDline1)uchar i=0;LCD_write_command(0 x80+pos1);/在第一行pos1位显示while(LCDline1i!=0)/显示首行字符串LCD_write_data(LCDline1i);i+;delay(1);/*显示第二行字符*/void LCD_2_line(uchar pos2,uchar*LCDline2)uchar i=0;LCD_write_command(0 x80+0 x40+pos2);/在第二行pos2位显示while(LCDline2i!=0)/显示第二行字符串LCD_write_data(LCDline

49、2i);i+;delay(1);序号指令RSR/WD7D6D5D4D3D2D1D01清显示00000000012光标返回000000001*3置输入模式00000001I/DS4显示开/关控制0000001DCB5光标或字符移位000001S/CR/L*6置功能00001DLNF*7置字符发生存贮器地址0001字符发生存贮器地址8置数据存贮器地址001显示数据存贮器地址9读忙标志或地址01BF计数器地址10写数到CGRAM或DDRAM)10要写的数据内容11从CGRAM或DDRAM读数11读出的数据内容字符型字符型LCDLCD模块控制命令字的使用模块控制命令字的使用 功能:清除液晶显示器,即将

50、DDRAM的内容全部填入空白的ASCII码20H;光标归位,即将光标撤回液晶显示屏的左上方;将地址计数器(AC)的值设为0。功能:,光标、画面回位。把光标撤回到显示器的左上方;把地址计数器(AC)的值设置为0;保持DDRAM的内容不变。设定每次定入一位数据后光标的移位方向,并且设定每次写入的一个字符是否移动。参数设定的情况如下所示:I/D:0=写入新数据后光标左移;1=写入新数据后光标右移。S:0=写入新数据后显示屏不移动,1=写入新数据后显示屏整体平移1个字。功能:设置显示、光标及闪烁开、关。参数设定的情况如下:D:0=显示功能关;1=显示功能开。C:0=无光标;1=有光标。B:0=光标闪烁

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 大学
版权提示 | 免责声明

1,本文(《单片机应用技术》课件第2章单片机输入输出应用.ppt)为本站会员(momomo)主动上传,163文库仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。
2,用户下载本文档,所消耗的文币(积分)将全额增加到上传者的账号。
3, 若此文所含内容侵犯了您的版权或隐私,请立即通知163文库(发送邮件至3464097650@qq.com或直接QQ联系客服),我们立即给予删除!


侵权处理QQ:3464097650--上传资料QQ:3464097650

【声明】本站为“文档C2C交易模式”,即用户上传的文档直接卖给(下载)用户,本站只是网络空间服务平台,本站所有原创文档下载所得归上传人所有,如您发现上传作品侵犯了您的版权,请立刻联系我们并提供证据,我们将在3个工作日内予以改正。


163文库-Www.163Wenku.Com |网站地图|