1、单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,单击此处编辑母版标题样式,项目1 控制一个LED,单片机,应用技术,单片机,应用技术,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,单击此处编辑母版标题样式,项目一 发光二极管LED控制,单片机,应用技术,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,单击此处编辑母版标题样式,项目1 控制一个LED,单片机,应用技术,项目1 控制一个LED,项目1 控制一个LED,促成目标,知道,AT89S52,单片机结构和引脚功能,;,会,A
2、T89S52,单片机,最小系统电路设计;,知道C语言基本构成和基本语句;,会利用单片机I/O口实现点亮一个LED和控制LED闪烁。,终极目标,能完成单片机最小系统和输出电路设计与制作,;,能应用,C,语言程序完成单片机输入输出控制,实现对,LED,控制的设计、运行及调试。,教学目标,任务1 控制一个LED的第一个Proteus仿真电路,任务描述,AT89S52,单片机,P1.0,引脚接发光二极管,LED,的阴极;,通过,C,语言程序控制,从,P1.0,引脚上输出低电平,使发光二极管,LED,点亮。,认识,PROTEUS,Proteus 8.6 Professional,是英国,Labcente
3、r Electronics,公司开发的多功能,EDA,软件。,PROTEUS,不仅是模拟电路、数字电路、模数混合电路的设计与仿真平台,也是目前较先进的单片机和嵌入式系统的设计与仿真平台。,PROTEUS,实现了在计算机上完成从原理图与电路设计、电路分析与仿真、单片机代码级调试与仿真、系统测试与功能验证到形成,PCB,的完整的电子设计、研发过程。,单片机控制一个LED电路分析,按照任务描述,点亮一个,LED,电路是,由,AT89S52,单片机,最小系统,和,1,个,LED,电路构成。,AT89S52,单片机,是美国,ATMEL,公司生产的低电压、高性能,8,位单片机,具有丰富的内部资源,使用,A
4、T89S52,单片机,无须外部存储器。,AT89S52单片机的P1.0引脚接LED的阴极,LED的阳极通过220限流电阻后连接到5V电源上,限流电阻在这里起到了限流的作用,使通过LED的电流被限制在十几个毫安左右。,根据二极管单向导电性,当单片机的P1.0引脚输出低电平时,由于P1.0引脚接LED的阴极,使得LED点亮。当单片机的P1.0引脚输出高电平时,使得LED熄灭。简而言之,LED加正向电压点亮,反之熄灭。,任务实施,新建Proteus工程,在设计原理图之前,必须新建一个Proteus工程。由于本书没有涉及PCB绘制内容,在这里新建一个带有原理图和无PCB的Proteus工程,。,设置图
5、纸,设置图纸尺寸,、设置网格。,添加元器件,添加AT89C52、CRYSTAL(晶振)、CAP(电容)、CAP-ELEC(电解电容)、RES(电阻)、LED-RED等元器件,。,任务实施,绘制电路图,放置元器件,调整元器件位置,放置终端,连线,属性设置,电气规则检测,认识单片机,单片机实质上是一个芯片,,单片机,芯片上主要,集成了,如下,部件,:,中央处理器CPU,;,数据存储器RAM,;,程序存储器ROM,;,定时器/计数器,;,中断系统;,输入/输出接口电路,。,单片机的发展,第一阶段(,1974-1976,年)为单片机初级阶段,由于受工艺及集成度的限制,单片机采用双片形式,且功能比较简单
6、第二阶段(,1976-1978,年)为低性能单片机阶段,单片机采用单芯片形式,是“小而全”。,第三阶段(,1978-1982,年)为高性能单片机阶段,是单片机普及阶段,如:,MCS-51系列单片机,第四阶段(,1982,年以后)为,16,位单片机阶段,是16位CPU,,如:,MCS-,96,系列单片机,单片机的特点,由于单片机芯片上集成了,CPU,、存储器、输入,/,输出部件和时钟电路等。因此它具有如下特点。,体积小、重量轻,价格低、功能强,电源单一、功耗低,可靠性高、抗干扰能力强;,使用方便灵活、通用性强;,目前大多数单片机采用哈佛(,Harvard,)结构体系;,突出控制功能的指令系统
7、较低的处理速度和较小的存储容量。,单片机的应用,单片机主要应用在以下几个方面:,家用电器,智能卡,智能仪器仪表,网络与通信,工业控制,单片机的分类,单片机可分为通用型单片机和专用型单片机两大类。,通用型单片机,是把可开发资源全部提供给使用者的微控制器。,这就是我们通常所说的单片机,即指通用型单片机,专用型单片机,则是为过程控制、参数检测、信号处理等方面的特殊需要而设计的单片机。,51系列单片机,51系列单片机有51子系列型和52子系列型,51子系列是基本型产品,片内带有4KBROM/EPROM(8031、80C31除外)、128BRAM、2个16位定时器/计数器、5个中断源等。,52子系列
8、则是增强型产品,片内带有8KBROM/EPROM(8032、80C32除外)、256BRAM、3个16位定时器/计数器、6个中断源等。,51系列,单片机一览表,AT89系列单片机,在MCS-51系列的基础上,Atmel公司开发的AT89系列单片机,具有较低廉的价格和独特的程序存储器(快闪存储器)。,Flash,程序存储器可以用电擦除方式瞬间擦除、改写,写入单片机内的程序还可以进行加密。,AT89S52,单片机结构,一个,8,位,CPU,;,一个片内振荡器及时钟电路;,8K,字节可重复擦写的,Flash,闪速存储器,三级加密程序存储器;,2568,字节内部,RAM,;,3,个,16,位定时器,/
9、计数器;,32,条可编程的,I/O,线(四个,8,位并行,I/O,端口);,一个可编程全双工串行口;,具有,6,个中断源、两个优先级嵌套中断结构。,AT89S52,引脚功能,电源线:,VCC(+5V)、VSS(,地,),振荡电路:,XTAL1,、,XTAL2,复位引脚:,RST,并行口:,P0,、,P1,、,P2,、,P3,EA,:访问程序存储控制信号,PSEN,:外部,ROM,读选通信号,ALE,:地址锁存控制信号,P3,口线的第二功能,AT89S52,引脚功能,电源引脚,(2,根,),VCC(40,脚,),:电源端,接,+5V,电源。,VSS(20,脚,),:接地端。,时钟引脚,(2,根
10、),XTAL1(19,脚,),:接外部晶振和微调电容的一端。,XTAL2(18,脚,),:接外部晶振和微调电容的另一端。,STC89C52,引脚功能,控制引脚,(4,根,),RST/VPD(9,脚,),:复位信号,当输入的复位信号延续两个机器周期以上的高电平时即为有效,用以完成单片机的复位初始化操作。,ALE/PROG(30,脚,),:地址锁存控制信号,系统扩展时,,ALE,用于控制把,P0,口输出的低,8,位地址锁存起来,以实现低位地址和数据的隔离。,EA/VPP(31,脚,),:访问程序存储控制信号,当信号为低电平时,对,ROM,的读操作限定在外部程序存储器;,当信号为高电平时,对,RO
11、M,的读操作是从内部程序存储器开始,并可延至外部程序存储器。,PSEN(29,脚,),:片外,ROM,读选通信号端,读片外,ROM,时,,PSEN,为低电平,有效,,实现对片外,ROM,的读操作。,AT89S52,引脚功能,P0,口(引脚,32-39,)普通,I/O,口,P1,口(引脚,1-8,)普通,I/O,口,P2,口(引脚,21-28,)普通,I/O,口,P3,口(引脚,10-17,)普通,I/O,口,或作为其他第二功能口,P3,口各引脚与第二功能表,引脚,第二功能,功能说明,P3.0,RXD,串行口输入,P3.1,TXD,串行口输出,P3.2,INT0,外部中断,0,输入,P3.3,I
12、NT1,外部中断,1,输入,P3.4,T0,定时器,/,计数器,0,计数输入,P3.5,T1,定时器,/,计数器,1,计数输入,P3.6,WR,片外,RAM,写选通信号,(,输出,),P3.7,RD,片外,RAM,读选通信号,(,输出,),任务2 用Keil C51设计第一个程序控制一个LED,任务描述,使用Keil C51,设计一个C语言程序,控制AT89S52单片机P1.0引脚输出一个低电平,使LED点亮,。,认识,KEIL C51,Keil C51,是德国,Keil,软件公司开发的基于,8051,内核的微控制器软件开发平台。,Keil C51,是,51,系列单片机,C,语言软件开发系统,
13、是目前开发,8051,内核单片机的主流工具。,Keil C51,软件提供丰富的库函数和功能强大的集成开发调试工具,全,Windows,界面。,Keil C51,具有,集成开发环境,可以完成从工程建立和管理、编译、连接、目标代码的生成、软件仿真和硬件仿真等完整的开发流程。,单片机控制一个LED,实现,分析,P1.0,引脚接发光二极管(,LED,)的阴极,,P1.0,引脚输出低电平时,发光二极管点亮。,问题,:为什么,P1.0,引脚输出低电平,发光二极管点亮?,通过程序控制,使,P1.0,引脚输出低电平,使发光二极管点亮。,问题:,程序怎么使,P1,口的引脚输出低电平?,在下面我们可以找到答案。,
14、单片机控制一个LED,实现,分析,在图1-1中,AT89S52单片机的P1.0引脚接LED的阴极,LED的阳极通过220限流电阻后连接到5V电源上,。,当单片机的P1.0引脚输出低电平时,LED点亮,。,sbit LED=P10;/定义LED为P1.0引脚,LED=0;/P1.0引脚输出低电平,LED点亮,当单片机的P1.0引脚输出高电平时,LED熄灭。,sbit LED=P10;/定义LED为P1.0引脚,LED=1;/P1.0引脚输出高电平,LED熄灭,任务实施,建立第一个Keil C51工程项目,新建工程并保存在,“任务2 控制一个LED”的文件夹,中;,在CPU类型中,单击左侧列表框中
15、Atmel”项前面的“+”号,展开该层,单击选中列表中的“AT89S52”;,不添加启动文件。,建立“点亮一个LED”源文件,“点亮一个LED.c”与工程文件放在同一文件夹中,。,添加源文件到工程项目文件中,将,“点亮一个LED.c”,添加到工程项目中,任务实施,“点亮一个LED”源文件,#include,/包含AT89X52.H头文件,sbit LED=P10;,/定义LED为P1.0引脚,void main(void),LED=0;,/P1.0引脚输出低电平点亮LED,while(1);,任务实施,工程配置与编译,在“Target(目标)”标签页的晶振频率栏中,建议初学者修改成12MHz
16、因为12MHz方便计算指令时间,;,在“Output”标签页中,选中“Greate HEX File(生成HEX文件)”选择框,使编译器输出单片机需要的HEX文件;,其余采用默认配置。,用Proteus仿真运行调试,加载“控制一个LED.hex”目标代码文件,仿真运行调试,单片机最小系统,单片机最小系统只是单片机能满足工作的最低要求,它不能对外完成控制任务,不能实现人机对话。,要进行人工对话还要一些输入、输出部件,作控制时还要有执行部件。,常见的输入部件有开关、按钮、键盘等,输出部件有指示灯LED、数码管等,执行部件有继电器、电磁阀等。,一般来说,单片机最小系统主要包括单片机、晶振电路、复位
17、电路和电源4个部分。,时钟电路,时钟电路为单片机产生时钟脉冲序列。,系统允许的晶振频率一般为,6 MHz,和,12 MHz,,电容,C1,和,C2,取,30 pF,左右。,晶体振荡频率高,则系统的时钟频率也高,单片机运行速度也就快。,时序的概念,单片机内的各种操作都是在一系列脉冲控制下进行的,而各脉冲在时间上是有先后顺序的,这种顺序就称为时序。,单片机的时序定时单位从小到大依次为:,振荡,周期、时钟周期(状态周期)、机器周期和指令周期。,振荡周期,是指晶体振荡器直接产生的振荡信号的周期,是振荡频率,fosc,的倒数,用,P,表示。,状态周期,(,或,状态S,),是振荡周期的两倍,它分为,P1,
18、节拍和,P2,节拍。,1,个,机器周期,是由,6,个,状态,构成。,执行一条指令所需的时间称为,指令周期,。,各种周期的相互关系,复位电路,单片机复位引脚,RST,出现,2,个机器周期以上的高电平,时,单片机就执行复位操作。,常见复位操作有上电自动复位和按键手动复位两种方式。,上电自动复位,是通过外部复位电路的电容充电来实现的。,按键手动复位,是通过复位端经电阻与电源,VCC,接通而实现的,它兼备上电复位功能。,复位功能,复位是单片机的初始化操作。,是把,PC,初始化为,0000H,,使,CPU,从,0000H,单元开始执行程序;,同时还对其他一些寄存器有影响,但内部,RAM,的数据是不变的。
19、除了进入系统的正常初始化之外,当由于程序运行出错或操作错误使系统处于死锁状态时,为摆脱困境,也需要按复位键重新启动。,C,语言程序的构成,一个语言程序,是由一个,main(),函数(又称主函数)和若干个其它函数结合而成的,或仅由一个,main(),函数构成。,函数是语言程序的基本单位。,最简单的程序只有一个,main,函数。,C,语言程序总是从,main(),函数开始执行。,函数,的构成,任何函数都是由函数说明和函数体两部分组成,函数,一般结构如下:,函数类型 函数名(函数参数表)/*函数说明部分*/,声明语句部分,执行语句部分,/*函数体部分*/,函数,体,即函数首部下面的大括号“,”,内
20、的部份。,函数体一般包括:,声明部份:定义所用到的变量,如,void Delay(),中的,unsigned char i,j;,。,执行部份:由若干个语句组成。,标识符,C,语言规定标识符只能由,字母、数字和下划线,三种字符组成,且第一个字符必须为字母或下划线。,变量名、常数名、数组名、函数名、文件名与类型名等统称为标识符。,标识符分为预定义标识符和用户标识符。,说明:,C,语言中大写字母与小写字母被认为是两个不同的字符。,标识符在命名时应当简单,含义清晰,这样有助于阅读理解程序。,关键字,关键字则是编程语言保留的特殊标识符,它们具有固定名称和含义,在程序编写中,不允许标识符与关键字相同,。
21、在,Keil C,中的关键字除了有,ANSI C,标准的,32,个关键字,外,还根据,51,单片机的特点,扩展了相关的关键字,。,在,Keil C,的文本编辑器中编写,C,程序,系统把保留字以不同颜色显示,缺省颜色为,天蓝色,。,C,语言基本语句,C,语言的程序是由一个或多个函数组成的,而函数又是由若干个语句组成的。,语句是由一些基本字符和定义符按照,C,语言的语法规定组成的,每个语句以,分号“,;,”,结束,分号是,C,语句的必要组成部份。,C,语言的语句可分为以下,5,种类型:,表达式语句,函数调用语句,控制语句,复合语句,空语句,表达式语句,表达式语句,是由,一个表达式,加,一个分号,
22、构成一个语句,其作用是计算表达式的值或改变变量的值。,它的一般形式是:,表达式,;,即在表达式末尾加上分号,就变成了表达式语句。最典型的表达式语句是:在赋值表达式后加一个分号构成赋值语句。例如:,a=3,是一个赋值表达式,a=3;,是一个赋值语句,函数调用语句,由,一个函数,调用,加一个分号,构成函数调用语句,其作用是完成特定的功能。它的一般形式是:,函数名,(,参数列表,);,例如:,mDelay(100);,/,调用延时函数,参数是,100,控制语句,控制语句用于完成一定的控制功能,以实现程序的各种结构方式。,C,语言有,9,种控制语句,可分为以下三类。,条件判断语句,if,语句、,swi
23、tch,语句。,循环语句,for,语句、,while,语句、,do-while,语句。,转向语句,break,语句、,continue,语句、,goto,语句、,return,语句。,复合语句,复合语句是用一对大括号将若干条语句括起来的,也称为分程序,在语法上相当于一条语句。,例如,main(),t=x;,x=y;,y=t;,/,复合语句,空语句,只有一个分号的语句称为空语句,它的一般形式是:,;,空语句是什么操作也不执行,常用于作为循环语句中的循环体,表示循环体什么也不做。,注释,注释内容可以单独写在一行上,也可以写在一个语句之后,可以用,/*.*/,的形式为,C,程序的任何一部份作注释;,
24、Keil C,也支持,C+,风格的注释,就是用“,/,”,引号后面的是,注释,例如,P1_0=!P1_0;,/,取反,P1.0,这种风格的注释,只对本行有效,书写比较方便,所以在只需要一行注释的时候,我们往往采用这种格式。,技能训练,1-1 开关控制LED点亮,单片机最小系统只是单片机能满足工作的最低要求,它不能对外完成控制任务,实现人机对话。,开关控制,LED,点亮,电路设计,程序设计,开关控制LED点亮程序,#include,/包含AT89X52.H头文件,sbit SW=P30;,/定义SW是P3.0位对应的引用符号,sbit LED=P10;,/定义LED是P1.0位对应的引用符号,v
25、oid main(void),while(1),if(SW=0),LED=0;,/开关闭合SW=0:P1.0=0,LED点亮,else,LED=1;,/开关断开SW=1:P1.0=1,LED熄灭,任务,3,LED闪烁,控制,任务描述,P1.0引脚接LED的阴极,通过程序控制,使P1.0引脚交替输出高电平和低电平,使LED闪烁。,任务,3,LED闪烁,控制,任务分析,软件实现思路:,点亮发光二极管,延时(延时子程序),关闭发光二极管,延时,重复上述动作(循环),电路设计和前面一样,任务实施,建立第一个Keil C51工程项目,新建工程并保存在,“任务2 控制一个LED”的文件夹,中。,建立“LE
26、D闪烁控”源文件,“LED闪烁控.c”与工程文件放在同一文件夹中,。,添加源文件到工程项目文件中,将,“LED闪烁控.c”,添加到工程项目中,“LED闪烁,控制,”工程配置与编译,LED闪烁控制Proteus仿真运行调试,LED闪烁控制程序设计,#include,/包含AT89X52.H头文件,sbit LED=P10;,/定义LED是P1.0位的引用符号,void Delay(),/延时函数,unsigned char i,j;,for(i=0;i255;i+),for(j=0;j0;i-),for(j=248;j0;j-);,LED数码管静态显示程序,按键识别、处理,if(P1_0=0),
27、/,判断按键是否,按下,delay10ms();,/延时去抖动,if(P1_0=0),/再一次确定,按键是否按下,.,/计数处理、显示,while(P1_0=0);,/等键释放,LED数码管静态显示程序,计数实现,if(P1_0=0),/,判断按键是否,按下,.,Count+;,/,计数器,加1,if(Count=100),/,判断,计数,是否,到,了,100,Count=0;,/,计数器清,0,.,LED数码管静态显示程序,计数显示,Count=0;,/,计数变量初始为,0,P0=tableCount/10;,/,十位数码管显示,0,P2=tableCount%10;,/,个位数码管显示,0
28、while(1),.,/,按键识别和,计数程序段,P0=tableCount/10;,/,显示,计数的,十位数,P2=tableCount%10;,/,显示,计数的,个位数,.,【技能训练3-1】LED数码管循环显示09焊接制作,技能训练要求,AT89S52单片机的P1口的P2.0P2.6七个引脚,使其依次连接到一个共阴极LED数码管的ah七个位段控制引脚上,数码管的公共端接地,;,完成LED数码管循环显示09电路设计、程序设计以及焊接制作,实现在LED数码管上循环显示 09十个数字。,【技能训练3-1】LED数码管循环显示09焊接制作,LED数码管循环显示09电路设计,LED数码管显示09
29、电路是由单片机最小系统、一片1位的共阴极LED数码管和一片74LS245驱动芯片组成。,【技能训练3-1】LED数码管循环显示09焊接制作,LED数码管循环显示09程序设计,参考任务7程序设计,在数码管显示程序中,dispcount既用作循环变量使用,又用作数组的下标,其值从0变到9,就能够把数组table中的字符编码一一获得。,每获得一个字型码就送于P1口输出,采用的语句为,:,P1=tabledispcount;,LED数码管显示09控制C语言程序,见教材。,【技能训练3-1】LED数码管循环显示09焊接制作,LED数码管循环显示09电路焊接制作,参考数码管循环显示09电路,完成电路板焊接
30、制作,焊接好的电路板如图3-4所示。焊接数码管时,不要用手去折其引角,须紧贴万能板焊接,焊接时温度控制在260度左右,时间不宜过长。,硬件检测与调试,。,软件下载与调试,。,认识数码管,单片机常用LED和LCD两种方式,LED数码显示器价格低廉、体积小、功耗低、而且可靠性好,得到广泛使用。,单个LED数码管的管脚结构如图所示,数码管内部由,8,个,LED,(位段)组成;,有,7,个条形,LED,和一个小圆点,LED,;,当,LED,导通时,相应的线段或点发光;,将这些,LED,排成一定图形,来显示数字09、字符AF、H、L、P、R、U、Y、符号“”及小数点“.”等。,A,B,C,D,E,F,G
31、DP,认识数码管,LED数码管可以分为共阴极和共阳极两种结构,共阴极结构,把所有,LED,阴极作为公共端(com)连接低电平(接地),通过控制每个,LED的,阳极电平使其发光或熄灭,阳极为高电平,LED,发光,为低电平熄灭。,如显示0时,把a、b、c、d、e、f端接高电平,其他各端接地。,共阳极结构,是把所有,LED,的阳极作为公共端(com)连起来,接高电平(如+5V),通过控制每一只,LED,的阴极电平来使其发光或熄灭,阴极为低电平,LED,发光,为高电平熄灭,数码管引脚及内部结构,管脚排列,共阳数码管,共阴数码管,使用数码管注意事项,必须注意的是,数码管内部没有电阻,在使用时,需外接限
32、流电阻,如果不限流将造成发光二极管的烧毁;,限流电阻的取值一般使流经发光二极管的电流在1020mA,由于高亮度数码管的使用,电流还可以取得小一些。,数码管的字型编码,数码管,要,显示某个字符,必须使它的8个位段上加上相应的电平组合,即一个8位数据,这个数据就叫该字符的字型编码。编码规则如下图所示。,共阴极和共阳极数码管的字型编码是不同的,共阴极和共阳极的字型编码是反相的,例如,字符“0”:,共阴极编码是,3FH,,二进制形式是,00111111,;,共阳极编码是,C0H,,二进制形式是,11000000,,恰好是00111111的反码。,D7,D6,D5,D4,D3,D2,D1,D0,dp,g
33、f,e,d,c,b,a,数码管的显示方法,LED数码管有动态显示和静态显示两种方法,静态显示,是指数码管显示某一字符时,相应的发光二极管恒定导通或恒定截止。,这种显示方式的,各位数码管相互独立,,公共端恒定接地(共阴极)或+5V(共阳极)。,每个数码管的,八个位段分别与一个八位I/O端口引脚相连,。,I/O端口只要有字型码输出,数码管就显示给定的字符,并保持不变,直到I/O口输出新的段码。,数码管的显示方法,LED数码管有动态显示和静态显示两种方法,动态显示,是一种一位一位地轮流点亮各位数码管的显示方式。,在某一时段,只选中一位数码管的“,位选端,”,并送出相应的,字型编码,,在下一时段,按
34、顺序,选通另外一位数码管,并送出相应的字型编码。,依此规律循环下去,即可使各位数码管分别间断地显示出相应的字符。,这一过程称为,动态扫描显示,。,一维数组,在,C,语言中,数组必须要,先定义后使用,。一维数组的定义方式为:,类型说明符 数组名,整型表达式,;,类型说明符是数组中各个元素的数据类型。,数组名是用户定义的数组标识符。,方括号中的常量表达式表示数据元素的个数,既数组的长度。,例如:,int a9;,/,定义整型数组,a,,有,9,个元素,下标从,0,到,8,。,float b5;,/定义实型数组b,有5个元素,下标从0到4。,char ch10;,/定义字符数组ch,有10个元素,下
35、标从0到9。,注意事项,数组的类型是指构成数组的元素的类型;,对于同一个数组,其所有元素的数据类型都是相同的,数组名的书写规则应符合标识符的命名规则;,不能与其它变量同名,常量表达式可以是符号常量或常量表达式。,常量表达式,不能包含变量,即不能对数组的大小作动态定义,【技能训练3-2】使用,74LS47,实现,0-99,计数显示,认识,74LS47,是由与非门、输入缓冲器和,7,个与或非门组成的,BCD-7,段数码管译码器,/,驱动器;,能把,4,位二进制编码,十进制数(,BCD,码)转化成七段字形码;,输出低电平有效的七段字形码,并能,驱动一个七段数码管。,也就是说:,74LS47,能直接把
36、数字转换为数码管的显示数字;,能简化程序,节约单片机的,IO,开销。,74LS47,输入,/,输出引脚,4,位二进制编码,十进制数(,BCD,码),从,A,、,B,、,C,和,D,引脚输入;,译码成七段字形码,从,QA,、,QB,、,QC,、,QD,、,QE,、,QF,和,QG,引脚输出。,输入,DCBA=0010,,输出,abcdefg=0010010,,显示,“,2,”,;,输入,DCBA=0110,,输出,abcde,f,g=1100000,,显示,“,6,”,。,0-99,计数显示电路设计,采用,七段字形译码器74LS47,,输出字型码控制显示内容;,74LS47的LT、RBI与BI/
37、RBO为无效,接高电平;,数码管是共阳极数码管。,0-99,计数显示程序,void main(void),Count=0;,/,计数变量初始为,0,P2=0 x0;,/十位、个位数码管显示0,while(1),/按键扫描,计数显示处理,/*十位数BCD码(Count/104)和个位数BCD码(Count%10)相或*/,P2=(Count/104)|(Count%10);,while(P1_0=0);,任务8 LED数码管动态扫描显示设计,任务描述,显示是由6个共阴LED数码管构成,使用AT89S52单片机,P0口输出显示段码,经由一片74LS245驱动输出给LED数码管,P1口输出位码(片选
38、给LED数码管。,通过动态扫描程序使6个数码管显示“123456”,任务分析,LED数码管动态扫描显示电路分析,LED数码管动态扫描显示电路的设计方法如下:,将数码管所有位的相同,“,段选端,”,都并接起来,由一个8位I/O端口控制(在本任务中采用的是P0口),如:数码管的所有,“,a,”,段都并接;,各位数码管的公共端(com端),用作,“,位选端,”,,分别接另一个I/O端口的I/O引脚(在本任务中采用的是P1口)。,数码管动态扫描显示电路的,“,段选端,”,是并接的(公用的),并由,“,位选端,”,分别控制各数码管进行显示。,任务分析,LED数码管动态扫描显示程序分析,动态扫描是采用分
39、时的方法,是轮流点亮各位数码管的显示方式,它在某一时间段,只让其中一位数码管的,“,位选端,”,(com端)有效,并送出相应的段码。,LED数码管动态扫描过程如下:,首先从段选线上送出段码,再控制位选端,字符就显示在指定LED数码管上。其它LED数码管的位选端都无效,LED数码管都处于熄灭状态。持续1.5ms时间,然后关闭所有显示;,接下来又送出新的段码,按照上述过程又显示在另外一位LED数码管上,直到每一位LED数码管都扫描完为止。,任务分析,LED数码管动态扫描显示程序分析,LED数码管动态扫描显示其实就是轮流依次点亮的,但由于人的视觉驻留效应,因此当每个LED数码管点亮的时间小到一定程度
40、时,人就感觉不出字符的移动或闪烁,觉得每位LED数码管都一直在显示,达到一种稳定的视觉效果。,任务实施,LED数码管,动态扫描,显示电路设计,按照任务描述,,LED数码管静态显示电路是由单片机最小系统、按键电路和采用2个共阴LED数码管组成的静态显示电路构成,。,在AT89S52单片机P0口输出显示段码,P0口的P0.0P0.6通过一片74LS245依次接段码口ag;,P1口输出位码;用单片机P1口的P1口的P1.0P1.5依次接位码口16。,任务实施,LED数码管,动态扫描,显示,电路设计,新建设计文件、保存设计文件,选取元器件,AT89S52、CRYSTAL、CAP、CAP-ELEC、RE
41、S、74LS245和7SEG-MPX6-CC,。,放置元器件、编辑元器件、放置终端、连线;,属性设置,电气规则检测,单击“工具”“电气规则检查”,弹出检查结果窗口,完成电气检测;,若检测出错,根据提示修改电路图并保存,直至检测成功。,任务实施,LED数码管,动态扫描,显示,程序设计,建立“,LED数码管动态扫描显示,”工程项目,;,建立并加载“,LED数码管动态扫描显示,.c”源文件,;,“,LED数码管动态扫描显示,”工程配置与编译;,跑马灯,Proteus仿真运行调试。,数码管动态显示程序设计,定义段码表,#include,unsigned char code Tab=0 x3F,0 x0
42、6,0 x5B,0 x4F,0 x66,0 x6D,0 x7D,0 x07,0 x7F,0 x6F,0 x77,0 x7C;,unsigned char code Col=0 xfe,0 xfd,0 xfb,0 xf7,0 xef,0 xdf;,void Delay(),unsigned char i;,for(i=0;i250;i+);,数码管动态显示程序设计,主函数,void main(),/,同时显示,123456,unsigned char j;,while(1),for(j=1;j0;Delay-),函数中,Delay,就是一个形式参数,而在主函数中调用时写的:,mDelay(100
43、0);,函数的返回值,在,C,中,一般使用,return,语句由被调函数向主调函数返回值,该语句有下列用途:,它能立即从所在的函数中退出,返回到调用它的程序中去;,返回一个值给调用它的函数。,返回语句一般有如下的形式:,return;,return,表达式,;,return(,表达式,);,任务9 LCD液晶显示信息牌设计,任务描述,为了进一步掌握LCD1602液晶显示模块的使用和编程方法,设计一个基于LCD1602的信息显示牌。,要求信息显示牌显示的格式为:,第1行显示:,G10 arrival time(G10到站时间),第2行显示:,14:08(居中显示时间,由左向右分别为:时、分),任
44、务分析,LCD液晶显示信息牌电路分析,LCD液晶显示信息牌电路是由单片机最小系统、驱动电路和LCD液晶显示模块组成。,任务分析,LCD1602关键函数,LCD1602关键函数主要有写指令函数WrOp()、写数据函数WrDat()和LCD1602初始化函数LCD_Init()。,LCD液晶显示模块如何显示信息,确定每行第一个字符的显示地址,第1行第一个字符的显示地址是:00H+80H=80H;,第2行第一个字符的显示地址是:40H+80H=C0H。,如何确定每行显示起始字符的显示位置。,每行第一个字符的显示地址+右移n个字符,任务实施,LCD液晶显示信息牌,电路设计,如,图3-13,所示,,8位
45、双向数据线D0D7接P0口;寄存器选择RS、读写信号线R/W、控制液晶模块执行命令的使能端E(或EN)分别接P1口的P1.0、P1.1和P1.2引脚。,考虑到P0口驱动能力,所以在P0口与LCD1602液晶显示模块之间增加1个八双向总线收发器74LS245。,任务实施,LCD液晶显示信息牌,电路设计,新建设计文件、保存设计文件,选取元器件,AT89C52、CRYSTAL、CAP、CAP-ELEC、RES、74LS245、和LM016L(LCD1602液晶显示模块),。,放置元器件、编辑元器件、放置终端、连线;,属性设置,电气规则检测,单击“工具”“电气规则检查”,弹出检查结果窗口,完成电气检测
46、若检测出错,根据提示修改电路图并保存,直至检测成功。,任务实施,LCD液晶显示信息牌,程序设计,建立“,LCD液晶显示信息牌,”工程项目,;,建立并加载“,LCD液晶显示信息牌,.c”源文件,;,“,LCD液晶显示信息牌,”工程配置与编译;,LCD液晶显示信息牌,Proteus仿真运行调试。,LCD液晶显示信息牌详细代码,见教材,【技能训练3-4】按键控制LCD1602信息牌换屏显示,技能训练要求,在任务9的基础上,增加2个按键,完成LCD1602信息牌能换屏显示不同高铁车次和到站时间。,按键控制LCD1602信息牌换屏显示电路设计,根据技能训练要求,使用2个按键控制LCD1602信息牌能
47、换屏显示,其电路主要由单片机最小系统、按键控制电路、驱动电路和LCD液晶显示模块组成。,在LCD液晶显示信息牌电路图基础上增加2个按键,SW1按键接P1.4,SW2按键接P1.7。,【技能训练3-4】按键控制LCD1602信息牌换屏显示,【技能训练3-4】按键控制LCD1602信息牌换屏显示,按键控制LCD1602信息牌换屏显示实现分析,按键控制LCD1602信息牌能换屏显示不同高铁车次和到站时间,实现过程如下:,当SW1按键按下时,LCD1602信息牌显示G10到站时间;,当SW2按键按下时,LCD1602信息牌显示G10到站时间。,按键控制LCD1602信息牌换屏显示,详细代码,见教材,数
48、码管可以分为共阴极和共阳极两种结构,使数码管上显示某个字符,必须使它的8位段选线上加上相应的电平组合,既段码。,单个数码管可以采用静态显示;多位数码管显示有动态扫描显示和静态扫描显示两种方法。,当显示位数较多时,采用动态扫描方式;,若显示位数较少,采用静态扫描显示方式。,选择结构程序控制语句:If语句、switch语句。,循环结构程序控制语句:while语句、do-while语句、for语句。,数组必须由具有相同数据类型的元素构成。,数组必须要先定义,后使用,关键知识点小结,LED数码管有哪两种结构?是如何实现的?,请简要说明LED数码管静态显示和动态显示的特点,实际设计时应如何选择?,动态显
49、示的过程是什么?,在用共阳极数码管显示的电路中,如果直接将共阳极数码管换成共阴极数码管,能否正常显示?为什么?应采取什么措施?,工作模块八中,如果轻触开关改接P1.7,并且要求实现059循环计数,程序应如何修改?,工作模块七,数码管动态显示程序设计时如果把延时时间改为1s,会出现什么情况。,试一试,完成0999的计数器设计。,问题与讨论结,Thank You!,项目4 单片机键盘设计,项目4 单片机键盘设计,促成目标,知道键盘的接口方法和编程方法;,会按键和,键盘电路设计的方法;,会编写,键盘扫描和按键识别控制的,C,语言,程序,。,终极目标,能完成单片机的键盘电路的设计与制作,;,能完成键盘
50、扫描和按键识别控制的,C,语言,程序设计、运行及调试。,教学目标,任务10 独立式键盘设计,任务描述,使用AT89S52单片机,设计一个具有8个按键的独立式键盘,每个按键对应一个LED,。,功能要求:无键按下时,所以按键所接单片机引脚输出全为“1”,LED全部熄灭;有键按下时,按键所接单片机引脚输出为“0”,其所对应LED点亮。,任务分析,独立式键盘电路分析,独立式键盘的特点是每个按键单独占用一根I/O口线,每个按键的工作不会影响其它I/O线的状态。,每个按键的一端接地;按键的另一端与P0口的一个引脚相连,同时经上拉电阻接电源(+5V)。其中上拉电阻保证了按键在断开时,I/O线有高电平。,当无






