目录
说明
使用51最小系统,可以实现对所定义的led灯进行控制,通过编程,进而达到所需显示效果。
一、工具介绍
焊接工具:电烙铁,焊锡丝,烙铁架,斜口钳。
其他零件:①洞洞板(9cmx15cm一张),②51最小系统(卡座一枚),③STC89C51/89C52系列芯片(一枚),④晶振(11.0592MHZ),⑤电解电容(1uf 25V,一枚),⑥复位按键,排针开关,⑦瓷片电容(30pf,两枚),⑧LED灯(十枚,可按需求增添),⑨电阻(220Ω十枚,10KΩ复位电阻一枚)。
二、原理图
复位电路:主要用于控制单片机的启动状态。在单片机系统运行过程中,受到外界干扰而出现程序出错或直接死机、停止运行的时候,通过复位操作,单片机内部的烧录代码就会重新执行。复位方式一般分为自动复位和按键复位,为了编程的简单化,采用外部按键复位的方式。
时钟电路:其实本质就是一个晶体振荡电路,提供一个方波信号让单片机进行工作,因此单片机的运行速度及处理能力都是由时钟电路决定。XTAL1为反相放大器的输入端,XTAL2为反向放大器的输出端。本次制作中外接的石英晶体振荡器具有11.0592MHZ的振荡频率。
输出电路:通过程序分别控制单片机的不同I/O孔为高电平,为LED灯提供电源。
三、成品图
四、代码分析
1.C语言实现LED灯点亮
给LED灯定义管脚,通过高电平,低电平,控制LED灯的亮与灭
#include "reg52.h"
sbit LED1=P2^0; //将P2^0定义为LED1的管脚
void main()
{
LED1=0; //LED1设置为低电平,此时灯被点亮
while(1)
{
}
}
2.实现流水效果
代码如下(示例):
#include "reg52.h"
//给十个LED灯定义管脚
sbit led0 = P0^7;
sbit led1 = P2^3;
sbit led2 = P2^0;
sbit led3 = P2^1;
sbit led4 = P2^5;
sbit led5 = P2^6;
sbit led6 = P0^6;
sbit led7 = P0^3;
sbit led8 = P0^1;
sbit led9 = P0^5;
//延迟函数
void delay(unsigned int z)
{
unsigned int x,y; //定义无符号的int型x,y
for(x = z;x>0;x--)
for(y=110;y>0;y--);
}
//主函数
void main()
{
led0 = 0; //设置为低电平,此时灯点亮
delay(200); //延迟200ms
led0 = 1; //设置为高电平,此时灯熄灭
//实现led0~led10的闪烁
led1 = 0;delay(200);led1 = 1;
led2 = 0;delay(200);led2 = 1;
led3 = 0;delay(200);led3 = 1;
led4 = 0;delay(200);led4 = 1;
led5 = 0;delay(200);led5 = 1;
led6 = 0;delay(200);led6 = 1;
led7 = 0;delay(200);led7 = 1;
led8 = 0;delay(200);led8 = 1;
led9 = 0;delay(200);led9 = 1;
}
3.实现各种花里胡哨的效果
类似原理,可实现逐个点亮→全部点亮→逐个熄灭的效果:
#include "reg52.h"
sbit led0 = P0^7;
sbit led1 = P2^3;
sbit led2 = P2^0;
sbit led3 = P2^1;
sbit led4 = P2^5;
sbit led5 = P2^6;
sbit led6 = P0^6;
sbit led7 = P0^3;
sbit led8 = P0^1;
sbit led9 = P0^5;
void delay(unsigned int z)
{
unsigned int x,y;
for(x = z;x>0;x--)
for(y=110;y>0;y--);
}
void main()
{
led0 = 0; //亮
delay(200);//延迟200ms
led0 = 1; //灭
led1 = 0;delay(200);led1 = 1;
led2 = 0;delay(200);led2=1;led3=0;delay(200);led3=1;
led4 = 0;delay(200);led4=1;led5=0;delay(200);led5=1;
led6 = 0;delay(200);led6=1;led7=0;delay(200);led7=1;
led8 = 0;delay(200);led8=1;led9=0;delay(200);led9=1;
//全亮
led0 = 1;led1 = 1;led2 = 1;led3 =1;led4 = 1;led5 = 1;
led6 = 1;led7 = 1;led8 = 1;led9 = 1;
delay(1000);
//延迟熄灭
led0 = 0;delay(200);led1 = 0;delay(200);led2 = 0;delay(200);
led3 =0;delay(200);led4 = 0;delay(200);led5 = 0;delay(200);
led6 = 0;delay(200);led7 = 0;delay(200);led8 = 0;delay(200);led9 = 0;delay(200);
}
通过keil编译出可执行文件(.hex)并烧录到芯片,即可观察到预估效果。
总结
通过本次制作,加深对于C51管脚功能的理解,C语言的简单使用。