




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
本章内容单片机与LED数码管接口LED大屏幕显示器和接口字符LCD液晶显示和接口单片机与键盘接口第5章显示和键盘接口技术单片机与LED数码管接口LED数码管结构及原理
共阴极数码管仅当段位接高电平,阴极接低电平时,相应位的LED才导通发光abcdefgbp共阳极数码管仅当段位接低电平,阳极接高电平时,相应位的LED才导通发光abcdefgbpVcc七段数码管的段位控制agdbcefdpdpgfedcba
00111111
七段数码管的段位控制agdbcefdpdpgfedcba
00000110
七段数码管的段位控制agdbcefdpdpgfedcba
01011011
七段数码管的段位控制agdbcefdpdpgfedcba
00111111
七段数码管的段位控制agdbcefdpdpgfedcba
01100110
七段数码管的段位控制agdbcefdpdpgfedcba
01101101
七段数码管的段位控制agdbcefdpdpgfedcba
01111101
七段数码管的段位控制agdbcefdpdpgfedcba
00000111
七段数码管的段位控制agdbcefdpdpgfedcba
01111111
七段数码管的段位控制agdbcefdpdpgfedcba
01100111
七段数码管的段位控制agdbcefdpdpgfedcba
01110111
七段数码管的段位控制agdbcefdpdpgfedcba
01111100
七段数码管的段位控制agdbcefdpdpgfedcba
00111001
七段数码管的段位控制agdbcefdpdpgfedcba
01011110
七段数码管的段位控制agdbcefdpdpgfedcba
01111001
七段数码管的段位控制agdbcefdpdpgfedcba
01110001
七段数码管与段位控制代码03FH106H25BH34FH466H56DH67DH707H87FH96FHA77Hb7CHC39Hd5EHE79HF71Habcdefg单片机与LED数码管接口LED数码管字型编码若将数值0送至单片机的P1口,数码管上不会显示数字“0”。显然,要使数码管显示出数字或字符,直接将相应的数字或字符送至数码管的段控制端是不行的,必须使段控制端输出相应的字形编码。将单片机P1口的P1.0、P1.1…P1.7八个引脚依次与数码管的a、b…f、dp八个段控制引脚相连接。如果使用的是共阳极数码管,COM端接+5V,要显示数字“0”,则数码管的a、b、c、d、e、f六个段应点亮,其它段熄灭,需向P1口传送数据11000000B(C0H),该数据就是与字符“0”相对应的共阳极字型编码。若共阴极的数码管COM端接地,要显示数字“1”,则数码管的b、c两段点亮,其他段熄灭,需向P1口传送数据00000110(06H),这就是字符“1”的共阴极字型码了。单片机与LED数码管接口LED静态显示静态显示是指数码管显示某一字符时,相应的发光二极管恒定导通或恒定截止。这种显示方式的各位数码管的公共端恒定接地(共阴极)或+5V(共阳极)。每个数码管的八个段控制引脚分别与一个八位I/O端口相连。只要I/O端口有显示字型码输出,数码管就显示给定字符,并保持不变,直到I/O口输出新的段码。
单片机与LED数码管接口LED静态显示单片机与LED数码管接口LED动态显示单片机与LED数码管接口LED动态显示动态显示是一种按位轮流点亮各位数码管的显示方式,即在某一时段,只让其中一位数码管“位选端”有效,并送出相应的字型显示编码。此时,其它位的数码管因“位选端”无效而都处于熄灭状态;下一时段按顺序选通另外一位数码管,并送出相应的字型显示编码,依此规律循环下去,即可使各位数码管分别间断地显示出相应的字符。这一过程称为动态扫描显示。
任务12LED点阵式电子广告牌控制
任务目的:
利用单片机控制一块最简单的8×8LED点阵式电子广告牌,循环显示数字0~9。小经验:在实际应用中,在每条列线上需串接一个300Ω左右的限流电阻。为提高端口带负载能力,需增加一个缓冲驱动器。开始Y设置显示字符设置循环扫描次数设置行、列初值行值和列值分别送相应窗口延时1ms行值左移1位更新列号加1更新8行显示完成?循环扫描完?10个字符扫描完?YYNNN//功能:在8×8LED点阵上循环显示数字0~9#include"REG51.H"voiddelay1ms(); //延时约1ms函数声明voidmain(){unsignedcharcodeled[]={0x18,0x24,0x24,0x24,0x24,0x24,0x24,0x18, //00x00,0x18,0x1c,0x18,0x18,0x18,0x18,0x18, //10x00,0x1e,0x30,0x30,0x1c,0x06,0x06,0x3e, //20x00,0x1e,0x30,0x30,0x1c,0x30,0x30,0x1e, //30x00,0x30,0x38,0x34,0x32,0x3e,0x30,0x30, //40x00,0x1e,0x02,0x1e,0x30,0x30,0x30,0x1e, //50x00,0x1c,0x06,0x1e,0x36,0x36,0x36,0x1c, //60x00,0x3f,0x30,0x18,0x18,0x0c,0x0c,0x0c, //70x00,0x1c,0x36,0x36,0x1c,0x36,0x36,0x1c, //80x00,0x1c,0x36,0x36,0x36,0x3c,0x30,0x1c}; //9unsignedcharw;unsignedinti,j,k,m;while(1){for(k=0;k<10;k++) //字符个数控制变量{for(m=0;m<400;m++) //每个字符扫描显示400次,控制每个字符显示时间{w=0x01; //行变量w指向第一行
j=k*8; //指向数组led的第k个字符第一个显示码下标for(i=0;i<8;i++){P1=w; //行数据送P1口P0=led[j]; //列数据送P0口delay1ms();w<<=1; //行变量左移指向下一行j++; //指向数组中下一个显示码}}}}}//函数名:delay1ms//函数功能:采用软件实现延时约1ms//形式参数:无//返回值:无voiddelay1ms(){unsignedchari;for(i=0;i<0x10;i++);}LED大屏幕显示器和接口
LED大屏幕显示器结构及原理LED点阵显示器是把很多LED发光二极管按矩阵方式排列在一起,通过对每个LED进行发光控制,完成各种字符或图形的显示。最常见的LED点阵显示模块有5×7(5列7行),7×9(7列9行),8×8(8列8行)结构。LED点阵由一个一个的点(LED发光二极管)组成,总点数为行数与列数之积,引脚数为行数与列数之和。LED大屏幕显示器和接口
LED大屏幕显示器结构及原理LED大屏幕显示器和接口
LED大屏幕显示器结构及原理“大”字显示字型码示意图0x00,0x1c,0x06,0x1e,0x36,0x36,0x36,0x1c, //6的显示码0x000x1c0x060x1e0x360x360x360x1c0x00,0x3e,0x49,0x49,0x49,0x26,0x00,0x00, //6的显示码0x000x3e0x490x490x490x260x000x000x000x3e0x490x490x490x260x000x00LED大屏幕显示器和接口
LED大屏幕显示器结构及原理显示字符“大”的过程如下:先给第一行送高电平(行高电平有效),同时给8列送11110111(列低电平有效);然后给第二行送高电平,同时给8列送11110111,……最后给第八行送高电平,同时给8列送11111111。每行点亮延时时间为1ms,第八行结束后再从第一行开始循环显示。利用视觉驻留现象,人们看到的就是一个稳定的图形。LED大屏幕显示器和接口
LED大屏幕显示器接口LED大屏幕显示器和接口
LED大屏幕显示器扩展接口任务13字符型LCD液晶显示广告牌控制
任务要求:用单片机控制LCD162液晶模块,在第1行正中间显示“SHENZHEN”字符。//功能:LCD液晶显示程序,采用8位数据接口#include<REG51.H>#include<INTRINS.H> //库函数头文件,代码中引用了_nop_()函数//定义控制信号端口sbitRS=0xb0; //P3.0sbitRW=0xb1; //P3.1sbitE=0xb2; //P3.2//声明调用函数voidlcd_w_cmd(unsignedcharcom); //写命令字函数voidlcd_w_dat(unsignedchardat); //写数据函数unsignedcharlcd_r_start(); //读状态函数voidint1(); //LCD初始化函数voiddelay(unsignedchart); //可控延时函数voiddelay1(); //软件实现延时函数,5个机器周期voidmain() //主函数{unsignedcharlcd[]="SHENZHEN";unsignedchari;P1=0xff; //送全1到P1口int1(); //初始化LCDdelay(255);lcd_w_cmd(0x83); //设置显示位置delay(255);for(i=0;i<9;i++) //显示字符串{lcd_w_dat(lcd[i]);delay(200);}while(1); //原地踏步}//函数名:delay//函数功能:采用软件实现可控延时//形式参数:延时时间控制参数存入变量t中//返回值:无voiddelay(unsignedchart){unsignedcharj,i;for(i=0;i<t;i++)for(j=0;j<50;j++);}//函数名:delay1//函数功能:采用软件实现延时,5个机器周期//形式参数:无//返回值:无voiddelay1(){_nop_();_nop_();_nop_();}//函数名:int1//函数功能:lcd初始化//形式参数:无//返回值:无voidint1(){lcd_w_cmd(0x3c); //设置工作方式lcd_w_cmd(0x0e); //设置光标lcd_w_cmd(0x01); //清屏lcd_w_cmd(0x06); //设置输入方式lcd_w_cmd(0x80); //设置初始显示位置}//函数名:lcd_r_start//函数功能:读状态字//形式参数:无//返回值:返回状态字,最高位D7=0,LCD控制器空闲;D7=1,LCD控制器忙unsignedcharlcd_r_start(){unsignedchars;RW=1; //RW=1,RS=0,读LCD状态delay1();RS=0;delay1();E=1; //E端时序delay1();
s=P1;
//从LCD的数据口读状态delay1();E=0;delay1();RW=0;delay1();return(s); //返回读取的LCD状态字}//函数名:lcd_w_cmd//函数功能:写命令字//形式参数:命令字已存入com单元中//返回值:无voidlcd_w_cmd(unsignedcharcom){unsignedchari;do{i=lcd_r_start(); //查LCD忙操作,调用读状态字函数i=i&0x80; //与操作屏蔽掉低7位
delay(2);}while(i!=0); //LCD忙,继续查询,否则退出循环RW=0;delay1();RS=0; //RW=1,RS=0,写LCD命令字delay1();E=1; //E端时序delay1();
P1=com;
//将com中的命令字写入LCD数据口delay1();E=0;delay1();RW=1;delay(255);}//函数名:lcd_w_dat//函数功能:写数据//形式参数:数据已存入dat单元中//返回值:无voidlcd_w_dat(unsignedchardat){unsignedchari;do{ //查忙操作i=lcd_r_start(); //调用读状态字函数i=i&0x80; //与操作屏蔽掉低7位
delay(2);}while(i!=0); //LCD忙,继续查询,否则退出循环RW=0;delay1();RS=1; //RW=1,RS=0,写LCD命令字delay1();E=1; //E端时序delay1();
P1=dat;
//将dat中的显示数据写入LCD数据口delay1();E=0;delay1();RW=1;delay(255);}字符LCD液晶显示和接口
12345678910111213141516VSSVDDVORSR/WEDB0DB1ADB3DB2DB5DB4DB7DB6KLCD模块Vss:+5V电源管脚(Vcc)VDD:地管脚(GND)Vo:液晶显示驱动电源(0V~5V)字符LCD液晶显示和接口
12345678910111213141516VSSVDDVORSR/WEDB0DB1ADB3DB2DB5DB4DB7DB6KLCD模块DB0~DB7:数据线,可以用8位连接,也可以只用高4位连接,节约单片机资源,本实验中采用的是八位连接方法。字符LCD液晶显示和接口
12345678910111213141516VSSVDDVORSR/WEDB0DB1ADB3DB2DB5DB4DB7DB6KLCD模块A:背光控制正电源K:背光控制地字符LCD液晶显示和接口
12345678910111213141516VSSVDDVORSR/WEDB0DB1ADB3DB2DB5DB4DB7DB6KLCD模块单片机与LCD模块之间有四种基本操作:
写命令 读状态 写显示数据 读显示数据字符LCD液晶显示和接口
12345678910111213141516VSSVDDVORSR/WEDB0DB1ADB3DB2DB5DB4DB7DB6KLCD模块ERSR/W操作00写命令操作(初始化、光标定位等)01读状态操作(读忙标志)10写数据操作(要显示的内容)11读数据操作(可以把显示存储区中的数据反读出来)字符LCD液晶显示和接口
12345678910111213141516VSSVDDVORSR/WEDB0DB1ADB3DB2DB5DB4DB7DB6KLCD模块RS:数据和指令选择控制端,RS=0:命令/状态;RS=1:数据R/W:读写控制线,R/W=0:写操作;R/W=1:读操作E:数据读写操作控制位,E线向LCD模块发送一个脉冲,LCD模块与单片机之间将进行一次数据交换字符LCD液晶显示和接口
读状态操作状态字的最高位的BF为忙标志位,1表示LCD正在忙,0表示不忙。通过判断最高位BF的0、1状态,就可以知道LCD当前是否处于忙状态,如果LCD一直处于忙状态,则继续查询等待,否则进行下面的操作。查询忙状态程序段如下:do{i=lcd_r_start();//调用读状态函数,读取LCD状态字i&=0x80;//采用与操作屏蔽掉低7位delay(2); //延时}while(i!=0); //LCD忙,继续查询,否则退出循环字符LCD液晶显示和接口
写命令操作LCD上电时,都必须按照一定的时序对LCD进行初始化操作,主要任务是设置LCD的工作方式、显示状态、清屏、输入方式、光标位置等。
字符LCD液晶显示和接口
写命令操作voidlcd_w_cmd(unsignedcharcom){unsignedchari;do{//查LCD忙操作i=lcd_r_start(); //调用读状态字函数i=i&0x80;//与操作屏蔽掉低7位
delay(2);}while(i!=0); //LCD忙,继续查询,否则退出循环RW=0;delay1();RS=0; //RW=1,RS=0,写LCD命令字delay1();E=1; //E端时序delay1();
P1=com;
//将com中的命令字写入LCD数据口delay1();E=0;delay1();RW=1;delay(255);}字符LCD液晶显示和接口
写命令操作编号指令名称控制信号命令字D7D6D5D4D3D2D1D01清屏00000000012归home位000000001×3输入方式设置00000001I/DS4显示状态设置0000001DCB5光标画面滚动000001S/CR/L××6工作方式设置00001DLNF××7CGRAM地址设置0001A5A4A3A2A1A08DDRAM地址设置001A6A5A4A3A2A1A09读BF和AC01BFAC6AC5AC4AC3AC2AC1AC0I/D:设置设置光标移动的方向I/D=0:递增右移;I/D=1:递减左移S:设置整体显示是否移动S=0:整体不移位,S=1:整体移位D:设置显示屏是否打开D=0:显示屏关;D=1:显示屏开C:设置光标是否显示C=0:光标不出现;C=1:光标出现B:设置光标是否闪烁B=0:光标出现闪烁;B=1:光标不闪烁S/C=0,R/L=0:光标左移S/C=0,R/L=1:光标右移S/C=1,R/L=0:字符和光标左移S/C=1,R/L=1:字符和光标右移DL=1:数据长度为8位;DL=0:使用D7~D4共4位,分两次传送N=0:单行显示;N=1:双行显示F=0:5×7点阵字体;F=1:5×10点阵字体BF=0:LCD就绪;BF=1:LCD忙字符LCD液晶显示和接口
初始化操作
LCD初始工作方式设置显示状态设置清屏返回输入方式设置001DLNF**—设置单片机与LCD接口数据位数DL、显示行数N、字型FDL=1:8位、DL=0:4位;N=1:2行、N=0:1行F=1:5×10、F=0:5×7例:00111000B(38H)设置数据位数8位,2行显示,5×7点阵字符00001DCB—设整体显示开关D、光标开关C、光标位的字符闪耀BD=1:开显示;C=0:不显示光标;B=0:光标位字符不闪烁例:00001100B(0CH)打开LCD显示,光标不显示,光标位字符不闪烁清屏命令字01H,将光标设置为第一行第一列000001I/DS—设光标移动方向并确定整体显示是否移动I/D=1:增量方式右移、I/D=0:减量方式左移S=1:移位、S=0:不移位例:00000110B(06H)设置光标增量方式右移,显示字符不移动字符LCD液晶显示和接口
写数据操作
光标位置与相应命令字
列行123456789101112131415161808182838485868788898A8B8C8D8E8F2C0C1C2C3C4C5C6C7C8C9CACBCCCDCECF注:表中命令字以十六进制形式给出,该命令字就是与LCD显示位置相对应的DDRAM地址。字符LCD液晶显示和接口
voidlcd_w_dat(unsignedchardat){unsignedchari;do{ //查忙操作i=lcd_r_start(); //调用读状态字函数i=i&0x80; //与操作屏蔽掉低7位
delay(2);}while(i!=0); //LCD忙,继续查询,否则退出循环RW=0;delay1();RS=1; //RW=1,RS=0,写LCD命令字delay1();E=1; //E端时序delay1();P1=dat; //将dat中的显示数据写入LCD数据口delay1();E=0;delay1();RW=1;delay(255);}任务14具有简单控制功能的
简易秒表设计任务要求:用单片机控制2位数码管实现00~59的简易秒表,并利用3个独立式按键实现秒表的启动、停止和复位功能。//功能:00~59简易秒表程序#include<reg51.h>unsignedcharmsec,sec; //定义msec为50ms计数变量,sec为秒变量voiddelay(unsignedchari); //延时函数参见任务1程序ex1_1.c//函数名:T0_INT//函数功能:定时器0中断函数,定时50ms到,自动执行该函数,判断是否中断20次//形式参数:无//返回值:无voidT0_INT(void)interrupt1 //定时器0中断类型号为1{TH0=0x3c; //50ms定时初值TL0=0xb0;msec++; //中断次数增1if(msec==20) //中断次数到20次吗?{msec=0; //是,1秒计时到,50ms计数单元清零sec++; //秒单元加1if(sec==60) //到60秒吗?{ sec=0; //是,秒单元清零}}}voidmain() //主函数{unsignedcharled[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90}; //定义数字0~9字型显示码unsignedchartemp;TMOD=0x01; //定时器0工作方式1TH0=0x3c;TL0=0xb0;//50ms定时初值EA=1; //开总中断ET0=1; //开定时器0中断P3=0xff; //P3口做输入while(1){P2=0x01; //选中P2.0控制的数码管P1=led[sec%10]; //显示秒个位delay(10);P2=0x02; //选中P2.1控制的数码管P1=led[sec/10]; //显示秒十位delay(10);temp=~P3; //读入P3口引脚状态并取反temp=temp&0x2c; //屏蔽掉无关位,保留三位按键状态00x0xx00
if(temp==0x04) //按下停止键TR0=0; //停止计数 if(temp==0x08) //按下启动键TR0=1; //启动计数 if(temp==0x20) //按下复位键
{TR0=0;sec=0;msec=0;}}
}单片机与键盘接口a图和b图的按键为弹性按键,按下时,两触点闭合导通放开时,断开。拨动开关拨码开关单片机与键盘接口按键按照结构原理可分为两类,一类是触点式开关按键,如机械式开关、导电橡胶式开关等;另一类是无触点开关按键,如电气式按键,磁感应按键等。前者造价低,后者寿命长。按键按照接口原理可分为编码键盘与非编码键盘两类。这两类键盘的主要区别是识别键符及给出相应键码的方法。编码键盘主要是用硬件来实现对按键的识别,硬件结构复杂;非编码键盘主要是由软件来实现按键的定义与识别,硬件结构简单,软件编程量大。这里将要介绍的独立式按键和矩阵式键盘都是非编码键盘。单片机与键盘接口按键的去抖机械式按键在按下或释放时,由于机械弹性作用的影响,通常伴随有一定时间的触点机械抖动,然后其触点才稳定下来,抖动时间一般为510ms,在触点抖动期间检测按键的通与断状态,可能导致判断出错。单片机与键盘接口按键的去抖
(a)检测按键(b)释放按键按键去抖流程图单片机与键盘接口独立式按键
独立式按键电路配置灵活,软件结构简单,但每个按键必须占用一根I/O口线,因此,在按键较多时,I/O口线浪费较大,不宜采用。//功能:独立式按键程序#include"REG51.H"//函数名:delay10ms//函数功能:采用定时器1实现延时10ms//形式参数:无//返回值:无voiddelay()//定时10ms,采用定时器1,工作方式1实现{TH1=0xd8; //设置10ms定时初值TL1=0xf0; TR1=1; //启动定时器1while(!TF1); //判断10ms定时时间到TF1=0;} voidmain() //主函数{ unsignedchari;TMOD=0x10; //设置定时器1工作方式1P1=0xff; //P1口作为输入口,置全1i=0; while(1){do //循环判断是否有键按下{i=~P1; //读按键状态并取反}while(i==0);delay(); //有键按下,延时10ms去抖do{ i=~P1; //再次读按键状态并取反 }while(i==0);switch(i) //根据键值调用不同的处理函数{case0x01:key1();break; //调用按键1子函数,该函数此处省略case0x02:key2();break; //调用按键2子函数,该函数此处省略case0x04:key3();break; //调用按键3子函数,该函数此处省略case0x08:key4();break; //调用按键4子函数,该函数此处省略case0x10:key5();break; //调用按键5子函数,该函数此处省略case0x20:key6();break; //调用按键6子函数,该函数此处省略case0x40:key7();break; //调用按键7子函数,该函数此处省略
case0x80:key8();break; //调用按键8子函数,该函数此处省略default:break;}}}单片机与键盘接口矩阵式按键
通常,矩阵式键盘的列线由单片机输出口控制,行线连接单片机的输入口。单片机与键盘接口矩阵式按键
键盘编程扫描法识别按键一般应包括以下内容:(1)判别有无键按下。(2)键盘扫描取得闭合键的行、列号。(3)用计算法或查表法得到键值。(4)判断闭合键是否释放,如没释放则继续等待。(5)将闭合键的键值保存,同时转去执行该闭合键的功能。分析是否有键按下先向P1口输出0xf0(高四位列选为全1,低四位行选为全0),然后读回由于P1口输出有锁存,若无键按下,从P1口读回应该仍为0xf0,低四位行选保持全0若读回值不为0xf0,即低四位行选不为全0,说明有键按下111100001分析是哪个键按下双重循环先选定一列,再逐行扫描,获得键位置码将键位置码送到LED显示第0次扫描,P1输出0xef(11101111)01111111
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 合同范本是正规合同
- Streptomyces avermitilis腺苷甲硫氨酸合成酶的分子改造研究
- 光伏直流微电网碳化硅高压变换器拓扑及效率优化研究
- 商店收购合同范本
- 小学语文整本书阅读教学研究
- “互联网+”视角下小学语文中高年级学生写作能力的提升研究
- 商标区域使用合同范本
- 商品大豆交易合同范本
- 修路石料施工合同范本
- 修改承揽合同范本
- 脑梗合并心衰护理查房
- 妇联普法知识竞赛参考试题库300题(含答案)
- T-NAHIEM 101-2023 急诊科建设与设备配置标准
- 【绿色家园你我共建】约会春天拥抱绿色-2024年3月12日植树节主题班会(小学通用版)
- 解分式方程50题八年级数学上册
- 溶液镀膜法完整版本
- 消化道出血应急预案
- 【温州眼镜出口遭遇技术贸易壁垒的现状及对策(定量论文)15000字】
- AI技术在保险行业的应用
- 文华财经“麦语言”函数手册
- 大班数学PPT课件《实物填补数》
评论
0/150
提交评论