单片机应用技术(C语言版)第4版4.1 认识LED数码管-4.6 单片机与矩阵键盘接口课件_第1页
单片机应用技术(C语言版)第4版4.1 认识LED数码管-4.6 单片机与矩阵键盘接口课件_第2页
单片机应用技术(C语言版)第4版4.1 认识LED数码管-4.6 单片机与矩阵键盘接口课件_第3页
单片机应用技术(C语言版)第4版4.1 认识LED数码管-4.6 单片机与矩阵键盘接口课件_第4页
单片机应用技术(C语言版)第4版4.1 认识LED数码管-4.6 单片机与矩阵键盘接口课件_第5页
已阅读5页,还剩188页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

4.1认识LED数码管《单片机应用技术(C语言版)》4.1.1LED数码管的结构里程表仪器仪表倒车雷达空调电饭锅电梯实时时钟环境测控

用7段笔划构成一个“8”字结构,并将小数点处理为第8个笔划段,

分别编号为a、b、c、d、e、f、g、dp。

8个笔划段的不同组合构成了要显示的字符信息。LED数码管的显示原理

数码管的8个笔划段是用8个发光二极管构成的。

给发光二极管加上特定的正向电压,它就会发光。LED数码管的显示原理V+V-abcdefgdpabcdefgdpabcdefgdp零电压abcdefgdpcom12345109876LED数码管的内部结构共阴极abcdefgdpcom共阳极外部引脚LED数码管的种类针对应用系统的显示需求,市场上有1位、2位、3位、4位等各种不同位数的数码管显示模块。4位LED数码管显示模块的内部结构共用字段线分开每位LED的公共端作为位控线4位LED数码管显示模块的外部引脚怎样点亮数码管的某一段无论共阴极、共阳极数码管,点亮某一段的依据均为二极管的“单向导电性”;对共阴极数码管:位选:公共端COM接地;段选:某一段为高电平,则该段点亮。共阴极数码管点亮某一段GND+VCCGNDR+VCC点亮b段共阳极数码管的点亮原理位选:接VCC(高电平“1”)段选:点亮段接地(低电平“0”)+VCC00000例如:若,abedg段点亮则,显示数字“2”字型和字型码字型:要显示的数字、字符、符号等;字型码:根据需要点亮段的高低电平得到的16进制数。一般,a连接到某个I/O端口的最低位D0,dp连接到该端口的最高位D7位,例如a连接到PA.0、b连接到PA.1,依次类推。dpgfedcba共阳极(com接高电平)10100100因此,对于共阳极数码管,字型“2”所对应的字型码为10100100,即0xa4;而对于共阴极数码管,字型“2”所对应的字型码则为01011011,即0x5b;D7D6D5D4D3D2D1D0显示字符共阳极数码管共阴极数码管dpgfedcba字型码dpgfedcba字型码P0.7P0.6P0.5P0.4P0.3P0.2P0.1P0.0P0.7P0.6P0.5P0.4P0.3P0.2P0.1P0.0011000000C0H001111113FH111111001F9H0000011006H210100100A4H010110115BH310110000B0H010011114FH41001100199H0110011066H51001001092H011011016DH61000001082H011111017DH711111000F8H0000011107H81000000080H011111117FH91001000090H011011116FH字型码表显示字符共阳极数码管共阴极数码管dpgfedcba字型码dpgfedcba字型码A1000100088H0111011177HB1000001183H011111007CHC11000110C6H0011100139HD10100001A1H010111105EHE1000011086H0111100179HF100011108EH0111000171HH1000100189H0111011076HL11000111C7H0011100038HP100011008CH0111001173HR11001110CEH0011000131HU11000001C1H001111103EHY1001000191H011011106EH

10111111BFH0100000040H.011111117FH1000000080H字型码表4.1.2LED数码管静态显示什么是静态显示?静态显示:当数码管显示某一个字型时,相应笔划的发光二极管恒定发光。例如笔划b、c段恒定点亮,显示“1”例如笔划a、b、c、d、e、f段恒定点亮,显示“0”特点:亮度高一位数码管的电路连接+5VP0.0~P0.7位选:固定连接到+5V或者地;共阳极:COM端固定接+5V;共阴极:COM端固定接地;段选:连接到单片机的一个I/O口例如P0口、P1口等特点:8个段选要占用一个端口一位共阳极数码管连接实例二位数码管的电路连接51单片机段选线P0.0P0.1P0.2P0.3P0.4P0.5P0.6P0.7COM+VCCP1.0P1.1P1.2P1.3P1.4P1.5P1.6P1.7每一个数码管占用一个I/O口多位数码管的静态显示接口每一个数码管,必须占用一个端口;因此,虽然亮度高,编程简单,但是浪费I/O端口资源;当多余两个数码管后,一般就不采用静态连接的方式,而是采用动态显示的连接方法。51单片机COMCOMCOMCOMP0.0P0.1P0.2P0.3P0.4P0.5P0.6P0.7P1.0P1.1P1.2P1.3P1.4P1.5P1.6P1.7P2.0P2.1P2.2P2.3P2.4P2.5P2.6P2.7P3.0P3.1P3.2P3.3P3.4P3.5P3.6P3.7四个I/O口全部占用感谢您的观看Thanks

for

your

attention.

4.2数组的概念《单片机应用技术(C语言版)》4.2.1一维数组数组就是一组有序的、相同类型的数据集合。先定义,后使用类型名字元素个数(数组长度)数组类型数组名[常量表达式];unsignedcharled[8];intMCU_scores[15];必须用常量表达式来指定数组长度,不可以出现变量。#defineSTUDENT15unsignedintk;unsignedcharled[k];intMCU_scores[STUDENT];×√unsignedcharled[8];存储器存储器ledled[0]led+1led+2led+3led+4led+5led+6led+7led[1]led[2]led[3]led[4]led[5]led[6]led[7]led[8]×使用循环程序处理数组数组定义时初始化赋值语句初始化unsignedcharled[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};intMCU_scores[15]={85,87,87,90,92};前面5个数组元素赋初值unsignedcharled[];led[0]=0xfe;led[1]=0xfd;led[2]=0xfb;led[3]=0xf7;led[4]=0xef;led[5]=0xdf;led[6]=0xbf;led[7]=0x7f;数组就是一组有序的数据集合一个数组包含多个数组元素每个数组元素就相当于一个变量定义了一个数组,就相当于批量定义了很多个变量变量的名字都是以数组名加上下标来组成的intMCU_scores[15];MCU_scores[0]MCU_scores[1]MCU_scores[2]……MCU_scores[14]在程序中怎样使用一个定义好的数组呢?在程序中,不能直接引用整个数组中的全部元素,只能逐个使用数组元素。采用循环结构程序,来高效处理数组。intMCU_scores[15]={85,85,95,87,87,87,92,95,85,87,87,92,92,81,87,50};求平均成绩程序段求平均成绩程序段循环第1次:i=0;sum=sum+MCU_scores[0];循环第2次:i=1;sum=sum+MCU_scores[1];循环第3次:i=2;sum=sum+MCU_scores[2];……循环第15次:i=14;sum=sum+MCU_scores[14];采用数组实现流水灯控制程序4.2.2二维数组第2行第2列13级2班成绩单二维数组intscore[15][7];行数列数数组名[行][列]行和列都是从0开始数起;score[0][0],score[0][1],score[0][2],score[0][3],score[0][4],score[0][5],score[0][6],score[1][0],score[1][1],score[1][2],score[1][3],score[1][4],score[1][5],score[1][6],score[2][0],score[2][1],score[2][2],score[2][3],score[2][4],score[2][5],score[2][6],......……score[14][0],score[14][1],score[14][2],score[14][3],score[14][4],score[14][5],score[14][6],105个数组元素求学生平均成绩程序段求学生平均成绩程序段二维数组就是一个数据方阵队列二维数组的定义和初始化方法code关键字把批量不变的数据烧录到程序存储器中二维数组的引用方法是数组名加上两个下标用双重循环结构对二维数组的的数组元素进行存取和使用4.2.3字符数组字符型数据——char字符:character无符号字符型:unsignedchar,0~255有符号字符型:signedchar,-128~+127字符字符常量是指用单引号括起来的一个字符‘A’‘0’‘%’‘a’‘=‘在C语言中出现的任何符号都是西文符号‘A’בA’‘0’‘%’‘a’‘=‘存储器字节数据65483797616548379761charch[11]={‘I’,’’,’a’,’m’,’’,’h’,’a’,’p’,’p’,’y’,’!’};ch[0]=‘I’;ch[1]=‘‘;空格ch[2]=‘a’;Ch[3]=‘m’;Ch[4=‘‘;Ch[5]=‘h’;…….ch[11]=‘!’字符数组charch[11]={‘I’,’’,’a’,’m’,’’,’h’,’a’,’p’,’p’,’y’,’!’};“Iamhappy!”用双引号括起来的一串字符,叫做字符串。字符数组charch[11]={‘I’,’’,’a’,’m’,’’,’h’,’a’,’p’,’p’,’y’,’!’};“Iamhappy!”‘\0’字符串长度:12用双引号括起来的一串字符,叫做字符串。字符数组编译器自动给字符串添加结束符:’\0’charch[12]={‘I’,’’,’a’,’m’,’’,’h’,’a’,’p’,’p’,’y’,’!’,’\0’};charch[]={‘I’,’’,’a’,’m’,’’,’h’,’a’,’p’,’p’,’y’,’!’,’\0’};charch[]={“Iamhappy!”};charch[]=“Iamhappy!”;“Iamhappy!”感谢您的观看Thanks

for

your

attention.

4.3LED数码管动态显示《单片机应用技术(C语言版)》COMCOM51单片机P0.0P0.1P0.2P0.3P0.4P0.5P0.6P0.7P1.0P1.1P1.2P1.3P1.4P1.5P1.6P1.7P2.0P2.1P2.2P2.3P2.4P2.5P2.6P2.7P3.0P3.1P3.2P3.3P3.4P3.5P3.6P3.7NO!!!COMCOM什么叫动态显示动态显示:动态显示就是一种按位轮流点亮各位数码管的显示方式。即在某一时段,只让其中一位数码管“位选端”有效,并送出相应的字型显示编码。此时,其它位的数码管因“位选端”无效而都处于熄灭状态;下一时段按顺序选通另外一位数码管,并送出相应的字型显示编码,依此规律循环下去,即可使各位数码管分别间断地显示出相应的字符,动态显示也称作扫描显示方式。特点:占用端口资源少,适用于连接多个数码管动态显示的电路连接特点所有数码管相应的段选控制端并联在一起,由一个I/O端口控制

每个数码管的公共端com单独连接,由另一个I/O端口控制用同相或者反相的缓冲器来实现驱动

8同相三态缓冲器6反相驱动器8位数码管动态显示的电路连接动态显示的编程思路核心:逐位扫描显示具体操作:首先,从段选口送出某位LED的字型码;其次,从位选口送出数据,选通该位LED;保持一段延时时间。时间选择确保满足人眼的视觉暂留作用。然后,选通下一位,重复上述三个步骤,直到所有位扫描完。位选:选中第一个数码管段选:输出相应字型码

延时位选:选中第二个数码管段选:输出相应字型码

延时位选:选中最后一个数码管段选:输出相应字型码

延时1.首先,位选口选中第一个数码管,段选口送这个数码管想要显示的字型码,然后延时一段时间;2.其次,位选口选中第二个数码管,段选口送出相应的字型码,延时,。。。。。3.依次类推,直到位选口选中最后一个数码管,段选口送出最后一个数码管的字型码,延时这样,一次循环结束,每个数码管都“坐庄”被点亮一次。“轮流坐庄”的基本思路位选:选中第一个数码管段选:输出相应字型码

延时位选:选中第二个数码管段选:输出相应字型码

延时位选:选中最后一个数码管段选:输出相应字型码

延时第一个数码管

“坐庄”点亮第二个数码管

“坐庄”点亮最后一个数码管

“坐庄”点亮延时时间足够短,利用人眼的视觉暂留效应1.循环“轮流坐庄”2.保证合适的延时时间P1段选口P2:位选口字型20160726P201111111B10111111B11011111B11101111B11110111B11111011B11111101B11111110BP10x5b0x3f0x060x7d0x3f0x070x2b0x7d8位数码管动态显示实例while(1){P2=0X7F;//选中C7P1=0X5B;//字型码“2”time1ms();//延时1msP2=0XBF;//选中C6P1=0X3F;//字型码“0”time1ms();//延时1ms

P2=0XDF;//选中C5P1=0X06;//字型码“1”time1ms();//延时1ms……………………P2=0XFE;//选中C0P1=0X7D;//字型码“6”time1ms();//延时1ms}位选:选中第一个数码管段选:输出相应字型码

延时位选:选中第二个数码管段选:输出相应字型码

延时位选:选中最后一个数码管段选:输出相应字型码

延时八位数码管动态显示参考程序感谢您的观看Thanks

for

your

attention.

4.4LED大屏幕显示器及接口《单片机应用技术(C语言版)》4.4.1LED大屏幕显示器的结构及原理LED点阵显示器8列8行一个点是一个像素8*8LED点阵的内部结构+-行线列线8行8列共64个LED8*8LED点阵的引脚排列与命名C1C2C3C4C5C6C7C8(A)(B)(C)(D)(E)(F)(G)(H)R1(7)R2(6)R3(5)R4(4)R5(3)R6(2)R7(1)R8(0)8*8LED点阵的实际引脚图8*8LED点阵的点亮原理C1C2C3C4C5C6C7C8(A)(B)(C)(D)(E)(F)(G)(H)R1(7)R2(6)R3(5)R4(4)R5(3)R6(2)R7(1)R8(0)10+-点亮原理行:输出高电平列:输出低电平单片机如何控制LED点阵显示图形?8*8LED点阵的引脚排列与命名C1C2C3C4C5C6C7C8(A)(B)(C)(D)(E)(F)(G)(H)R1(7)R2(6)R3(5)R4(4)R5(3)R6(2)R7(1)R8(0)单片机控制一个8*8LED点阵C1C2C3C4C5C6C7C8(A)(B)(C)(D)(E)(F)(G)(H)R1(7)R2(6)R3(5)R4(4)R5(3)R6(2)R7(1)R8(0)51单片机P0.0P0.1P0.2P0.3P0.4P0.5P0.6P0.7P1.0P1.1P1.2P1.3P1.4P1.5P1.6P1.71K一个实用的8*8LED点阵控制电路及点亮一个点P1.3=1;P0.2=0;漂亮的图形视觉效果:多个点同时点亮点阵LED多个点同时点亮的显示原理—动态扫描逐列扫描法逐行扫描法8*8LED点阵的逐行扫描法逐行扫描法中行数据与列数据的设计行列数据00000001B,即0x0100000010B,即0x0200000100B,即0x0400001000B,即0x0800010000B,即0x1000100000B,即0x2001000000B,即0x4010000000B,即0x8011100111B,即0xE711011011B,即0xDB10111101B,即0xBD01111110B,即0x7E01111110B,即0x7E10111101B,即0xBD11011011B,即0xDB11100111B,即0xE7低位数据高位列行数据低位高位一帧数据一帧数据对应一个特定的图形;或者说,每一个图形,都有一帧自己的数据。逐行扫描语句类似逐行扫描法的简单程序设计实例4.4.2LED大屏幕显示器接口74LS595(经常用于并行口扩展,数码管或点阵)常用驱动控制芯片串入并出移位寄存器——74LS595常用驱动控制芯片串入并出移位寄存器——74LS595注意事项:一定要将JOE短接片短接到GND端,如果不需要595后面的小灯点亮可以拔掉JP595短接片。sbitSRCLK=P3^6;sbitRCLK=P3^5;sbitSER=P3^4;常用驱动控制芯片串入并出移位寄存器——74LS595注意事项:一定要将JOE短接片短接到GND端,如果不需要595后面的小灯点亮可以拔掉JP595短接片。sbitSRCLK=P3^6;sbitRCLK=P3^5;sbitSER=P3^4;常用驱动控制芯片串入并出移位寄存器——74LS595sbitSRCLK=P3^6;sbitRCLK=P3^5;sbitSER=P3^4;注意事项:一定要将JOE短接片短接到GND端,如果不需要595后面的小灯点亮可以拔掉JP595短接片。常用驱动控制芯片串入并出移位寄存器——74LS595sbitSRCLK=P3^6;sbitRCLK=P3^5;sbitSER=P3^4;注意事项:一定要将JOE短接片短接到GND端,如果不需要595后面的小灯点亮可以拔掉JP595短接片。常用驱动控制芯片串入并出移位寄存器——74LS595sbitSRCLK=P3^6;sbitRCLK=P3^5;sbitSER=P3^4;注意事项:一定要将JOE短接片短接到GND端,如果不需要595后面的小灯点亮可以拔掉JP595短接片。实训任务595实现控制当dat>>7为0x01(非0)时,SER=1;当dat>>7为0x00时,SER=0;当引脚SRCLK(11脚)处于上升沿时数据寄存器的数据移位,QA→QB→QC→..→QH;处于下降沿时移位寄存器数据不变。当引脚RCLK(12脚)处于上升沿时移位寄存器的数据进入数据存储寄存器,处于下降沿时存储寄存器数据不变。sbitSRCLK=P3^6;sbitRCLK=P3^5;sbitSER=P3^4;实训任务595实现控制D0-D7:阳极(行)P0口:阴极(列)感谢您的观看Thanks

for

your

attention.

4.5字符型LCD液晶显示及接口《单片机应用技术(C语言版)》4.5.1LCD液晶显示器的功能与特点在日常生活中,小到各种手机大到电脑显示器、电视机等等,这些电子产品的显示器件都是一种液晶显示器。一种专门用来显示字母、数字、符号的点阵型液晶模块1602LCD字符液晶显示器每行可以显示16个字符,显示两行,也就是两行十六列0123456789ABCDEFHELLOWORLD!1602LCD字符液晶显示器A列:123456789…………….16第1行第2行1602LCD字符液晶显示器16个引脚1602LCD字符液晶模块

12345678910111213141516LCD模块VSSVDDVODB0DB1DB3DB2DB5DB4DB7DB6AKRSR/WE

12345678910111213141516VSSVDDVOLCD模块VSS:电源地引脚(GND)VDD:+5V电源引脚(VCC)VO:

液晶显示对比度调整引脚(0V~5V)

12345678910111213141516VSSVDDVOLCD模块DB0DB1DB3DB2DB5DB4DB7DB6DB0~DB7:数据线,可以用8位连接,也可以只用高4位连接,节约单片机资源。

12345678910111213141516VSSVDDVOLCD模块DB0DB1DB3DB2DB5DB4DB7DB6AKA:背光控制正电源K:背光控制地

12345678910111213141516VSSVDDVOLCD模块DB0DB1DB3DB2DB5DB4DB7DB6AKRSR/WERS:数据/命令选择控制端,高电平时选择数据寄存器、低电平时选择指令寄存器。R/W:读写信号线,高电平时进行读操作,低电平时进行写操作。E:使能端,当E端由高电平跳变成低电平的时候,液晶模块执行命令。

12345678910111213141516VSSVDDVOLCD模块DB0DB1DB3DB2DB5DB4DB7DB6AKRSR/WERSR/W操作00写命令操作(初始化、光标定位等)01读状态操作(读忙标志)10写数据操作(要显示的内容)11读数据操作(可以把显示存储区中的数据反读出来)

12345678910111213141516VSSVDDVOLCD模块DB0DB1DB3DB2DB5DB4DB7DB6AKRSR/WE电源相关引脚编程控制引脚双向数据线背光源控制引脚4.5.2字符型LCD液晶显示器与单片机的接口单片机LCD1602液晶模块电路设计电路设计电源连接电路设计8位数据线连接电路设计3位控制线连接电路设计背光可以不接电路设计数据线4位连接方式4.5.3字符型LCD液晶显示器的应用

12345678910111213141516VSSVDDVOLCD模块DB0DB1DB3DB2DB5DB4DB7DB6AKRSR/WERSR/W操作00写命令操作(初始化、光标定位等)01读状态操作(读忙标志)10写数据操作(要显示的内容)11读数据操作(可以把显示存储区中的数据反读出来)使能端E引脚下降沿时执行操作四种操作三种常用写命令操作是指给液晶模块写入命令字,也就是指令字。读状态操作用来读入液晶模块的忙标志。写数据操作用来给液晶模块写入显示的数据。RSR/W操作00写命令操作(初始化、光标定位等)01读状态操作(读忙标志)10写数据操作(要显示的内容)11读数据操作(可以把显示存储区中的数据反读出来)RS=0;R/W=1;E下降沿unsignedcharlcd_r_start()//8位数据线连接方式{unsignedchars;RW=1; //RW=1,RS=0,读LCD状态

delayus();RS=0;delayus();E=1; //E端时序

delayus();

s=LCD_DB; //从LCD的数据口读状态

delayus();E=0;delayus();RW=0;delayus();

return(s); //返回读取的LCD状态字}读状态函数i=lcd_r_start();//调用读状态函数,读取LCD状态字D7D6D5D4D3D2D1D0BFBF=1:表示LCD正在忙

BF=0:表示LCD不忙do{

i=lcd_r_start();

//调用读状态函数,读取LCD状态字

i&=0x80;//采用与操作屏蔽掉低7位

delayms(1);

//延时

}while(i!=0);

//LCD忙,继续查询,否则退出循环查询忙状态程序段voidlcd_w_cmd(unsignedcharcom)//8位数据线连接方式{unsignedchari;

do{//查LCD忙操作

i=lcd_r_start(); //调用读状态字函数

i=i&0x80;//与操作屏蔽掉低7位

delayms(1);}while(i!=0); //LCD忙,继续查询,否则退出循环

RW=0;delayus();RS=0;

//RW=0,RS=0,写LCD命令字

delayus();E=1;

//E端时序

delayus();LCD_DB=com; //将com中的命令字写入LCD数据口

delayus();E=0;delayus();RW=1;delayms(50);}写命令函数写数据操作:RS=1;R/W=0;E下降沿voidlcd_w_dat(unsignedchardat)//8位数据线连接方式{unsignedchari;

do{//查LCD忙操作

i=lcd_r_start(); //调用读状态字函数

i=i&0x80;//与操作屏蔽掉低7位

delayms(1);}while(i!=0); //LCD忙,继续查询,否则退出循环

RW=0;delayus();RS=0; //RW=0,RS=0,写LCD命令字

delayus();E=1; //E端时序

delayus();LCD_DB=dat; //将com中的命令字写入LCD数据口

delayus();E=0;delayus();RW=1;delayms(50);}写数据函数写命令操作是指给LCD写入命令字。写数据是指写入要显示的字符voidlcd_w_cmd(unsignedcharcmd);//cmd为要写入的命令字编号指令名称控制信号命令字RSR/D7D6D5D4D3D2D1D01清屏00000000012归home位000000001×3输入方式设置00000001I/DS4显示状态设置0000001DCB5光标画面滚动000001S/CR/L××6工作方式设置00001DLNF××7CGRAM地址设置0001A5A4A3A2A1A08DDRAM地址设置001A6A5A4A3A2A1A09读BF和AC01BFAC6AC5AC4AC3AC2AC1AC01602LCD模块常用指令表lcd_w_cmd(0x01);//LCD清屏,同时光标定位在第1行,第1列LCD清屏命令字在LCD模块上指定光标位置,也就是下一个要显示字符的位置在哪里。编号指令名称控制信号命令字RSR/D7D6D5D4D3D2D1D01清屏00000000012归home位000000001×3输入方式设置00000001I/DS4显示状态设置0000001DCB5光标画面滚动000001S/CR/L××6工作方式设置00001DLNF××7CGRAM地址设置0001A5A4A3A2A1A08DDRAM地址设置001A6A5A4A3A2A1A09读BF和AC01BFAC6AC5AC4AC3AC2AC1AC01602LCD模块常用指令表

列行123456789101112131415161808182838485868788898A8B8C8D8E8F2C0C1C2C3C4C5C6C7C8C9CACBCCCDCECF光标位置与相应命令字(1)表中命令字以十六进制形式给出,该命令字就是与LCD显示位置相对应的DDRAM地址。(2)第一行和第二行的命令字是不连续的。lcd_w_cmd(0x84);//光标定位在第1行第5列光标画面滚动命令字可以设置LCD上画面滚动效果编号指令名称控制信号命令字RSR/D7D6D5D4D3D2D1D01清屏00000000012归home位000000001×3输入方式设置00000001I/DS4显示状态设置0000001DCB5光标画面滚动000001S/CR/L××6工作方式设置00001DLNF××7CGRAM地址设置0001A5A4A3A2A1A08DDRAM地址设置001A6A5A4A3A2A1A09读BF和AC01BFAC6AC5AC4AC3AC2AC1AC01602LCD模块常用指令表CGRAM地址设置可以让我们自己编写要显示的字形编号指令名称控制信号命令字RSR/D7D6D5D4D3D2D1D01清屏00000000012归home位000000001×3输入方式设置00000001I/DS4显示状态设置0000001DCB5光标画面滚动000001S/CR/L××6工作方式设置00001DLNF××7CGRAM地址设置0001A5A4A3A2A1A08DDRAM地址设置001A6A5A4A3A2A1A09读BF和AC01BFAC6AC5AC4AC3AC2AC1AC01602LCD模块常用指令表归位命令可以使得光标返回到第一行第一列编号指令名称控制信号命令字RSR/D7D6D5D4D3D2D1D01清屏00000000012归home位000000001×3输入方式设置00000001I/DS4显示状态设置0000001DCB5光标画面滚动000001S/CR/L××6工作方式设置00001DLNF××7CGRAM地址设置0001A5A4A3A2A1A08DDRAM地址设置001A6A5A4A3A2A1A09读BF和AC01BFAC6AC5AC4AC3AC2AC1AC01602LCD模块常用指令表LCD初始工作方式设置显示状态设置清屏返回输入方式设置001DLNF00DL:设置LCD的连接方式;DL=1:8位、DL=0:4位;N:设置LCD显示的行数;N=1:2行、N=0:1行F:用来设置LCD字符显示的点阵;F=1:5×10、F=0:5×7例:设置数据位数8位,2行显示,5×7点阵字符00111000lcd_w_cmd(0x38);//数据位数8位

//2行显示,5×7点阵字符化工作方式设置LCD初始工作方式设置显示状态设置清屏返回输入方式设置00001DCBD:整体显示开关,D=1,表示开显示,D=0,表示关显示C:光标开关,C=1,表示有光标显示,C=0,表示没有光标显示B:控制光标是否闪烁,B=1,光标闪烁,B=0,光标不闪烁例如:设置开显示,没有光标,光标位字符不闪烁

00001100lcd_w_cmd(0x38);//开显示,没有光标,光标位字符不闪烁化显示状态设置试一试:写出设置开显示,有光标,光标位字符闪烁的命令字是什么呢?LCD初始工作方式设置显示状态设置清屏返回输入方式设置lcd_w_cmd(0x01);//LCD清屏,同时光标定位在第1行,第1列化清屏命令LCD初始化工作方式设置显示状态设置清屏返回输入方式设置000001I/DSI/D:光标移动方向设置,I/D=1:增量方式右移、I/D=0:减量方式左移S:控制屏幕上所有文字是否移动,S=1:移位、S=0:不移位例如:设置光标增量方式右移,显示字符不移动

00000110lcd_w_cmd(0x06);//光标增量方式右移,显示字符不移动输入方式设置LCD初始工作方式设置显示状态设置清屏返回输入方式设置化//函数名:lcd_init//函数功能:lcd初始化

//形式参数:无//返回值:无voidlcd_init(){lcd_w_cmd(0x3c);//设置工作方式lcd_w_cmd(0x0e);//设置光标lcd_w_cmd(0x01);//清屏lcd_w_cmd(0x06);//设置输入方式}初始化函数一般一个独立的模块包括两个文件1)头文件,它里面定义所有液晶显示需要的预定义和函数声明;2)c程序源文件,液晶显示所需要的函数。模块化程序设计工程主函数模块main.c液晶显示模块lcd.hlcd.c/*************lcd.h**********/sbitRS=P2^6;//P2.6sbitRW=P2^5;//P2.5sbitE=P2^7; //P2.7#defineLCD_DBP0控制接口定义/***********************lcd.h**************************/sbitRS=P2^6;//P2.6sbitRW=P2^5;//P2.5sbitE=P2^7; //P2.7#defineLCD_DBP0externunsignedcharlcd_r_start();//读状态函数externvoidlcd_w_cmd(unsignedcharcom);//写命令字函数externvoidlcd_w_dat(unsignedchardat);//写数据函数externvoidlcd_init(); //LCD初始化函数externvoiddelayms(unsignedinti);//可控延时函数externvoiddelayus(); //延时函数,5个机器周期Lcd.h在C语言中,修饰符extern用在变量或者函数的声明前,用来说明这个变量/函数是在别处定义的,要在此处引用或调用。/******************************lcd.c**************************/#include<regx51.h>#include<lcd.h>#include<INTRINS.H>//库函数头文件,代码中引用了_nop_()函数

Lcd.cunsignedcharlcd_r_start()//8位数据线连接方式{unsignedchars;RW=1; //RW=1,RS=0,读LCD状态

delayus();RS=0;delayus();E=1; //E端时序

delayus();

s=LCD_DB; //从LCD的数据口读状态

delayus();E=0;delayus();RW=0;delayus();

return(s); //返回读取的LCD状态字}读状态函数voidlcd_w_cmd(unsignedcharcom)//8位数据线连接方式{unsignedchari;

do{//查LCD忙操作

i=lcd_r_start(); //调用读状态字函数

i=i&0x80;//与操作屏蔽掉低7位

delayms(1);}while(i!=0); //LCD忙,继续查询,否则退出循环

RW=0;delayus();RS=0;

//RW=0,RS=0,写LCD命令字

delayus();E=1;

//E端时序

delayus();LCD_DB=com; //将com中的命令字写入LCD数据口

delayus();E=0;delayus();RW=1;delayms(50);}写命令函数voidlcd_w_cmd(unsignedcharcom)//8位数据线连接方式{unsignedchari;

do{//查LCD忙操作

i=lcd_r_start(); //调用读状态字函数

i=i&0x80;//与操作屏蔽掉低7位

delayms(1);}while(i!=0); //LCD忙,继续查询,否则退出循环

RW=0;delayus();RS=0;

//RW=0,RS=0,写LCD命令字

delayus();E=1;

//E端时序

delayus();LCD_DB=com; //将com中的命令字写入LCD数据口

delayus();E=0;delayus();RW=1;delayms(50);}写命令函数//函数名:lcd_init//函数功能:lcd初始化

//形式参数:无//返回值:无voidlcd_init(){lcd_w_cmd(0x3c);//设置工作方式lcd_w_cmd(0x0e);//设置光标lcd_w_cmd(0x01);//清屏lcd_w_cmd(0x06);//设置输入方式}Lcd初始化函数voiddelayms(unsignedinti){unsignedchark;while(i--)for(k=0;k<120;k++);}voiddelayus(){_nop_();_nop_();_nop_();}延时函数主函数main()设计mainLCD初始化光标定位显示字符结束主函数main()设计lcd_w_dat(‘A’);lcd_w_dat(0x41);lcd_w_dat(65);lcd_w_dat(‘5’);lcd_w_dat(0x35);lcd_w_dat(53);显示字符原地踏步停机语句——因为液晶模块是静态显示,只要显示了,就会一直在,如果显示内容没有变化的话,不需要动态扫描,所以显示完字符,我们就可以停机了。mainLCD初始化光标定位显示字符结束项目工程设计感谢您的观看Thanks

for

your

attention.

4.6单片机与矩阵键盘接口《单片机应用技术(C语言版)》4.6.1矩阵式键盘结构独立按键按键常用按键符号矩阵按键4*40123行线4条行线01230123行线列线4条行线和4条列线01230123列线行线每一个按键跨接在行线、列线之间8条连线单片机AT89C514×4矩阵键盘01230123行线列线4×4矩阵键盘01230123行线列线单片机行线连接4×4矩阵键盘01230123行线列线单片机列线连接4×4矩阵键盘01230123行线列线单片机+VCC4.6.2矩阵式键盘按键的识别如何识别哪一个按键按下?01230123行线列线+VCC?1K×401230123行线列线+VCC1K×4逐列扫描法输出-列线输入-行线01230123行线列线+VCC是否有键按下;

判断具体按键;逐列扫描法:1K×4输出输入S0S1S2S3S4S5S6S7S8S9S10S11S12S13S14S15第一步,先来判断是否有键按下,向P0.4到P0.7的四条列线全部输出低电平,读入P0.0-P0.3四条行线的信号01230123行线列线+VCC是否有键按下;

判断具体按键;逐列扫描法:1K×4输出输入00000000S0S1S2S3S4S5S6S7S8S9S10S11S12S13S14S15信号读入当所有的按键都没有被按下时,p0.0到P0.3读入的行电平都为高。01230123行线列线+VCC1K×4输出输入0000无键按下1111S0S1S2S3S4S5S6S

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论