




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、项目三 广告彩灯的设计制作 1任务设计并制作一个广告彩灯。2要求能实现小灯轮流点亮。点亮间隔为。设计时要求采用MCS-51系列单片机作为控制内核,延时要求选用软件延时和定时器延时两种模式。1第一部分 项目成果展示2第二部分 任务分析近年来,随着社会经济的发展,人们的生活也越来越丰富多彩,变化众多的彩灯也被大量应用在广告工程、花车、彩车、花灯、花船制作、亮化工程、大型装饰、装修工程等领域。但如何设计,怎样更为方便、实用,怎样才会具有更强移植性一直是众多设计者追求的目标。3花船大型装饰花灯兵马俑彩灯4它们是如何设计制造的呢?请大家利用所学知识列举集中设计方法,尤其注意如何控制它们。(按已预先分组讨
2、论,提交讨论结果,抽取其中12组公布设计方案)5相关知识 目 录 3.1 单片机的I/O口 3.2 LED发光二极管工作原理 3.3 C51程序结构与语句介绍 3.4 C函数介绍 3.5 软件延时介绍 3.6 硬件电路设计6单片机I/O口 80C51单片机有4个8位的双向并行输入/输出(I/O)端口,称为P0口、P1口、P2口和P3口。P0口是一个双功能的8位并行I/O口,字节地址为80H,位地址为80H87H。可作输入/输出端口使用,又可作地址/数据总线分时传输低8位地址和8位数据。P1口是单一功能的并行I/O口,字节地址为90H,位地址为90H97H。它只用作通用的数据输入/输出口。7 P
3、2口是一个双功能的8位并行I/O口,字节地址为80H,位地址为A0HA7H。可作通用的输入/输出口用,又可用作高8位地址总线。 P3口是一个双功能的8位并行I/O口,字节地址为B0H,位地址为B0HB7H,它的第一功能是通用输入/输出口,作第二功能用时,各引脚定义如下:P3.0:RXD(串行口输入);P3.1:TXD(串行口输出)P3.2: (外部中断0输入) P3.3: (外部中断1输入)P3.4:T0(定时/计数器0外部计数脉冲输入)P3.5:T1(定时/计数器1外部计数脉冲输入)P3.6: (片外数据存储器写选通信号输出)P3.7: (片外数据存储器读选通信号输出)。8 P0口的结构与运
4、作 图中画出了P0口的某位(X=0、16、7)的结构图。 P0口的位电路结构由以下几个部分组成:1个输出锁存器,用于进行输出数据的锁存;2个三态输入缓冲器,分别用于锁存器和引脚数据的输入缓冲;1个多路开关MUX,它的一个输入来自锁存器,另一个输入是地址/数据信号的反相输出。在控制信号的的控制下能实现对锁存器输出端和地址/数据线之间的切换;由两只场效应管组成的输出驱动电路。9 P0口的特点P0口是一个双功能的端口:地址/数据分时复用口和通用I/O口;具有高电平、低电平和高阻抗3种状态的I/O端口称为双向I/O端口。P0口作地址/数据总线复用口时,相当于一个真正的双向I/O口。而用作通用I/O口时
5、,由于引脚上需要外接上拉电阻,端口不存在高阻(悬空)状态,此时P0口只是一个准双向口;为保证引脚上的信号能正确读入,在读入操作前应首先向锁存器写1;单片机复位后,锁存器自动被置1; 一般情况下,如果P0口已作为地址/数据复用口时,就不能再用作通用I/O口使用;P0口能驱动8个TTL负载。10 P1口的结构与运作 P1口的位结构如图所示。P1口是一个准双向口,只作通用输入/输出口使用。除了无多路开关MUX之外,其输出驱动部分也与P0口不同。 P1口的位电路结构由以下几个部分组成: 一个数据输出锁存器,用于输出数据的锁存; 两个三态输入缓冲器,BUF1用于读锁存器,BUF2用于读引脚; 数据输出驱
6、动电路,由场效应管VT和片内上拉电阻R组成。11 P1口的特点 P1口由于有内部上拉电阻,没有高阻抗输入状态,所以称为准双向口。作为输出口时,不需要再在片外拉接上拉电阻; P1口读引脚输入时,必须先向锁存器写入1,其原理与P0口相同; P1口能驱动4个TTL负载。12 P2口的结构与运作 从图中可见,P2口的位结构比P1口多了一个多路开关MUX。 P2口的位电路结构由以下几个部分组成: 一个数据输出锁存器,用于输出数据的锁存; 两个三态输入缓冲器,BUF1用于读锁存器,BUF2用于读引脚; 一个多路开关MUX,它的一个输入来自锁存器的Q端,另一个输入来自内部地址的高8位; 数据输出驱动电路由非
7、门M,场效应管VT和片内上拉电阻R组成。13 P2口的特点 P2口用作高8位地址输出线应用时,与P0口输出的低8位地址一起构成16位的地址总线,可以寻址64KB地址空间。 当P2口作高8位地址输出口时,其输出锁存器原锁存的内容保持不变。 作为通用I/O口使用时,P2口为准双向口,功能与P1口一样。 P2口能驱动4个TTL负载。14 P3口的结构组成 P3口是双功能8位输入/输出口,内部结构中增加了第二输入/输出功能,如图所示。 P3口的位电路结构由以下几个部分组成:一个数据输出锁存器,用于输出数据的锁存; 3个三态输入缓冲器,BUF1用于读锁存器,BUF2、BUF3用于读引脚和 第二功能数据的
8、缓冲输入; 数据输出驱动电路,由与非门M,场效应管VT和片内上拉电阻R组成。15 P3口的特点P3口内部有上拉电阻,不存在高阻输入状态,是一个准双向口;P3口作第二功能的输出/输入或作通用输入时,均需将相应的锁存器置1。实际应用中,由于复位后P3口锁存器自动置1,已满足第二功能运作条件,所以可以直接进行第二功能操作;P3口的某位不作为第二功能使用时,则自动处于通用输出/输入口功能,可作为通用输出/输入口使用;作通用输出/输入口使用时,输入信号取自缓冲器BUF2的输出端,作第二功能使用时,输入信号取自缓冲器BUF3的输出端;P3口能驱动4个TTL负载。163.2 LED发光二极管工作原理介绍传统
9、的彩灯多使用热光源器件,但耗能较为突出,近年来,由于冷光源发光器件的节能、寿命长、价格便宜等突出优点,它的应用日益广泛,因此,本项目的设计考虑使用冷光源器件发光二极管来实现。17 发光二极管简称LED,采用砷化镓、镓铝砷、和磷化镓等材料制成,其内部结构为一个PN结,具有单向导电性。当在发光二极管PN结上加正向电压时,PN结势垒降低,载流子的扩散运动大于漂移运动,致使P区的空穴注入到N区,N区的电子注入到P区,这样相互注入的空穴与电子相遇后会产生复合,复合时产生的能量大部分以光的形式出现,因此而发光。 发光二极管在制作时,由于使用材料不同,可以发出不同颜色的光。 发光二极管的发光颜色有:红、黄、
10、绿、蓝等。 3.2 LED发光二极管工作原理介绍18发光二极管在其两端的电压差超出其导通压降时开始工作,一般为左右。此外,还需保证该二极管的工作电流。当满足电流和电压的要求时,发光二极管就可以发光了。 3.2 LED发光二极管工作原理介绍 发光二极管原理图( A表示阳极 ,K表示阴极)19二极管的判断如下:二极管的正负极可以用万用表的二极管档量出来,如果表上有了一点几几的读数,红表笔接的就是发光二极管的正极,黑表笔接的就是负极。从外观上看,发光二极管的正极引脚比较长。 单片机系统中的逻辑信号,不是5V就是0V。但一般二极管的点亮电流为5mA至10mA,因此,二极管和单片机连接时,需要串接一个限
11、流电阻,从而达到减少功耗的目的或者满足端口对最大电流的限制。 3.2 LED发光二极管工作原理介绍203.2 LED发光二极管工作原理介绍21单片机的I/O口可通过编程送出相应的高电平和低电平(高电平一般为5V,低电平为0V),这样就有让发光二极管点亮有: P1=0 x00;/P1口上输出低电平让发光二极管熄灭有: P1=0 xff;/P1口上输出高电平而仅对上所接的发光管操作,需要先定义这一位再使用,于是有:#include sbit P1_7=P17;void mian( )上输出低电平上输出高电平3.2 LED发光二极管工作原理介绍22C51的基本结构 从程序流程的角度来看,程序可以分为
12、三种基本结构, 即顺序结构、分支结构、循环结构。 3.3 C51程序结构与语句介绍 顺序结构分支结构循环结构23C51的语句 C51的语句主要有8种,它们是:if()else ;条件语句for() ;循环语句while() ; 循环语句do while() ; 循环语句continue ;结束本次循环语句break ;终止执行循环语句switch ;多分支选择语句goto ;跳转语句3.3 C51程序结构与语句介绍 24if语句if语句根据给定的条件进行判断,以决定执行某个分支程序段。语言的if语句有三种基本形式。第一种形式为基本形式: if(表达式) 语句其语义是:如果表达式的值为真,则执行
13、其后的语句, 否则不执行该语句。3.3 C51程序结构与语句介绍 25if语句第二种形式为: if/elseif(表达式) 语句1; else 语句2;其语义是:如果表达式的值为真,则执行语句1,否则执行语句2 。3.3 C51程序结构与语句介绍 26if语句第三种形式为if/else if形式前二种形式的 if语句一般都用于两个分支的情况。当有多个分支选择时,可采用if-else-if语句,其一般形式为: if(表达式1) 语句1; else if(表达式2) 语句2; else if(表达式3) 语句3; else if(表达式m) 语句m; else 语句n;其语义是:依次判断表达式的值
14、,当出现某个值为真时,则执行其对应的语句。然后跳到整个if语句之外继续执行程序。 如果所有的表达式均为假,则执行语句n。然后继续执行后续程序。3.3 C51程序结构与语句介绍 27例3-2 根据分数score分别打出A、B、C、D、E五个等级。#includestdio.hmain() char score;if(score=90) printf(“Your result is an An”);else if(score=80) printf(“Your result is an Bn”);else if(score=70) printf(“Your result is an Cn”);els
15、e if(score=60) printf(“Your result is an Dn”);else printf(“Your result is an En”);3.3 C51程序结构与语句介绍 28switch语句语言还提供了另一种用于多分支选择的switch语句, 其一般形式为: switch(表达式) case常量表达式1: 语句1; case常量表达式2: 语句2; case常量表达式n: 语句n; default : 语句n+1; 其语义是:计算表达式的值。并逐个与其后的常量表达式值相比较,当表达式的值与某个常量表达式的值相等时,即执行其后的语句,然后不再进行判断,继续执行后面所有
16、case后的语句。如表达式的值与所有case后的常量表达式均不相同时,则执行default后的语句。3.3 C51程序结构与语句介绍 29例3-3 根据输入星期的数字,输出相应的星期英文名称main() int a; printf(input integer number: ); scanf(%d,&a);switch (a) case 1:printf(Mondayn);case 2:printf(Tuesdayn);case 3:printf(Wednesdayn);case 4:printf(Thursdayn);case 5:printf(Fridayn);case 6:printf(
17、Saturdayn);case 7:printf(Sundayn);default:printf(errorn); 3.3 C51程序结构与语句介绍 30在使用switch语句时还应注意以下几点:在case后的各常量表达式的值不能相同,否则会出现错误。在case后,允许有多个语句,可以不用括起来。各case和default子句的先后顺序可以变动,而不会影响程序执行结果。default子句可以省略不用。3.3 C51程序结构与语句介绍 31goto语句goto语句是一种无条件转移语句。goto 语句的使用格式为: goto 语句标号;其中标号是一个有效的标识符,这个标识符加上一个“:”一起出现在
18、函数内某处, 执行goto语句后,程序将跳转到该标号处并执行其后的语句。另外标号必须与goto语句同处于一个函数中,但可以不在一个循环层中。通常goto语句与if条件语句连用, 当满足某一条件时, 程序跳到标号处运行。 goto语句通常不用,主要因为它将使程序层次不清,且不易读,但在多层嵌套退出时, 用goto语句则比较合理。3.3 C51程序结构与语句介绍 32例3-4 求1到100这几个数的和。main() int i,sum=0; i=1;loop: if(i=100) sum=sum+i; i+; goto loop; printf(%dn,sum);3.3 C51程序结构与语句介绍
19、33while语句while语句的一般形式为: while(表达式)语句其中表达式是循环条件,语句为循环体。while语句的语义是:计算表达式的值,当值为真(非0)时, 执行循环体语句。使用while语句应注意以下几点:while语句中的表达式一般是关系表达或逻辑表达式,只要表达式的值为真(非0)即可继续循环。循环体如包括有一个以上的语句,则必须用括起来,组成复合语句。3.3 C51程序结构与语句介绍 34例3-5用while语句求1到100这几个数的和。main() int i,sum=0; i=1; while(i=100) sum=sum+i; i+; printf(%dn,sum);3
20、.3 C51程序结构与语句介绍 35do/while语句do/while语句的一般形式为: do 语句; while(表达式);这个循环与while循环的不同在于:它先执行循环中的语句,然后再判断表达式是否为真, 如果为真则继续循环;如果为假, 则终止循环。因此, do-while循环至少要执行一次循环语句。3.3 C51程序结构与语句介绍 36例3-6 用do-while语句求1到100这几个数的和。main() int i,sum=0; i=1; do sum=sum+i; i+; while(i=100) printf(%dn,sum);3.3 C51程序结构与语句介绍 37for语句在
21、C语言中,for语句使用最为灵活,它完全可以取代 while 语句。它的一般形式为: for(表达式1;表达式2;表达式3) 语句它的执行过程如下:先求解表达式1。求解表达式2,若其值为真(非0),则执行for语句中指定的内嵌语句,然后执行下面第3)步;若其值为假(0),则结束循环,转到第5)步。求解表达式3。转回上面第2)步继续执行。循环结束,执行for语句下面的一个语句。3.3 C51程序结构与语句介绍 38for语句最简单的应用形式也是最容易理解的形式如下: for(循环变量赋初值;循环条件;循环变量增量) 语句 循环变量赋初值总是一个赋值语句, 它用来给循环控制变量赋初值; 循环条件是
22、一个关系表达式,它决定什么时候退出循环;循环变量增量,定义循环控制变量每循环一次后按什么方式变化。这三个部分之间用“;”分开。注意:for循环中的“表达式1(循环变量赋初值)”、“表达式2(循环条件)”和“表达式3(循环变量增量)”都是选择项, 即可以缺省,但“;”不能缺省。省略了“表达式1(循环变量赋初值)”, 表示不对循环控制变量赋初值。省略了“表达式2(循环条件)”, 则不做其它处理时便成为死循环。3.3 C51程序结构与语句介绍 39例3-7 用for语句求1到100这几个数的和。main() int i,sum=0;for(i=1;i=100; i+)sum=sum+i; print
23、f(%dn,sum);3.3 C51程序结构与语句介绍 40break语句 break语句通常用在循环语句和开关语句中。当break用于开关语句switch中时,可使程序跳出witch而执行switch以后的语句;如果没有break语句,则将成为一个死循环而无法退出。 当break语句用于do-while、for、while循环语句中时,可使程序终止循环而执行循环后面的语句, 通常break语句总是与if语句联在一起。即满足条件时便跳出循环。3.3 C51程序结构与语句介绍 41例3-8下面一段程序用于计算圆的面积,当计算到面积大于100时,由break语句跳出循环。#includemain(
24、) char r,area; for (r=1;r100) break;/大于100时跳出循环 printf(“%fn”,area); 注意:break语句对if-else的条件语句不起作用。在多层循环中, 一个break语句只向外跳一层。 3.3 C51程序结构与语句介绍 42例3-8下面一段程序用于计算圆的面积,当计算到面积大于100时,由break语句跳出循环。#includemain() char r,area; for (r=1;r100) break;/大于100时跳出循环 printf(“%fn”,area); 注意:break语句对if-else的条件语句不起作用。在多层循环中
25、, 一个break语句只向外跳一层。 3.3 C51程序结构与语句介绍 43continue语句 continue语句的作用是跳过循环体中剩余的语句而强行执行下一次循环。continue语句只用在for、while、do-while等循环体中,常与if条件语句一起使用,用来加速循环。 continue语句和break语句的区别在于: continue语句只是结束本次循环而不是终止整个循环;break语句则是结束循环,不再进行条件判断。3.3 C51程序结构与语句介绍 44例3-9 输出100-200间不能被3整除的数。main() unsigned char i;for(i=100;i=200
26、;i+)if(i%3=0)continue;printf(“%d ”;i); 3.3 C51程序结构与语句介绍 45例3-9 输出100-200间不能被3整除的数。main() unsigned char i;for(i=100;ib) return a; else return b;3.4 C函数介绍 51函数的值只能通过return语句返回主调函数。return 语句的一般形式为: return 表达式;或者为: return (表达式);不返回函数值的函数,可以明确定义为“空类型”,类型说明符为“void”。 3.4 C函数介绍 52在语言中,所有的函数定义,包括主函数main在内,都是
27、平行的。也就是说,在一个函数的函数体内,不能再定义另一个函数,即不能嵌套定义。但是函数之间允许相互调用,也允许嵌套调用。习惯上把调用者称为主调函数。函数还可以自己调用自己,称为递归调用。递归调用的函数必须用reentrant修饰符进行修饰。其形式为:类型说明符 函数名(类型 形参,类型 形参) reentrant3.4 C函数介绍 53例3-11 用递归法计算n!#include /包含特殊功能寄存器库#include /包含I/O函数库int fac(int n) reentrantint result;if (n=0)result=1;elseresult=n*fac(n-1);retur
28、n(result);main()int fac_result;fac_result=fac(11);printf(“%dn”,fac_result);3.4 C函数介绍 54单片机的运行过程就是一条条指令的执行过程,而每条指令的执行都需要时间,这个时间的快慢与单片机所使用的晶振频率有关。因此,当让单片机执行多条空语句时就可以实现延时,执行越多延时也就越长,所以常常利用一个循环程序来实现延时。例如下面是一个m毫秒的延时程序。void delay(unsigned int m)/形参必须是整形char n;for(;m0;m-)for(n=124;n0;n-)/124的选取与晶振有关,这里是12MHz的晶振; /空语句函数通过反复多次执行“;”(空语句)语句实现延时。3.5 软件延时介绍55根据以上分别介绍的该项目各个关键功能和实现电路,将给出该项目完整的
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 门锁维修服务合同协议书
- 2025年计算机二级ACCESS备考全攻略及试题及答案
- 秘笈分享ACCESS考试试题及答案完整解析
- 重视表达的现代汉语学习方法试题及答案
- 设计未来2025年计算机一级Photoshop试题与答案
- 食品供销合同协议书
- 高效备考文学概论的试题与答案
- C语言解题步骤2025年考试试题及答案
- 阐述数据完整性与一致性试题及答案
- 删除联系人合同协议书
- 绿色新能源-海洋能课件
- 机房空调升级改造方案
- 中考复习课《金属的化学性质复习》初中化学公开课教学课件
- 博士后出站研究报告
- 内科学教学课件:脑梗死
- 企业安全生产费用投入计划表
- 【审计工作底稿模板】FK长期借款
- 初中历史优质课说课稿《贞观之治》
- arcgis网络分析.
- ROHS环保指令知识培训 ppt课件
- 车站线路全长与有效长ppt课件
评论
0/150
提交评论