电子线路制作第次课_第1页
电子线路制作第次课_第2页
电子线路制作第次课_第3页
电子线路制作第次课_第4页
电子线路制作第次课_第5页
已阅读5页,还剩58页未读 继续免费阅读

下载本文档

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

文档简介

电子线路制作第次课第1页,课件共63页,创作于2023年2月数据结构:具有一定格式的数字或数值叫做数据,数据按一定的数据类型进行的排列、组合、架构成为数据机构。C语言编译器与程序开发过程:

8051程序开发过程1.创建C或汇编语言的源程序2.编译或汇编源文件3.纠正源文件中的错误4.从编译器和汇编器连接目标文件5.测试连接的应用程序第2页,课件共63页,创作于2023年2月 尽管C语言具有很多的优点,但和其它任何一种程序设计语言一样,也有其自身的缺点,如不能自动检查数组的边界,各种运算符的优先级别太多,某些运算符具有多种用途等。

C语言程序是由若干个函数单元组成的,每个函数都是完成某个特殊任务的子程序段。组成一个程序的若干个函数可以保存在一个源程序文件中,也可以保存语言源程序文件的文件名由程序设计人员根据某种俗成规则自己确定,其扩展名统一为“.C”。如A1-1.C、A2-1.C。

C语言程序的开始部分通常是预处理命令,如程序中通常遇到的#include命令。这个预处理命令通知编译器在对程序进行编译时,将所需要的头文件读入后再一起进行编译。一般在“头文件”中包含有程序在编译时的一些必要的信息,通常C语言编译器都会提供若干个不同用途的头文件。头文件的读入是在对程序进行编译时才完成的。第3页,课件共63页,创作于2023年2月

C语言程序是由函数所组成的。一个完整的C语言程序应包含一个主函数main()和若干个其它功能的函数。函数之间可以相互调用,但main()函数只能调用其它的功能函数,而不能被其它函数所调用。功能函数可以是C语言编译器提供的库函数,也可以由用户按实际需要自行编写的函数。不管main()函数处于程序中的什么位置,程序总是从main()函数开始执行。一个函数必须预先定义或声明后才能调用。函数定义或声明位于源程序的预处理命令之后的开始位置。函数定义部分包括有函数的存储类型、返回值数据类型、函数名、形式参数说明等,函数名后面必须跟一个圆括弧(),形式参数说明在圆括弧()内进行。函数也可以没有形式参数,如main()。函数的位置比较自由。可以由程序设计人员安排在函数定义后的任意位置。函数由函数名和一对花括弧“{}”组成,在“{}”里面的内容就是函数体,如果一个函数有多个“{}”,则最外面的一对“{}”为函数体的范围。第4页,课件共63页,创作于2023年2月

函数体的内容为若干条语句,一般有两类语句,一类为说明语句,用来对函数中将要用到的变量进行定义;另一类为执行语句,用来完成一定的功能或算法处理。有的函数体仅有一对“{}”,其中既没有变量定义语句,也没有执行语句,这也是合法的,称为“空函数”。

C语言源程序可以采用任何一种编辑器来编写,既可以是windows环境下的编辑器,如记事本(NOTEPAD)或写字板(WORDPAD),也可以是DOS环境下的编辑器,如EDIT或PE等。C语言程序的书写格式十分自由。一条语句可以写成一行,也可以写成几行;还可以在一行内写多条语句;但是需要注意的是,每条语句都必须以分号“;”作为结束符。第5页,课件共63页,创作于2023年2月

另外,C语言区分大小写字母,C语言编译器在对程序进行编译时,对于程序中同一个字母的大小写作为不同的变量来处理。虽然C语言程序不要求具有固定的格式,但我们在实际编写程序时还是应该遵守一定的规则,一般应按程序的功能以“缩格”形式来写程序,同时还应在适当的地方加上必要的注释。注释对于比较大的程序来说是十分重要的,这有利于修改与读懂程序。

C语言本身没有输入输出功能,C语言程序的输入和输出是通过函数调用来实现的。FranklinC51编译器提供的输入输出库函数scanf和printf是通过8051单片机的串行口实现的,在程序中使用这种输入输出库函数之前必须先对8051单片机的串行口进行初始化。但是对于单片机应用系统来说,由于具体要求的不同,应用系统的输入输出方式多种多样,不可能一律采用串行口作输入和输出。因此应该根据实际需要,由应用系统的研制人员自己来编写满足特定需要的输入输出函数,这一点对于单片机应用系统的开发研制人员来说是十分重要的。

第6页,课件共63页,创作于2023年2月C语言的标识符和关键字C语言的标识符是用来标识源程序中某个对象名字的。这些对象可以是函数、变量、常量、数组、数据类型、存储方式、语句等。一个标识符由字符串、数字和下划线等组成,第一个字符必须是字母或下划线,通常以下划线开头的标识符是编译系统专用的,因此在编写C语言源程序时一般不要使用以下划线开头的标识符,而将下划线用作分段符。C51编译器规定标识符最长可达255个字符,但只有前面32个字符在编译时有效,因此在编写源程序时标识符的长度不要超过32个字符。程序中对于标识符的命名应当简洁明了,含义清晰,便于阅读理解,如用标识符“max”表示最大值,用“TIMER0”表示定时器0等。

关键字是一类具有固定名称和特定含义的特殊标识符,又称为保留字。在编写C语言源程序时一般不允许将关键字另作别用,换句话说就是对于标识符的命名不要与关键字相同。在C语言中,ANSIC标准一共规定了32个关键字,下表按用途列出了ANSIC标准的关键字。第7页,课件共63页,创作于2023年2月关键字

用途

说明autobreakcasecharconstcontinuedefaultdodoubleelseenumexternfloatforgotoifintlongregisterreturnshortsignedsizeofstaticstructswitchtypedefunionunsignedvoidvolatilewhile存储类说明程序语句程序语句数据类型说明存储类型说明程序语句程序语句程序语句数据类型说明程序语句数据类型说明存储种类说明数据类型说明程序语句程序语句程序语句数据类型说明数据类型说明存储种类说明程序语句数据类型说明数据类型说明运算符存储种类说明数据类型说明程序语句数据类型说明数据类型说明数据类型说明数据类型说明数据类型说明程序语句用以说明局部变量退出最内层循环switch语句中的选择项单字节整型数或字符型数据在程序执行过程中不可能修改的变量值转向下一个循环switch语句中的失败选择项构成do...while循环结构双精度浮点数构成if...else选择结构枚举在其它程序模块中说明了的全局变量单精度浮点数构成for循环结构构成goto转移结构构成if...else选择结构基本整型数长整型数使用CPU内部寄存器的变量函数返回短整型数有符号数,二进制数据的最高位为符号位计算表达式或数据类型的字节数静态变量结构类型数据构成switch选择结构重新进行数据类型定义联合数据类型无符号数据无符号数据说明该变量在程序执行中可被隐含地改变构成while和do...while循环结构第8页,课件共63页,创作于2023年2月关键字

用途

说明bitsbitsfrsfr16databdataidatapdataxdatacodeinterruptUsingreetrant位标量声明位标量声明特殊功能寄存器声明特殊功能寄存器声明存储器类型声明存储器类型声明存储器类型说明存储器类型说明存储器类型说明存储器类型说明中断函数说明寄存器组定义再入函数声明声明一个位标量或位类型的函数声明一个可位寻址变量声明一个特殊功能寄存器(8位)声明一个16位的特殊功能寄存器直接寻址的8051内部数据存储器可位寻址的8051内部数据存储器间接寻址的8051内部数据存储器“分页”寻址的8051外部数据存储器8051外部数据存储器8051程序存储器定义一个中断函数定义8051工作寄存器组定义一个再入函数C51编译器除了支持ANSIC标准关键字以外,还扩展了如表7.2所示的关键字:

C51编译器的扩展关键字第9页,课件共63页,创作于2023年2月C51程序设计的基本语法C语言的数据类型C语言的数据结构是以数据类型出现的,数据类型可分为基本数据类型和复杂数据类型,复杂数据类型由基本数据类型构造而成。C语言中的基本数据类型有char,int,short,long,float和double。对于C51编译器来说,short型与int型相同,double型与float型相同。分别说明如下:

1.char字符类型。有signedchar和unsignedchar之分,默认值为signedchar。对于signedchar型数据,其字节中的最高位表示该数据的符号,“0”表示正数,“l”表示负数。负数用补码表示。所能表示的数值范围是-128~127;unsignedchar型数据,是无符号字符型数据,其字节中的所有位均用来表示数据的数值,所表示的数值范围是0~255。第10页,课件共63页,创作于2023年2月

2.int整型。有signedint和unsignednit之分,默认值为signedint。signedint是有符号整型数,字节中的最高位表示数据的符号,“0”表示正数,“1”表示负数。所能表示的数值范围是-32768~+32767。unsignedint是无符号整型数,所表示的数值范围是0~65535。

3.long长整型。有signedlong和unsignedlong之分,默认值为signedlong。它们的长度均为四个字节。singedlong是有符号的长整型数据,字节中的最高位表示数据的符号,“0”表示正数,“1”表示负数。数值的表示范围是

2147483648~2147483647;unsignedlong是无符号长整型数据,数值的表示范围是0~4294967295。第11页,课件共63页,创作于2023年2月

4.float浮点型。它是符合IEEE—754标准的单精度浮点型数据,在十进制中具有7位有效数字。float型数据占用四个字节(2位二进制数)。需要指出的是,对于浮点型数据除了有正常数值之外,还可能出现非正常数值。根据IEEE标准,当浮点型数据取以下数值(16进制数)时即为非正常值:FFFFFFFFH非数(NaN);7F800000H正溢出(+INF);FF800000H负溢出(-INF);另外,由于8051单片机不包括捕获浮点运算错误的中断向量,因此必须由用户自己根据可能出现的错误条件用软件来进行适当的处理。第12页,课件共63页,创作于2023年2月

5.*指针型。指针型数据不同于以上四种基本数据类型,它本身是一个变量,但在这个变量中存放的不是普通的数据而是指向另一个数据的地址。指针变量也要占据一定的内存单元,在C51中指针变量的长度一般为1~3个字节。指针变量也具有类型,其表示方法是在指针符号“*”的前面冠以数据类型符号。如char*Pointl;表示Pointl是一个字符型的指针变量。指针变量的类型表示该指针所指向地址中数据的类型。使用指针型变量可以方便地对8051单片机的各部分物理地址直接进行操作。

6.bit位标量。这是C51编译器的一种扩充数据类型,利用它可定义一个位标量,但不能定义位指针,也不能定义位数组。第13页,课件共63页,创作于2023年2月

7.sfr特殊功能寄存器。这也是C51编译器的一种扩充数据类型,利用它可以访问8051单片机的所有内部特殊功能寄存器。sfr型数据占用一个内存单元,其取值范围0~255。

8.sfr1616位特殊功能寄存器。它占用两个内存单元,取值范围是0~65535。

9.sbit可寻址位。这也是C51编译器的一种扩充数据类型,利用它可以访8051单片机内部RAM中的可寻址位或特殊功能寄存器中的可寻址位。

第14页,课件共63页,创作于2023年2月在C语言程序中的表达式或变量赋值运算中,有时会出现运算对象的数据不一致的情况,C语言允许任何标准数据类型之间的隐式转换。隐式转换按以下优先级别自动进行:

bitcharintlongfloatsignedunsigned

转换时由低向高进行,而不是数据转换时的顺序。一般来说,如果有几个不同类型的数据同时参加运算,先将低级别类型的数据转换成高级别类型,再作运算处理,并且运算结果为高级别类型数据。

C51编译器除了能支持以上这些基本数据之外,还能支持一些复杂的构造型数据,如结构类型、联合类型等。第15页,课件共63页,创作于2023年2月常量常量是在程序执行过程中其值不能改变的量。常量的数据类型有整型、浮点型、字符型和字符串型等,C51编译器还扩充了一种位(bit)标量。分别说明如下:

1.整型常量整型常量就是整型常数,可表示为以下几种形式:十进制整数;十六进制整数:以0X开头的数是十六进制数,ANSIC标准规定十六进制数的数字为0~9,再加字母a~f;长整数:在数字后面加一个字母L就构成了长整数。2.浮点型常量浮点型常量有十进制表示形式和指数表示形式。十进制表示形式又称定点表示形式,由数字和小数点组成。如0.3141、31.41、314.1及0.0都是十进制数表示形式的浮点型常量。第16页,课件共63页,创作于2023年2月

在这种表示形式中,如果整数或小数部分为0可以省略不写,但必须有小数点指数表示形式为:

[±]数字[.数字]e[±]数字其中,[]中的内容为可选项,可有可无,但其余部分必须有。3.字符型常量字符型常量是单引号内的字符,如‘a’、‘b’等。对于不可显示的控制字符,可以在该字符前面加一个反斜杠字符“\”组成专用转义字符。利用转义字符可以完成一些特殊功能和输出时的格式控制。4.字符串型常量字符串型常量由双引号“”内的字符组成。当双引号内的字符个数为0时,称为空串常量。需要注意的是,字符串常量首尾的双引号是界限符,当需要表示双引号字符串时,可用转义字符‘\’来表示为:“\“\””。第17页,课件共63页,创作于2023年2月如:“Isay:\“goodbye!\””——字符串为Isay:“goodbye!”另外,C语言将字符串常量作为一个字符类型数组来处理,在存储字符串常量时,要在字符串的尾部加一个转义字符\0作为该字符串常量的结束符。因此不要将字符常量与字符串常量混淆。5.位标量这是C51编译器的一种扩充数据类型。位标量用关键字“bit”来定义,它的值是一个二进制位。一个函数中可以包含“bit”类型的参数,函数的返回值也可为“bit”型。另外,不能定义位指针,也不能定义位数组。第18页,课件共63页,创作于2023年2月C51程序设计表达式语句

C语言是一种结构化的程序设计语言,它提供了十分丰富的程序控制语句。表达式语句是最基本的一种语句。在表达式的后边加一个分号“;”就构成了表达式语句。表达式语句也可以仅由一个分号“;”组成,这种语句称为空语句。空语句是表达式语句的一个特例。空语句在程序设计中有时是很有用的,当程序在语法上需要有一个语句,但在语义上并不要求有具体的动作时,便可以采用空语句。空语句通常有两种用法:

1.在程序中为有关语句提供标号,用以标记程序执行的位置。

2.在用while语句构成的循环语句后面加一个分号,形成一个不执行其它操作的空循环体。

第19页,课件共63页,创作于2023年2月复合语句复合语句是由若干条语句组合而成的一种语句,它是用一个大括号“{}”将若干条语句组合在一起而形成的一种功能块。复合语句不需要以分号“;”结束,但它内部的各条单语句仍需以分号“;”结束。复合语句的一般形式为:

{

局部变量定义;语句1;语句2;。。。。。。。。。语句n;}复合语句在执行时,其中的各条单语句依次顺序执行。整个复合语句在语法上等价于一条单语句,因此在C语言程序中可以将复合语句视为一条单语句。复合语句允许嵌套,即在复合语句内部还可以包含别的复合语句。

第20页,课件共63页,创作于2023年2月

通常复合语句都出现在函数中,实际上,函数的执行部分(即函数体)就是一个复合语句。复合语句中的单语句一般是可执行语句,此外还可以是变量的定义语句(说明变量的数据类型)。用复合语句内部变量定义语句所定义的变量,称为该复合语句中的局部变量,它仅在当前这个复合语句中有效。利用复合语句将多条单语句组合在一起,以及在复合语句中进行局部变量定义是C语言的一个重要特征。流程控制语句1.选择结构①

if语句

if语句有三种形式:单分支选择if语句、双分支选择if语句和多分支选择if语句。(1)单分支选择语句

If(条件表达式)语句第21页,课件共63页,创作于2023年2月 其含义为:若条件表达式的结果为真(非0值),就执行了后面的语句;反之,若条件达式的结果为假(0值),就不执行后面的语句。这里的语句也可以是复合语句。这种条件语句的执行过程如图7.3(a)所示。(2)双分支选择语句

if(条件表达式)语句1;

else语句2;其含义为:若条件表达式的结果为真(非0值),就执行语句1;反之,若条件表达式的结果为假(0值),就执行语句2。这里的语句1和语句2均可以是复合语句。这种条件语句的执过程如图7.3(b)所示。

(a)(b)

条件语句的执行

第22页,课件共63页,创作于2023年2月(3)多分支选择语句

if(条件表达式1)语句1;

elseif(条件式表达2)语句2;

elseif(条件式表达3)语句3;

…………elseif(条件表达式n)语句nelse语句n+1;这种条件语句常用来实现多方向条件分支,其执行过程如图7.4所示。

第23页,课件共63页,创作于2023年2月switch语句

开关语句也是一种用来实现多方向条件分支的语句。开关语句可直接处理多分支选择,使程序结构清晰,使用方便。开关语句是用关键字switch构成的,它的一般形式如下:

switch(表达式) {

case常量表达式1:语句1;break;

case常量表达式2:语句2;break;

…………case常量表达式n:语句n;break;

default:语句n+1;

}开关语句的执行过程第24页,课件共63页,创作于2023年2月2.循环结构在C语言程序中用来构成循环控制的语句有:while语句、do-while语句、for语句以及goto语句,分述如下:①while语句采用while语句构成循环结构的一般形式如下:

while(条件表达式)语句;其意义为,当条件表达式的结果为真(非0值)时,程序就重复执行后面的语句,一直执行到条件表达式的结果变化为假(0值)时为止。这种循环结构是先检查条件表达式所给出的条件,再根据检查的结果决定是否执行后面的语句。如果条件表达式的结果一开始就为假,则后面的语句一次也不会被执行。这里的语句可以是复合语句。图7.6所示为while语句的执行过程。②do-while语句采用do一while语句构成循环结构的一般形式如下:

do语句while(条件表达式);第25页,课件共63页,创作于2023年2月这种循环结构的特点是先执行给定的循环体语句,然后再检查条件表达式的结果。当多件表达式的值为真(非0值)时,则重复执行循环体语句,直到条件表达式的值变为假(0值时为止。因此,用如do一while语句构成的循环结构在任何条件下,循环体语句至少会被执行一次。下图绘出了这种循环结构的流程图。

while语句的执行过程

do—while循环结构的流

第26页,课件共63页,创作于2023年2月

for语句

采用for语句构成循环结构的一般形式如下:

for([初值设定表达式];[循环条件表达式];[更新表达式])语句

for语句的执行过程是:先计算出初值设定表达式的值作为循环控制变量的初值,再检查循环条件表达式的结果,当满足循环条件时就执行循环体语句并计算更新表达式,然后再根据更新表达式的计算结果来判断循环条件是否满足……一直进行到循环条件表达式的结果为假(0值)时,退出循环体。for语句的执行过程如所示。第27页,课件共63页,创作于2023年2月非结构化语句①goto语句

goto语句是一个无条件转向语句,它的一般形式为:

goto语句标号;其中语句标号是一个带冒号“:”的标识符。将goto语句和if语句一起使用,可以构成一个循环结构。但更常见的是在C语言程序中采用goto语句来跳出多重循环,需要注意的是只能用goto语句从内层循环跳到外层循环,而不允许从外层循环跳到内层循环。对于多重循环的情况,break语句只能跳出它所处的那一层循环,而不象goto语句可以直接从最内层循环中跳出来。由此可见,要退出多重循环时,采用goto语句比较方便。需要指出的是,break语句只能用于开关语句和循环语句之中,它是一种具有特殊功能的无条件转移语句。另外还要注意,在进行实际程序设计时,为了保证程序具有良好的结构,应当尽可能地少采用goto语句,以使程序结构清晰易读。

第28页,课件共63页,创作于2023年2月

②continue语句

continue语句是一种中断语句,它一般用在循环结构中,其功能是结束本次循环,即跳过循环体中下面尚未执行的语句,把程序流程转移到当前循环语句的下一个循环周期,并根据循环控制条件决定是否重复执行该循环体。

continue语句的一般形式为:continue;

continue语句通常和条件语句一起用在由while、do—while和for语句构成的循环结构中,它也是一种具有特殊功能的无条件转移语句,但它与break语句不同,continue语句并不跳出循环体,而只是根据循环控制条件确定是否继续执行循环语句③返回语句返回语句用于终止函数的执行,并控制程序返回到调用该函数时所处的位置。返回语句有两种形式:

第29页,课件共63页,创作于2023年2月C51编程实例8051串行口扩展的矩阵键盘用户可以对8051单片机串行口重新进行编程以完成自己需要的某种特殊功能。8051单片机的串行口工作于方式0时,可作为移位寄存器用于扩展I/O口。如图7.14所示,利用8051串行口扩展的一种矩阵键盘接口电路。74LS164是串入/并出移位寄存器,它将来自8051串行口线的P3.0(RXD)的串行数据转换成8位并行数据,P3.4和P3.5定义为输入口线,从而可实现一个2×8矩阵键盘接口下面给出针对键盘接口的C51驱动程序。程序由主函数main()、读键盘函数get_char()和延时函数delay()组成。主函数将8051串行口初始化为工作方式0,采用查询式输入输出,然后调用读键盘函数读入,按键的编码值并存入以keybuf为首地址的16个内部RAM单元中。第30页,课件共63页,创作于2023年2月

读键盘函数get_char()判断是否有键按下,有按键时进行键值分析并将按键的键值返回给主调用函数。延时函数delay()的功能是提供一段延时时间以防止按键抖动对键值分析的影响。用8051串行口扩展的矩阵键盘接口第31页,课件共63页,创作于2023年2月程序清单如下:

#include<reg51.h>#include<intrins.h>unsignedcharget_char(void);/*函数说明*/voiddelay(void);

main(){unsignedcharkeybuf[16],count;/*键盘缓冲区和读键盘计数变量*/SCON=0;/*将串行口设置成方式0*/ES=0;/*禁止串口中断*/EA=0;

count=0;

while(count<16)keybuf[count++]=get_char();

/*读入16个按键的键值*/

第32页,课件共63页,创作于2023年2月

}unsignedcharget_char(void){/*定义表示列号、键序号和待发送数据的变量column、key_code和mask*/unsignedcharkey_code,column=0,mask=0x00;

/*下列语句从串行口向74LS164移位输出8个0*/TI=0;

SBUF=mask;

while(TI==0);

/*下列语句通过检测P3.4和P3.5是否为零来判断是否有键按下,检测到有键压下时延时10ms以消除按键抖动,然后继续检测P3.4和P3.5是否为0,若不为0则表明检测到干扰信号并继续等待按键,否则表示有一个键被可靠按下并退出循环*/while(1)第33页,课件共63页,创作于2023年2月

{while((p34&&p35)!=0);

delay();

if((p34&p35)!=0)continue;

elsebreak;

}/*下列语句分析被按下的键所在的列号*/mask=0xfe;

while(1){TI=0;

SBUF=mask;

while(TI==0);

if((p34&&p35)!=0)第34页,课件共63页,创作于2023年2月

{mask=_crol_(mask,1);/*mask的值循环左移一位*/column++;

if(column>=8)column=0;

continue;

}elsebreak;

}/*下列语句分析被按下的键所在的行号并计算键序号*/if(p34==0)key_code=column;

elsekey_code=8+column;

return(key_code);

}第35页,课件共63页,创作于2023年2月voiddelay(void){unsignedinti=10;

while(i--);}8051LED显示电路发光二极管LED二极管伏安特性曲线第36页,课件共63页,创作于2023年2月

(1)外加正向电压小于0.9~1.1V时,LED不导通;当外加电压大于正向阀值电压时,LED导通,同时发光。显然,LED二极管的正向导通电压比普通二极管大,具体数值与LED材料有关,如表所示。表LED正向压降与材料的关系

LED材料正向导通电压VF/V砷化镓(GaAs)1.2镓铝砷(GaAlAs)1.6~1.8磷化镓(GaP)1.9~2.5磷砷化镓(GaAsP)1.6~1.8第37页,课件共63页,创作于2023年2月

(2) LED导通后,伏安特性曲线更陡,即LED导通后,内阻更小。

(3) LED二极管反向击穿电压比普通二极管低,一般在5~10V之间。

LED二极管的亮度与LED材料、结构以及工作电流有关。一般说来,工作电流越大,亮度也越大,但亮度与工作电流的关系,因材料而异,例如GaP发光二极管,当工作电流增加到一定数值后,电流增加,LED亮度不再增大,即出现亮度饱和现象;而GaAsP发光二极管的亮度随电流的增大而增大,在器件因功耗增加而损坏前观察不到饱和现象。

LED发光二极管工作电流在5~20mA之间,最大不超过50mA,否则会损坏。为了获得良好的发光效果,LED平均工作电流控制在10~15mA较合理。第38页,课件共63页,创作于2023年2月常用驱动电路CPU与LED接口电路(a)、(c)、(e)高电平有效;(b)、(d)低电平有效(a)(b)(c)CPULEDVDVCCRICA740612CPULEDVDVCCRICA740712(d)CPULEDVDVCCRICA740712(e)CPU2.2kRbNPNLEDVDVCCRCPU2.2kRbNPNLEDVDVCCRP1.XP1.X第39页,课件共63页,创作于2023年2月

其中图(a)使用NPN三极管驱动,P1.X引脚输出高电平时,三极管饱和导通,限流电阻R和LED内阻(几欧姆~几十欧姆)构成了集电极等效电阻,R的大小由IC=IF=(VCC-VF-VCES)/R。其中IC为集电极电流;IF为LED工作电流;VCC为电源电压;VCES为三极管饱和压降,一般在0.1~0.2V之间;VF为LED导通电压,一般在1.2~2.5V之间。当VCC为5V,VF取2.0V,IF取15mA时,限流电阻R大致为200Ω。当P1.X引脚输出低电平时,三极管截止,功耗小,该电路惟一缺点是复位期间,P1口输出高电平,LED发光(当然也可以利用这一特性构成复位指示器)。第40页,课件共63页,创作于2023年2月LED静态显示接口电路第41页,课件共63页,创作于2023年2月LED静态显示接口电路第42页,课件共63页,创作于2023年2月

LED静态显示接口电路第43页,课件共63页,创作于2023年2月.动态显示方式LED显示器由P1口输出的LED动态显示接口电路第44页,课件共63页,创作于2023年2月在动态显示方式中,各显示位笔段引脚a~dp并联在一起,共用一个笔段代码锁存器(由于单片机I/O口、I/O扩展电路,如8155、8255等大多具有输出锁存功能,因而往往不再需要笔段代码锁存器)、笔段译码器(采用软件译码时,不需要译码器)及驱动器;为了控制各LED数码管轮流工作,各显示位的公共端与位译码(采用软件译码时,不需要)、锁存、驱动电路相连。这样即可依次输出每一显示位的笔段代码和位扫描码,轮流点亮各LED数码显示管,实现动态显示目的。可见,在动态显示方式中,仅需要一个笔段代码锁存、驱动器和一个位扫描码锁存、驱动器,且硬件开销少。第45页,课件共63页,创作于2023年2月在动态显示方式中,各LED数码显示器轮流工作,为了防止产生闪烁现象,每个LED数码管刷新频率必须大于25Hz,即相邻两次点亮的时间间隔要小于40ms。对于具有N个LED数码管的动态显示电路来说,如果刷新频率为f,那么显示周期为1/f,则每一位的显示时间为1/(f×N)秒。显然,显示的位数越多,每一位的显示时间越短,在驱动电流一定的情况下,亮度越低(正因如此,在动态LED显示电路中,要适当增大驱动电流,一般取20mA~35mA,以抵消因显示时间短造成亮度下降)。为了保证一定的亮度,实验表明:在驱动电流取30mA的情况下,每位显示时间不能小于1ms。第46页,课件共63页,创作于2023年2月由8255构成的LED动态显示驱动电路第47页,课件共63页,创作于2023年2月当显示位数较多,如12位以上,将显示刷新率降到25Hz后,仍不能保证每位显示时间大于1ms时,可采用按字段扫描方式或按位分组扫描方式的动态显示驱动电路。在按字段扫描方式中,不论位数多少,对于八段数码显示器来说,笔段引脚只有8根,即使显示刷新频率为50Hz,按字段扫描时,每一笔段显示时间依然为1/(50×8)=2.5ms。显示时每次点亮一个笔段(即扫描信号从笔段引脚输入),显示信息由位选择电路控制,显示程序比按位扫描方式要复杂一些,这里就不给出具体电路了。第48页,课件共63页,创作于2023年2月按位分组扫描动态显示驱动电路第49页,课件共63页,创作于2023年2月在按位分组扫描方式中,每次同时显示各组中的一位。例如,在图7-16所示电路中,将16个LED数码显示管分成两组,其中A口输出第一组(1~8位)LED数码显示管的笔段代码;B口输出第二组(9~16位)LED数码显示管的笔段代码;位扫描信号由U8输出。显示时,依次将第一组(即1~8位)笔段码送A口,第二组(即9~16位)笔段码送B口,然后再将扫描码送C口,这样一次扫描将同时显示两位,尽管显示位数多了,但每一LED数码显示管的显示时间并没有缩短。显然,在这种显示方式中,每组需要一套笔段驱动电路,虽硬件成本略有上升,但显示驱动程序与只有一组的动态显示电路相似,相对较简单。第50页,课件共63页,创作于2023年2月单片机驱动液晶显示器lcd模块1。Lcd分类

Lcd可分为两种类型,一种是字符模式lcd,另一种是图形模式lcd。其中,字符模式lcd是点阵型液晶显示器,专门用来显示字母,数字,符号。由于lcd的控制需专用的驱动电路,一般不会单独使用,而是将lcd面板,驱动与控制电路组合成模块一起使用,简称lcm。51

目前,常用的有16*1,16*2,20*2,40*2等字符模块。这些lcm虽然显示数字不同,但都有相同的输入输出界面。Lcm模块第51页,课件共63页,创作于2023年2月522.lcd模块的引脚下面介绍常用的20*2字符模块,外型如下图所示,引脚如图所示。20*2lcd每行可以显示20个字,可显示的行数为两行,有16只引脚,其中数据线db0-db7与控制信号线rs,r/w,e用来连接单片机,另外3只信号线vss,vdd,v0,其各脚功能如表第52页,课件共63页,创作于2023年2月第53页,课件共63页,创作于2023年2月3.寄存器选择及显示器地址

Lcd内部有两个寄存器,一个是指令寄存器IR,另一个是数据寄存器DR。IR用来存放由微控制器送来的指令代码,如光标归位,清除显示等,dr用来存放显示的数据。显示的次序是先把欲存放数据地址写入ir,再将欲显示的数据写入dr,dr就会第54页,课件共63页,创作于2023年2月自动的把数据送至相应的ddram和cgram地址,ddram是显示数据的存储器,存放lcd的显示数据;cgram是字符产生器,

温馨提示

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

评论

0/150

提交评论