




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、第十章STC单片机与I/O外部设备接口 10.1 STC单片机与键盘接口10.2 STC单片机与LED数码管接口10.3 STC单片机与 L CD显示器接口10.4 小结10.5 总结10.1 STC单片机与键盘接口10.1.1 键盘接口工作原理键盘是由若干个按键组成的STC单片机输入外部设备,可以实现STC单片机输入数据和传达命令等功能,是人工干STC单片机的重要手段之一。1.1.键盘的分类键盘的分类(1)编码键盘:编码键盘:由硬件逻辑电路完成必要的识别工作与可靠性措施。每按一次键,键盘自动提供被按键的读数,同时产生一选通脉冲通知微处理器,并且还具有反弹跳和同时按键保护功能。这种键盘易于使用
2、,但硬件比较复杂。(2)非编码键盘非编码键盘:只简单地提供键盘的行列与矩阵,其它功能,如按键识别、按键释放等仅靠软件来完成,故硬件较为简单,但占用CPU较多时间。2. 按键介绍按键介绍常用的按键有三种3、柔性按键是近年来迅速发展的一种新型按键,可以分为凸球型和平面型两种。凸球型动作幅度明显,触感较强,富有立体感,但制造工艺相对复杂;平面型幅度微小,触感较弱,但工艺简单,寿命长。柔性按键最大特点是防尘、防潮、耐蚀,外形美观,装嵌方便。而且按键的外形和面板的布局、色彩、键距可按照整机的要求来设计。3.键盘系统设计键盘系统设计(1)确定键盘编码方案:采用编码键盘或非编码键盘。(2)确定键盘工作方式:
3、采用中断方式或查询方式获取输入键操作信息。 (3)设计硬件电路。 (4)非编码键盘系统中,键闭合和键释放的信息获取,键抖动的消除,键值查找及一些保护措施的实施等任务,均由软件来完成。4. 非编码键盘的键输入程序应完成的基本任务 (1)监测有无键按下:键的闭合与否,反映在电压上就是呈现出高电平或低电平,所以通过对电平高低状态的检测,便可确认按键是否按下。 (2)判断是哪个键按下:读入I/O口输入线的状态,通过判断I/O输入线是否为低电平就很容易识别出哪个键被按下。 (3) 完成按键处理任务。5.从电路或软件设计角度应解决的问题从电路或软件设计角度应解决的问题(1)为什么有抖动 抖动时间的长短由按
4、键的机械特性决定,一般为510ms。通常我们手动按下键然后立即释放,这个动作中稳定闭合的时间超过20ms。抖动过程引起电平信号的波动,有可能令单片机误解为多次按键操作,从而引起误处理。(2)如何消除抖动硬件消抖硬件消抖:硬件消抖可靠性高,对于电路较为简单的单片机运用系统中采用硬件消除抖动将提高电路的稳定性和可靠性。硬件消抖电路如图 软件消抖:软件消抖:采用软件延时的方法进行消抖,在第一次检测到有键按下时,执行一段延时10ms的子程序后,再确认电平是否仍保持闭合状态电平(低电平),如果保持闭合状态电平,则确认真正有键按下。当按键松开时,由低电平变为高电平,执行一段延时10ms的子程序后,再次检测
5、是否为高电平。若是高电平,则说明按键确实已经松开。5.从电路或软件设计角度应解决的问题从电路或软件设计角度应解决的问题(1) 如何实现串键的保护措施 通常采取的策略:单键按下有效,多键同时按下无效(2) 如何处理连击现象 为了消除连击,使得一次按键只产生一次键功能的执行(不管一次按键持续的时间多长,仅采样一个数据)必须实行对按键释放的处理。否则的话,键功能程序的执行次数将由按键时间决定。10.1.2 键盘的工作方式键盘的工作方式(1)编程扫描方式编程扫描方式是利用单片机空闲时刻,调用键盘扫描子程序,反复扫描键盘,来响应键盘的输入请求。(2)定时扫描方式定时扫描方式是单片机每隔一段时间对键盘扫描
6、一次。通常利用单片机内定时器产生的定时中断,进入中断子程序对键盘进行扫描,在有按键按下时识别出该按键。(3)中断查询方式中断查询方式是单片机在只有在键盘有键按下时,才执行键盘扫描程序,如无键按下,单片机将不理睬键盘。 这三种工作方式可以让单片机忙于各项工作任务时,兼顾键盘的输入。10.1.3 键盘接口硬件电路及其程序设计行线:P3.0-P3.3列线:P3.4-P3.710.1.3 键盘接口硬件电路及其程序设计仿真效果图设计仿真效果图设计按下键盘0,此时显示0按下键盘9,此时显示9按下键盘16,显示F10.1.3 键盘接口硬件电路及其程序设计键盘扫描流程图键盘扫描流程图10.1.3 键盘接口硬件
7、电路及其程序设计按键扫描示例程序按键扫描示例程序#include /52系列单片机头文件#define uchar unsigned char#define uint unsigned int /sbit dula=P26; /sbit wela=P27; /uchar i=100;uchar temp,key;/*延时函数*/void delay(unsigned char i)uint j,k;for(j=i;j0;j-) for(k=125;k0;k-);uchar code table=0 x3f,0 x06,0 x5b,0 x4f,0 x66,0 x6d,0 x7d, 0 x07,0
8、 x7f,0 x6f,0 x77,0 x7c,0 x39,0 x5e,0 x79,0 x71;/*主函数*/void main() dula=0; wela=0; while(1) P3=0 xfe;/第0行输出低电平 temp=P3;/读键值 temp=temp&0 xf0;/保存列植 if(temp!=0 xf0)/有键按下 delay(10);/延时消抖if(temp!=0 xf0)/有键按下 temp=P3; /读键值 switch(temp) case 0 xee: key=0; break; case 0 xde: key=1; break; case 0 xbe: key=2;
9、break; case 0 x7e: key=3; break; while(temp!=0 xf0) /按键释放确认 temp=P3; temp=temp&0 xf0; display(key); /键释放,调显示函数 P3=0 xfd; /第1行输出低电平 temp=P3; /读键值 temp=temp&0 xf0;/保存列植 if(temp!=0 xf0)/有键按下 delay(10);/延时消抖if(temp!=0 xf0) temp=P3; /读键值 switch(temp)/判断键值 case 0 xed: key=4; break; case 0 xdd: key=5; brea
10、k; case 0 xbd: key=6; break; case 0 x7d: key=7; break; while(temp!=0 xf0) /按键释放确认 temp=P3; /读键值 temp=temp&0 xf0; display(key); /键释放,调显示函数 P3=0 xfb; /第2行输出低电平 temp=P3; /读键值 temp=temp&0 xf0;f(temp!=0 xf0) delay(10); if(temp!=0 xf0)if(temp!=0 xf0) temp=P3; /读键值 switch(temp) case 0 xeb: key=8; break; ca
11、se 0 xdb: key=9; break; case 0 xbb: key=10; break; case 0 x7b: key=11; break; while(temp!=0 xf0) /按键释放确认 temp=P3; /读键值 temp=temp&0 xf0; display(key); /键释放,调显示函数 P3=0 xf7; /第3行输出低电平 temp=P3; /读键值 temp=temp&0 xf0; if(temp!=0 xf0) delay(10); if(temp!=0 xf0) temp=P3; /读键值 switch(temp) case 0 xe7: key=12
12、; break; case 0 xd7: key=13; break; case 0 xb7: key=14; break; case 0 x77: key=15; break; while(temp!=0 xf0) /按键释放确认 temp=P3; /读键值 temp=temp&0 xf0; display(key); /键释放,调显示函数 void display(key)P1=tablekey;10.2 STC单片机与LED数码管的接口10.2.1 数码管的结构与分类七段数码管八段数码管(1)按段数分:(2)按发光二极管单元连接方式分:共阴极共阳极10.2.2 数码管的工作原理数码管工作
13、方式有两种分静态显示驱动和动态显示驱动。(1)静态驱动静态驱动(直流驱动)是指每个数码管的每一个段码都由一个单片机的I/O口进行驱动,或者使用如BCD码二十进位转换器进行驱动。静态驱动的优点是编程简单,显示亮度高,缺点是占用I/O口多。如驱动5个数码管静态显示则需要5840根I/O口来驱动,要知道一个STC89C52单片机可用的I/O口才32个,故实际应用时必须增加驱动器进行驱动,但增加了硬体电路的复杂性。 (2)动态显示驱动)动态显示驱动目前是单片机中应用最为广泛的一种显示方式之一,动态驱动是将所有数码管的8个显示笔划“a,b,c,d,e,f,g,dp”的同名端连在一起,另外为每个数码管的公
14、共极COM增加位选来控制电路,位选由各自独立的I/O线控制。当单片机输出字形码时,所有数码管都接收到相同的字形码,但究竟是那个数码管会显示出字形,取决于单片机对位选通COM端电路的控制,所以我们只要将需要显示的数码管的位选通控制打开,该位就显示出字形,没有选通的数码管就不会亮。10.2.3 数码管接口实例分析1、液晶、液晶1602仿真仿真(1)先画出原理图(2)烧程序后显示2、按键扫描流程图、按键扫描流程图3、数码管动态显示示例程序、数码管动态显示示例程序:#include #define uchar unsigned char#define uint unsigned int sbit du
15、la=P26;/段选信号的锁存器控制sbit wela=P27;/位选信号的锁存器控制uchar code wei=0 xfe,0 xfd,0 xfb,0 xf7,0 xef,0 xdf;/数码管各位的码表uchar code duan=0 x3f,0 x06,0 x5b,0 x4f,0 x66,0 x6d;/0-5的码表void delay(unsigned int i)uint m,n;for(m=i;m0;m-)for(n=90;n0;n-);void main()uchar num;while(1)for(num=0;num6;num+)P0=weinum; wela=1;wela=0
16、;dula=0;P0=duannum; dula=1;delay(2); /时间间隔短,这是关键(所谓的同时显示,只是间隔较短而已,/利用人眼的余辉效应,觉得每个数码管都一直在亮)。 10.3 STC单片机与LCD显示器的接口本节主要介绍LCD1602和LCD12864,它们两者都是具有代表性液晶,生活上很多地方都用的到它们,同时易于掌握,比较适合初学者学习液晶编程。10.3.1 LCD显示器简介10.3.2 STC单片机与1602液晶显示器的接口及软件编程10.3.3 STC单片机与12864液晶显示的接口及软件编程10.3.1 LCD显示器简介LCD显示器主要工作原理是以电流刺激液晶分子产
17、生点、线、面并配合背部灯管构成画面,并且能够显示诸如文字、曲线、图形、动画等信息。STC单片机系统中应用LCD作为输出器件的优点: 显示质量高 数字式接口 体积小、重量轻 功耗低1. 液晶显示器基本原理液晶显示器基本原理液晶显示器原理是利用液晶的物理特性,通过电压对其显示区域进行控制,有电就有显示,这样即可以显示出图形。液晶显示器具有厚度薄、适用于大规模集成电路直接驱动、易于实现全彩色显示的特点,目前已经被广泛应用在电脑、数字摄像机、PDA移动通信工具等众多领域。2. 液晶显示器的分类液晶显示器的分类按其显示方式分:字段型点阵字符型点阵图形型等按显示颜色分:黑白显示多灰度、有彩色显示等按驱动方
18、式分:静态驱动(Static)单纯矩阵驱动(Simple Matrix)主动矩阵驱动(Active Matrix)3. 液晶显示器各种图形的显示原理液晶显示器各种图形的显示原理(1)线段的显示 点阵图形式液晶由MN个显示单元组成,假设LCD显示屏有64行,每行有128列,每8列对应1字节的8位,即每行有16个字节,共168=128个点组成,屏上6416个显示单元与显示RAM区1024字节相对应,每一字节的内容和显示屏上相应位置的亮暗对应。例如屏的第一行的亮暗由RAM区的000H00FH的16字节的内容决定,当(000H)=FFH时,则屏幕的左上角显示一条短亮线,长度为8个点;当(3FFH)=F
19、FH时,则屏幕的右下角显示一条短亮线;当(000H)=FFH,(001H)=00H,(002H)=FFH,(00EH)=FFH,(00FH)=00H时,则在屏幕的顶部显示一条由8段亮线和8条暗线组成的虚线。(2)字符的显示: 用LCD显示一个字符时比较复杂,因为一个字符由68或88点阵组成,既要找到和显示屏幕上某几个位置对应的显示RAM区的8字节,还要使每字节的不同位为“1”,其它的为“0”,为“1”的点亮,为“0”的不亮。这样一来就组成某个字符。但对于内带字符发生器的控制器来说,显示字符就比较简单了,可以让控制器工作在文本方式,根据在LCD上开始显示的行列号及每行的列数找出显示RAM对应的地
20、址,设立光标,在此送上该字符对应的代码即可。(3)汉字的显示: 汉字的显示一般采用图形的方式,事先从微机中提取要显示的汉字的点阵码(一般用字模提取软件)。每个汉字占32B,分左右两半,各占16B,左边为1、3、5右边为2、4、6可找出显示RAM对应的地址,设立光标,送上要显示的汉字的第一个字节,光标位置加1;再送上第二个字节,换行并且按列对齐(两列),依次再送上第三个字节直到32B显示完就可以在LCD上得到一个完整的汉字。LCD1602液晶每行可显示16个字符,总共可显示两行,采用标准的14脚(无背光)或16脚(带背光)接口,各引脚接口说明如表10-1所示:表10-1 LCD1602引脚接口说
21、明4. 液晶显示器介绍液晶显示器介绍(1)LCD1602液晶命令(3)1602字符型LCM的特性(增加内容) 内部具有字符发生器ROM(CGROM),即字符库。可显示192个57点阵字符,见图 。由该字符库可看出LCM显示的数字和字母部分的代码值,恰好与ASCII码表中的数字和字母相同。所以在显示数字和字母时,只需向LCM送入对应的ASCII码即可。模块内有64字节的自定义字符RAM(CGRAM),用户可自行定义8个57点阵字符。 模块内有80字节的数据显示存储器(DDRAM)。4647图 ROM字符库的内容2. LCM的引脚16个引脚,也有少数的LCM为14个引脚,其中包括8条数据线、3条控
22、制线和3条电源线,见表10-15。通过单片机写入模块的命令和数据,就可对显示方式和显示内容做出选择。483命令格式及功能说明(1)内部寄存器RS位和R/W引脚上的电平决定对寄存器的选择和读/写,而DB7DB0决定命令功能。49WW(2)命令功能说明下面介绍可写入命令寄存器的11个命令。 清屏(01H)。格式如下:功能:清除屏幕显示,并给地址计数器AC置“0”。 返回(02H或03H)。格式如下:功能:置DDRAM(显示数据RAM)及显示RAM的地址为“0”,显示返回到原始位置。50WW 输入方式设置。(04H,05H,06H,07H)格式如下:功能:设置光标的移动方向,并指定整体显示是否移动。
23、其中:I/D=1,为增量方式;I/D=0,为减量方式;如S=1,表示移位;如S=0,表示不移位 显示开关控制。(08H,09H,0AH,0BH,0CH,0DH,0EH,0FH)格式如下:51WW功能:D位(DB2)控制整体显示的开与关,D=1,开显示;D=0,则关显示。C位(DB1)控制光标的开与关,C=1,光标开;C=0,则光标关。B位(DB0)控制光标处字符闪烁,B=1,字符闪烁;B=0,字符不闪烁。 光标移位。格式如下:功能:移动光标或整体显示,DDRAM中内容不变。其中:S/C=1时,显示移位;S/C=0时,光标移位。R/L=1时,向右移位,R/L=0时,向左移位。52W 功能设置。命
24、令格式如下:功能:DL位设置接口数据位数,DL=1为8位数据接口;DL=0为4位数据接口。N 位设置显示行数,N=0单行显示;N=1 双行显示。F位设置字型大小,F=1为510点阵,F=0 为57点阵。例如:命令字:38H(8位数据口,双行显示,字型为57点阵。)53W CGRAM(自定义字符RAM)地址设置。(40H-7FH)格式如下功能:设置CGRAM的地址,地址范围为063。 DDRAM(数据显示存储器)地址设置(80H-FFH)。格式如下:功能:设置DDRAM的地址,地址范围为0127。 读忙标志BF及地址计数器。(忙,地址计数器为0:80H)格式如下:54WW功能:BF位为忙标志。B
25、F=1,表示忙,此时LCM不能接收命令和数据BF=0,表示LCM不忙,可接收命令和数据。AC位为地址计数器的值,范围为0127。 向CGRAM/DDRAM写数据。格式如下:功能:将数据写入CGRAM或DDRAM中,应与CGRAM或DDRAM地址设置命令结合使用。从CGRAM/DDRAM中读数据。格式如下:功能:从CGRAM或DDRAM中读出数据,应与CGRAM或DDRAM地址设置命令结合使用。55WW (3)有关说明 显示位与DDRAM地址的对应关系,如表10-17所示。56W注意:40H是第2行的起始地址。 标准字符库。图10-21所示为字符库的内容、字符码和字型的对应关系。 字符码(DDR
26、AM DATA)、CGRAM地址与自定义点阵数据(CGRAM数据)之间的关系,如表10-18所示。575*7点阵(2)LCD1602初始化 延时15mS 写指令38H(不检测忙信号) 延时5mS 写指令38H(不检测忙信号) 延时5mS 写指令38H(不检测忙信号) 以后每次写指令、读/写数据操作均需要检测忙信号 写指令38H:显示模式设置(8位数据接口、双行显示 写指令08H:显示关闭(关显示、关光标、不闪烁) 写指令01H:显示清屏 写指令06H:显示光标移动设置(增量方向,光标不移动) 写指令0CH:显示光标设置(开显示,关光标,不闪烁) 12864A-1汉字图形点阵液晶显示模块,可显示
27、汉字及图形,内置8192个中文汉字(1616点阵)、128个字符(816点阵)及64256点阵。(3)LCD12864液晶引脚1 VSS模块的电源地2 VDD模块的电源正端3 V0LCD驱动电压输入端4 RS(CS)并行的数据/指令选择信号;串行的片选信号5 R/W(SID)并行的读/写选择信号;串行的数据口6 E/(CLK)并行的使能信号/串行的同步时钟7 DB0数据引脚08 DB1数据引脚19 DB2数据引脚210DB3数据引脚3(4)LCD12864液晶引脚11 DB0数据引脚1112 DB0数据引脚1213 DB0数据引脚1314 DB0数据引脚1415PSB并/串行接口选择:H-并行
28、;L-串行16NC空脚17RET复位 低电平有效18NC空脚19LED_A背光源正极(LED+5V) LED_K背光源负极(LED-OV)看表10-3(5)LCD12864液晶常用控制指令介绍(共有18条指令,看书)(5)LCD12864液晶设定位置指令介绍(共有18条指令,看书)(5)LCD12864液晶常用控制指令介绍(共有18条指令,看书)10.3.2 STC单片机与1602液晶显示的接口及软件编程1、液晶、液晶1602仿真仿真(1)先画出原理图单片机:P0.0-P0.7链接LCD的数据线P3.4链接LCD并行的使能信号E;串行的同步时钟P3.5链接LCD的并行的指令/数据选择信号;R/
29、SP3.6链接LCD的R/W(2)烧程序后显示2、液晶、液晶1602程序程序#include#define uchar unsigned char#define uint unsigned int sbit lcden=P34;sbit lcdrs=P35;sbit lcdrw=P36;void delayms(uint z)uint x,y;for(x=0;xz;x+)for(y=0;y110;y+);/*液晶显示模块*/void write_com(uchar com)/写指令lcdrs=0;/RS=0命令寄存器R/Wlcden=0;/E=0P0=com;delayms(5);lcden=
30、1;/E=1delayms(5);lcden=0;/E=0,下降沿使能void write_data(uchar date)/写数据lcdrs=1;/RS=1数据寄存器R/Wlcden=0;/E=0P0=date;delayms(5);lcden=1;/E=1delayms(5);lcden=0;/E=0,下降沿使能/*初始化1602液晶*/void init_1602()dula=0;wela=0;/关闭数码管显示;仅用于开发板lcden=0;lcdrw=0;write_com(0 x38);/显示模式设置write_com(0 x0c);/00001DCB开显示,不显示光标,不闪烁writ
31、e_com(0 x06);/000001NS读/写字符后地址指针加一且光标加一write_com(0 x01);/清屏write_com(0 x80);/设置显示初始坐标delayms(5);/*液晶上显示一个百位数*/void write_bai(uchar add,uchar dat)uchar bai,shi,ge;bai=dat/100;shi=dat%100/10;ge=dat%10;write_com(0 x80+add);/显示的起始地址write_data(0 x30+bai);/写百位数的ASCII码write_data(0 x30+shi);/写十位数的ASCI码write
32、_data(0 x30+ge); /写个位数的ASCII码/*液晶上显示一个十位数*/void write_shi(uchar add,uchar dat)uchar shi,ge;shi=dat/10;ge=dat%10;write_com(0 x80+add); /显示的起始地址write_data(0 x30+shi); /写十位数的ASCII码write_data(0 x30+ge); /写个位数的ASCII码/*主函数*/void main()init_1602();while(1)write_bai(1,100);write_shi(5,10);10.3.3 STC单片机与1286
33、4液晶显示的接口及软件编程1、液晶液晶12864显示仿真显示仿真(1)先画出原理图(1)烧程序后显示2、液晶、液晶12864显示程序示例显示程序示例#include #define uchar unsigned char#define uint unsigned int/* 端口定义*/#define LCD_data P0 /数据口sbit LCD_RS = P35; /寄存器选择输入 sbit LCD_RW = P36; /液晶读/写控制sbit LCD_EN = P34; /液晶使能控制sbit LCD_PSB = P37; /串/并方式控制/*显示字符定义*/uchar code di
34、s0 = 风萧萧兮; uchar code dis1 = 易水寒;uchar code dis2 = 壮士一去兮;uchar code dis3 = 不复返;void delay_1ms(uint x) uint i,j; for(j=0;jx;j+) for(i=0;i110;i+); /*/*写数据/指令到LCD */*RS=L,RW=L,E=高脉冲,D0-D7=指令码。 */*/void write_cmd(uchar cmd) LCD_RS = 0; LCD_RW = 0; LCD_EN = 0; P0 = cmd;delay_1ms(5); LCD_EN = 1;delay_1ms(5); LCD_EN = 0; /*/*写显示数据到LCD */*RS=H,RW=L,E=高脉冲,D0-D7=数据。 */*/void write_dat(uchar dat) LCD_RS = 1; LCD_RW = 0; LCD_EN = 0; P0 = dat; delay_1
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- CAB 1028-2014地毯复合型汽车脚垫
- CAB 1026-2014汽车配件用品知名品牌评定方法
- 轮胎企业绿色采购政策与供应链优化考核试卷
- 2024年高密度电阻率仪资金需求报告代可行性研究报告
- 数据库设计中的对象关系映射技术试题及答案
- 网络文学隔音写作环境租赁协议书
- 2025年中国保健按摩椅行业市场前景预测及投资价值评估分析报告
- 高端私人飞机消毒清洁解决方案租赁协议书
- 2025年中国半球谐振陀螺仪行业市场前景预测及投资价值评估分析报告
- 智能家居设备全国代理及品牌合作授权合同
- GA∕T 1729-2020 保安防卫棍-行业标准
- 水电站扩建工程砂石加工系统施工组织设计
- 蒙牛冰淇淋经销商管理制度
- 振动测量评价标准介绍
- 配方法练习题
- 外协出入库流程
- 复习:金属的化学性质
- 公路隧道斜井与正洞交叉口施工方法
- 出库单样本12623
- 卫生保洁检查表
- 年产10万吨氯乙烯工艺设计(共53页)
评论
0/150
提交评论