点亮小灯
硬件分析
该节内容以LED2为例
分析LED部分:
欲点亮LED2,则LED2需导通状态
Q16导通,DB0低电平时,此时LED2有压降,则LED2可导通
分析74HC245芯片:
72HC245
19号OE号脚,为使能引脚,该引脚接地,所以是低电平,该引脚低电平有效,故74HC245芯片可作用
1号脚是方向引脚,接VCC,故是高电平,所以是A编号引脚控制B编号引脚
A1号脚低电平则B1号脚低电平,即DB_0低电平则DB0低电平 ^DBX-0
分析74HC138芯片:
74HC138
4号脚E1为低电平有效,5号脚E2低电平有效,E3高电平有效
欲达到上述效果,则
ENLED低电平,此时E1和E2均为低电平
ADDR3高电平,此时E3高电平
此时,该芯片可正常使用
欲使Q16导通,则LEDS6需要为低电平,此时Q16才有压降,才可以导通
欲使LEDS6低电平,查真值表后,需要3号脚A2为高电平,2号脚A1为高电平,1号脚A0为低电平
欲达到以上效果,则
ADDR0为低电平,则A0为低电平
ADDR1为高电平,则A1为高电平
ADDR2为高电平,则A2为高电平 ^Q16-1
分析跳线部分:
欲时ADDR0低电平,则P1.0需要低电平
欲使ADDR1高电平,则P1.1需要高电平
欲使ADDR2高电平,则P1.2需要高电平
欲使ADDR3高电平,则P1.3需要高电平
欲使DB_0低电平,则P0.0需要低电平
欲使ENLED低电平,则P1.4需要低电平
综上:
欲电亮小灯,
P0.0低电平,等效于DB_0低电平
P1.0低电平,等效于ADDR0低电平
P1.1高电平,等效于ADDR1高电平
P1.2高电平,等效于ADDR2高电平
P1.3高电平,等效于ADDR3高电平
P1.4低电平,等效于ENLED低电平
代码
点亮 LED2
- #include<reg52.h>
- sbit LED = P0 ^ 0;
- sbit ADDR0 = P1 ^ 0;
- sbit ADDR1 = P1 ^ 1;
- sbit ADDR2 = P1 ^ 2;
- sbit ADDR3 = P1 ^ 3;
- sbit ENLED = P1 ^ 4;
- void main()
- {
- ENLED = 0;
- ADDR3 = 1;//U3 74HC138芯片使能
- ADDR2 = 1;
- ADDR1 = 1;
- ADDR0 = 0;//三极管导通
- LED = 0;//灯亮
- while (1);
- }
复制代码 点亮LED3
- #include<reg52.h>
- sbit LED = P0 ^ 1;
- sbit ADDR0 = P1 ^ 0;
- sbit ADDR1 = P1 ^ 1;
- sbit ADDR2 = P1 ^ 2;
- sbit ADDR3 = P1 ^ 3;
- sbit ENLED = P1 ^ 4;
- void main()
- {
- ENLED = 0;
- ADDR3 = 1;//U3 74HC138芯片使能
- ADDR2 = 1;
- ADDR1 = 1;
- ADDR0 = 0;//三极管导通
- LED = 0;//灯亮
- while (1);
- }
复制代码 点亮LED4
- #include<reg52.h>
- sbit LED = P0 ^ 2;
- sbit ADDR0 = P1 ^ 0;
- sbit ADDR1 = P1 ^ 1;
- sbit ADDR2 = P1 ^ 2;
- sbit ADDR3 = P1 ^ 3;
- sbit ENLED = P1 ^ 4;
- void main()
- {
- ENLED = 0;
- ADDR3 = 1;//U3 74HC138芯片使能
- ADDR2 = 1;
- ADDR1 = 1;
- ADDR0 = 0;//三极管导通
- LED = 0;//灯亮
- while (1);
- }
复制代码 点亮LED5
- #include<reg52.h>
- sbit LED = P0 ^ 3;
- sbit ADDR0 = P1 ^ 0;
- sbit ADDR1 = P1 ^ 1;
- sbit ADDR2 = P1 ^ 2;
- sbit ADDR3 = P1 ^ 3;
- sbit ENLED = P1 ^ 4;
- void main()
- {
- ENLED = 0;
- ADDR3 = 1;//U3 74HC138芯片使能
- ADDR2 = 1;
- ADDR1 = 1;
- ADDR0 = 0;//三极管导通
- LED = 0;//灯亮
- while (1);
- }
复制代码 点亮LED6
- #include<reg52.h>
- sbit LED = P0 ^ 4;
- sbit ADDR0 = P1 ^ 0;
- sbit ADDR1 = P1 ^ 1;
- sbit ADDR2 = P1 ^ 2;
- sbit ADDR3 = P1 ^ 3;
- sbit ENLED = P1 ^ 4;
- void main()
- {
- ENLED = 0;
- ADDR3 = 1;//U3 74HC138芯片使能
- ADDR2 = 1;
- ADDR1 = 1;
- ADDR0 = 0;//三极管导通
- LED = 0;//灯亮
- while (1);
- }
复制代码 点亮LED7
- #include<reg52.h>
- sbit LED = P0 ^ 5;
- sbit ADDR0 = P1 ^ 0;
- sbit ADDR1 = P1 ^ 1;
- sbit ADDR2 = P1 ^ 2;
- sbit ADDR3 = P1 ^ 3;
- sbit ENLED = P1 ^ 4;
- void main()
- {
- ENLED = 0;
- ADDR3 = 1;//U3 74HC138芯片使能
- ADDR2 = 1;
- ADDR1 = 1;
- ADDR0 = 0;//三极管导通
- LED = 0;//灯亮
- while (1);
- }
复制代码 点亮LED8
- #include<reg52.h>
- sbit LED = P0 ^ 6;
- sbit ADDR0 = P1 ^ 0;
- sbit ADDR1 = P1 ^ 1;
- sbit ADDR2 = P1 ^ 2;
- sbit ADDR3 = P1 ^ 3;
- sbit ENLED = P1 ^ 4;
- void main()
- {
- ENLED = 0;
- ADDR3 = 1;//U3 74HC138芯片使能
- ADDR2 = 1;
- ADDR1 = 1;
- ADDR0 = 0;//三极管导通
- LED = 0;//灯亮
- while (1);
- }
复制代码 点亮LED9
- #include<reg52.h>
- sbit LED = P0 ^ 7;
- sbit ADDR0 = P1 ^ 0;
- sbit ADDR1 = P1 ^ 1;
- sbit ADDR2 = P1 ^ 2;
- sbit ADDR3 = P1 ^ 3;
- sbit ENLED = P1 ^ 4;
- void main()
- {
- ENLED = 0;
- ADDR3 = 1;//U3 74HC138芯片使能
- ADDR2 = 1;
- ADDR1 = 1;
- ADDR0 = 0;//三极管导通
- LED = 0;//灯亮
- while (1);
- }
复制代码 小灯闪烁
LED2闪烁
- #include <reg52.h>
- sbit LED = P0 ^ 0;
- sbit ADDR0 = P1 ^ 0;
- sbit ADDR1 = P1 ^ 1;
- sbit ADDR2 = P1 ^ 2;
- sbit ADDR3 = P1 ^ 3;
- sbit ENLED = P1 ^ 4;
- void main()
- {
- unsigned int i = 0;
- ENLED = 0;
- ADDR3 = 1;//U3 74HC138芯片使能
- ADDR2 = 1;
- ADDR1 = 1;
- ADDR0 = 0;//三极管导通
- while (1)
- {
- LED = 0;//灯亮
- for (i = 0; i < 30000; ++i);//非精确延时
- LED = 1;//灯灭
- for (i = 0; i < 30000; ++i);//非精确延时
- }
- }
复制代码 LED3闪烁
- #include <reg52.h>
- sbit LED = P0 ^ 1;
- sbit ADDR0 = P1 ^ 0;
- sbit ADDR1 = P1 ^ 1;
- sbit ADDR2 = P1 ^ 2;
- sbit ADDR3 = P1 ^ 3;
- sbit ENLED = P1 ^ 4;
- void main()
- {
- unsigned int i = 0;
- ENLED = 0;
- ADDR3 = 1;//U3 74HC138芯片使能
- ADDR2 = 1;
- ADDR1 = 1;
- ADDR0 = 0;//三极管导通
- while (1)
- {
- LED = 0;//灯亮
- for (i = 0; i < 30000; ++i);//非精确延时
- LED = 1;//灯灭
- for (i = 0; i < 30000; ++i);//非精确延时
- }
- }
复制代码 LED4闪烁
- #include <reg52.h>
- sbit LED = P0 ^ 2;
- sbit ADDR0 = P1 ^ 0;
- sbit ADDR1 = P1 ^ 1;
- sbit ADDR2 = P1 ^ 2;
- sbit ADDR3 = P1 ^ 3;
- sbit ENLED = P1 ^ 4;
- void main()
- {
- unsigned int i = 0;
- ENLED = 0;
- ADDR3 = 1;//U3 74HC138芯片使能
- ADDR2 = 1;
- ADDR1 = 1;
- ADDR0 = 0;//三极管导通
- while (1)
- {
- LED = 0;//灯亮
- for (i = 0; i < 30000; ++i);//非精确延时
- LED = 1;//灯灭
- for (i = 0; i < 30000; ++i);//非精确延时
- }
- }
复制代码 LED5闪烁
- #include <reg52.h>
- sbit LED = P0 ^ 3;
- sbit ADDR0 = P1 ^ 0;
- sbit ADDR1 = P1 ^ 1;
- sbit ADDR2 = P1 ^ 2;
- sbit ADDR3 = P1 ^ 3;
- sbit ENLED = P1 ^ 4;
- void main()
- {
- unsigned int i = 0;
- ENLED = 0;
- ADDR3 = 1;//U3 74HC138芯片使能
- ADDR2 = 1;
- ADDR1 = 1;
- ADDR0 = 0;//三极管导通
- while (1)
- {
- LED = 0;//灯亮
- for (i = 0; i < 30000; ++i);//非精确延时
- LED = 1;//灯灭
- for (i = 0; i < 30000; ++i);//非精确延时
- }
- }
复制代码 LED6闪烁
- #include <reg52.h>
- sbit LED = P0 ^ 4;
- sbit ADDR0 = P1 ^ 0;
- sbit ADDR1 = P1 ^ 1;
- sbit ADDR2 = P1 ^ 2;
- sbit ADDR3 = P1 ^ 3;
- sbit ENLED = P1 ^ 4;
- void main()
- {
- unsigned int i = 0;
- ENLED = 0;
- ADDR3 = 1;//U3 74HC138芯片使能
- ADDR2 = 1;
- ADDR1 = 1;
- ADDR0 = 0;//三极管导通
- while (1)
- {
- LED = 0;//灯亮
- for (i = 0; i < 30000; ++i);//非精确延时
- LED = 1;//灯灭
- for (i = 0; i < 30000; ++i);//非精确延时
- }
- }
复制代码 LED7闪烁
- #include <reg52.h>
- sbit LED = P0 ^ 5;
- sbit ADDR0 = P1 ^ 0;
- sbit ADDR1 = P1 ^ 1;
- sbit ADDR2 = P1 ^ 2;
- sbit ADDR3 = P1 ^ 3;
- sbit ENLED = P1 ^ 4;
- void main()
- {
- unsigned int i = 0;
- ENLED = 0;
- ADDR3 = 1;//U3 74HC138芯片使能
- ADDR2 = 1;
- ADDR1 = 1;
- ADDR0 = 0;//三极管导通
- while (1)
- {
- LED = 0;//灯亮
- for (i = 0; i < 30000; ++i);//非精确延时
- LED = 1;//灯灭
- for (i = 0; i < 30000; ++i);//非精确延时
- }
- }
复制代码 LED8闪烁
- #include <reg52.h>
- sbit LED = P0 ^ 6;
- sbit ADDR0 = P1 ^ 0;
- sbit ADDR1 = P1 ^ 1;
- sbit ADDR2 = P1 ^ 2;
- sbit ADDR3 = P1 ^ 3;
- sbit ENLED = P1 ^ 4;
- void main()
- {
- unsigned int i = 0;
- ENLED = 0;
- ADDR3 = 1;//U3 74HC138芯片使能
- ADDR2 = 1;
- ADDR1 = 1;
- ADDR0 = 0;//三极管导通
- while (1)
- {
- LED = 0;//灯亮
- for (i = 0; i < 30000; ++i);//非精确延时
- LED = 1;//灯灭
- for (i = 0; i < 30000; ++i);//非精确延时
- }
- }
复制代码 LED9闪烁
- #include <reg52.h>
- sbit LED = P0 ^ 7;
- sbit ADDR0 = P1 ^ 0;
- sbit ADDR1 = P1 ^ 1;
- sbit ADDR2 = P1 ^ 2;
- sbit ADDR3 = P1 ^ 3;
- sbit ENLED = P1 ^ 4;
- void main()
- {
- unsigned int i = 0;
- ENLED = 0;
- ADDR3 = 1;//U3 74HC138芯片使能
- ADDR2 = 1;
- ADDR1 = 1;
- ADDR0 = 0;//三极管导通
- while (1)
- {
- LED = 0;//灯亮
- for (i = 0; i < 30000; ++i);//非精确延时
- LED = 1;//灯灭
- for (i = 0; i < 30000; ++i);//非精确延时
- }
- }
复制代码 流水灯
右向左
[code]#include sbit ADDR0 = P1 ^ 0;sbit ADDR1 = P1 ^ 1;sbit ADDR2 = P1 ^ 2;sbit ADDR3 = P1 ^ 3;sbit ENLED = P1 ^ 4;void main(){ unsigned int i = 0; char cnt = 0; ENLED = 0; ADDR3 = 1;//U3 74HC138芯片使能 ADDR2 = 1; ADDR1 = 1; ADDR0 = 0;//三极管导通 while (1) { if (8 == cnt)//到最左边,需要进行复位,点亮最右边 cnt = 0; P0 = ~(1 |