找回密码
 注册会员
更新自动建库工具PCB Footprint Expert 2024.04 Pro / Library Expert 破解版

2009单片机终极学习(三)---流水灯

[复制链接]
admin 发表于 2012-9-2 03:01:13 | 显示全部楼层 |阅读模式

本文包含原理图、PCB、源代码、封装库、中英文PDF等资源

您需要 登录 才可以下载或查看,没有账号?注册会员

×
本部分设定了隐藏,您已回复过了,以下是隐藏的内容
先看看流水灯是怎么样和芯片连接起来的吧!

5_42316_38cf4de6efa43f5.jpg

先从锁存器开始吧

5_42316_bc73b30b38d3d61.jpg

5_42316_8b7278bb34720e2.jpg

先来回顾锁存器是什么吧!!
锁存器 是一种对脉冲电平敏感的存储单元电路,它们可以在特定输入脉冲电平作用下改变状态。
  简单锁存器描述:输出端的状态不会随输入端的状态变化而变化,只有在有锁存信号时输入的状态被保存到输出,直到下一个锁存信号。通常只有0和1两个值。典型的逻辑电路是D触发器。
  由若干个钟控D触发器构成的一次能存储多位二进制代码的时序逻辑电路,叫锁存器件。
  逻辑结构与功能表
  8位锁存器74HC573的逻辑图见图所示。其中使能端G加入CP信号,D为数据信号。输出控制信号为0时,锁存器的数据通过三态门进行输出。
  应用场合:
  数据有效延迟后于时钟信号有效。这意味着时钟信号先到,数据信号后到。
在某些运算器电路中有时采用锁存器作为数据暂存器。

5_42316_c08182e38e6fb57.jpg

再来讲讲发光二极管!!!!
发光二极管
  发光二极管简称为LED。由镓(Ga)与砷(AS)、磷(P)的化合物制成的二极管,当电子与空穴复合时能辐射出可见光,因而可以用来制成发光二极管,在电路及仪器中作为指示灯,或者组成文字或数字显示。磷砷化镓二极管发红光,磷化镓二极管发绿光,碳化硅二极管发黄光。
  它是半导体二极管的一种,可以把电能转化成光能;常简写为LED。发光二极管与普通二极管一样是由一个PN结组成,也具有单向导电性。当给发光二极管加上正向电压后,从P区注入到N区的空穴和由N区注入到P区的电子,在PN结附近数微米内分别与N区的电子和P区的空穴复合,产生自发辐射的荧光。不同的半导体材料中电子和空穴所处的能量状态不同。当电子和空穴复合时释放出的能量多少不同,释放出的能量越多,则发出的光的波长越短。常用的是发红光、绿光或黄光的二极管。

5_42316_6418667bf27a991.jpg



  

发光二极管的反向击穿电压约5伏。它的正向伏安特性曲线很陡,使用时必须串联限流电阻以控制通过管子的电流。限流电阻R可用下式计算:
  R=(E-UF)/IF
  式中E为电源电压,UF为LED的正向压降,IF为LED的一般工作电流。发光二极管的两根引线中较长的一根为正极,应按电源正极。有的发光二极管的两根引线一样长,但管壳上有一凸起的小舌,靠近小舌的引线是正极。
  与小白炽灯泡和氖灯相比,发光二极管的特点是:工作电压很低(有的仅一点几伏);工作电流很小(有的仅零点几毫安即可发光);抗冲击和抗震性能好,可靠性高,寿命长;通过调制通过的电流强弱可以方便地调制发光的强弱。由于有这些特点,发光二极管在一些光电控制设备中用作光源,在许多电子设备中用作信号显示器。把它的管心做成条状,用7条条状的发光管组成7段式半导体数码管,每个数码管可显示0~9十个数目字。
  发光二极管分类
  发光二极管还可分为普通单色发光二极管、高亮度发光二极管、超高亮度发光二极管、变色发光二极管、闪烁发光二极管、电压控制型发光二极管、红外发光二极管和负阻发光二极管等。
  1.普通单色发光二极管 普通单色发光二极管具有体积小、工作电压低、工作电流小、发光均匀稳定、响应速度快、寿命长等优点,可用各种直流、交流、脉冲等电源驱动点亮。它属于电流控制型半导体器件,使用时需串接合适的限流电阻。
  普通单色发光二极管的发光颜色与发光的波长有关,而发光的波长又取决于制造发光二极管所用的半导体材料。红色发光二极管的波长一般为650~700nm,琥珀色发光二极管的波长一般为630~650 nm ,橙色发光二极管的波长一般为610~630 nm左右,黄色发光二极管的波长一般为585 nm左右,绿色发光二极管的波长一般为555~570 nm。
  常用的国产普通单色发光二极管有BT(厂标型号)系列、FG(部标型号)系列和2EF系列,见表4-26、表4-27和表4-28。
  常用的进口普通单色发光二极管有SLR系列和SLC系列等。
  2.高亮度单色发光二极管和超高亮度单色发光二极管 高亮度单色发光二极管和超高亮度单色发光二极管使用的半导体材料与普通单色发光二极管不同,所以发光的强度也不同。
  通常,高亮度单色发光二极管使用砷铝化镓(GaAlAs)等材料,超高亮度单色发光二极管使用磷铟砷化镓(GaAsInP)等材料,而普通单色发光二极管使用磷化镓(GaP)或磷砷化镓(GaAsP)等材料。
  常用的高亮度红色发光二极管的主要参数见表4-29,常用的超高亮度单色发光二极管的主要参数见表4-30。
  3.变色发光二极管 变色发光二极管是能变换发光颜色的发光二极管。变色发光二极管发光颜色种类可分为双色发光二极管、三色发光二极管和多色(有红、蓝、绿、白四种颜色)发光二极管。
  变色发光二极管按引脚数量可分为二端变色发光二极管、三端变色发光二极管、四端变色发光二极管和六端变色发光二极管。
  常用的双色发光二极管有2EF系列和TB系列,常用的三色发光二极管有2EF302、2EF312、2EF322等型号,见表4-31。
  4.闪烁发光二极管 闪烁发光二极管(BTS)是一种由CMOS集成电路和发光二极管组成的特殊发光器件,可用于报警指示及欠压、超压指示。其外形、内部结构图及内电路框图见图4-26和图4-27。
  闪烁发光二极管在使用时,无须外接其它元件,只要在其引脚两端加上适当的直流工作电压(5V)即可闪烁发光。
  5.电压控制型发光二极管 普通发光二极管属于电流控制型器件,在使用时需串接适当阻值的限流电阻。电压控制型发光二极管(BTV)是将发光二极管和限流电阻集成制作为一体,使用时可直接并接在电源两端
好现在看我们是怎样编程序点燃第一个发光二极管的!

5_42316_6de3093a5ad7af0.gif

注意,上面第一个图上发光二极管连的是P1口,下面的这张图是连的P0口,我们做试验都以这这个板子为基准

5_42316_8fed88232a4db60.jpg


插播两个内容,先来讲讲main主函数
Main 函数
格式:void main()
特点:无返回值,无参。
任何一个C程序有且仅有一个main函数,它是整个程序开始执行的入口。
例:void main()
{
总程序从这里开始执行;
其他语句;
}

其次是while函数

While (表达式)
{语句(内部也可为空)}
特点:先判断表达式,后执行语句。 原则:若表达式不是0,即为真,那么执行语句。否则跳出while 语句。


#include<reg52.h>//包含库函数
sbit D1=P0^0;//位定义
void main()
{
while(1)
{
D1=0;//点亮第一个二极管,51单片机默认全为高电平
}
}//位定义形式点亮二极管

位定义形式点亮第一个二极管!


#include<reg52.h> //52单片机头文件
void main() //主函数
{
P0=0xfe; //将单片机P1口的8个口由高到低分别赋值为11111110
while(1); //程序停止在这里,在后面会讲到为什么这样写。
}
[b]总线形式点亮第一个二极管!

现在介绍下烧录器!

我用的是这个



5_42316_2bba8eb8d674a4a.jpg


5_42316_468ce08fa169e41.jpg

这样我们就能点亮第一个发光二极管了,由此我迈开了单片机学习的第一步。

现在我们真正要开始单片机流水灯的控制了,确定我们进入程空时代!!

我们先来编个程序使发光二极管一闪一闪的发光二极管一闪一闪,其实就是单片机控制使二极管一段时间亮一段时间不亮所发生的效果,也就是说我们在编程序的时候要做的就是设定好时间阻隔。
#include<reg52.h>
sbit p1_1=P0^0;
unsigned int a;
void main()
{
while(1)
{
a=51000;//一个无符号整型的最大值是65535,大于这个数,单片机存储的就是(65535-X)
p1_1=0;//打开二极管
while(a--);//程序在这里延时,这里设计的大概是半秒钟
a=51000;// a的值在先前已经减到0,在赋值
while(a--);//到这就一秒钟了

p1_1=1;//关掉二极管
a=51000;//a的值在先前已经减到0,在赋值
while(a--);
a=51000;
while(a--);//在这函数已经执行完成,跳到下个while(1)函数,由于while值为1,所以函数继续进行
}
}

借这个程序来讲讲子程序和for函数
在计算机科学中,作为更大的程序的一部分,一个子程序(函数,过程,或者是子例程)是完成一项特定任务的代码序列,它由一个或多个语句块组成。这些代码通常被整合为软件库。

For (表达式1;表达式2;表达式3)
{ 语句(内部可为空)}
执行过程:
1.求解一次表达式1.
2.求解表达式2,若其值为真(非0 即为真),则执行for中语句。然后执行第3步。否则结束for 语句,直接跳出,不再执行第3步。
3.求解表达式3.
4.跳到第2步重复执行。


#include<reg52.h>
#define uint unsigned int //宏定义,结构是#define 定义名字 你要定义名字的类型
#define uchar unsigned char
sbit D1=P0^0;
void delay(uint);//带参数的子程序的声明,凡子函数都要先声明
void main()
{
while(1)
{
D1=0;
delay(100);//调用子函数
 楼主| admin 发表于 2012-9-2 03:01:19 | 显示全部楼层
D1=1;
delay(100);
}
}
void delay(uint z)
{
uint x;
uchar y;
for(x=z;x>0;x--)
for(y=1000;y>0;y--);
}

好了 ,最后我们就能达到流水灯的程序编写了,你一定看的懂了!!
在看程序之前我们先了解先这个循环左移函数,这个是c51已经封装好的,
#include <intrins.h>//左移函数包含在这个库函数里面
unsigned char _crol_ (unsigned char c, /* c代表要对这个字符循环左移 */
unsigned char b); /*循环移动的位数 */


#include<reg52.h>
#include <intrins.h>
#define uint unsigned int
#define uchar unsigned char
uchar temp,num,num1;
void delay(uint);

void main()
{

temp=0xfe;//先亮第一个二极管
while(1)
{

P0=temp;
delay(100);
temp=_crol_(temp,1);//左移亮,形成流水灯
delay(100);

}
}

void delay(uint z)
{
uint x,y;
for(x=z;x>0;x--)
for(y=110;y>0;y--);
}
就这样,流水灯你就顺利完成了!!!

好了,夜已经深了,共同提高是我们的要求,希望对大家有用,以后的学习待续~~~~~

[ 此贴被mai1258在2009-05-12 22:05重新编辑 ]
*滑块验证:
您需要登录后才可以回帖 登录 | 注册会员

本版积分规则

QQ|手机版|MCU资讯论坛 ( 京ICP备18035221号-2 )|网站地图

GMT+8, 2024-11-23 20:45 , Processed in 0.057641 second(s), 12 queries , Redis On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表