day01 51单片机

疯狂学习单片机的第一天

定个小目标:

  • 点亮单个灯
  • 操控灯泡的二进制闪烁&运用补码

知识储备:

点亮 LED 小灯泡的秘诀在于 使 LEDS6 应为Q16 9012 是PNP型 有箭头的始端比末端高 就能导通的原理,又因为始端是5V,所以使LEDS6为低电压。 找到 U3 的74HC138 三八译码器,查找资料可以知道其中对应Y6口的关系。 要使它为低电平(L),也就是LEDS6 低电平。 可以发现 当G1为高电平,G2为低电平时,才是可控制的。

  • 待会把G2为低电平,G1为高电平,

可控制后,A B C 的关系于输出口的关系有进制的关系,可以把低电位L看作二进制0。 A是右边第一位,因为6对应 110 所以C'H' B'H' A'H'.


那么如何控制 G2,G1呢? G1 G2 分别对应单片机上的 (E1,E2),E3

也就是 使能引脚~~(端)~~,


那怎样去调 EnLED{ G1 }为低电平? ADDR3 以及其他三个呢?

可以看到 选择跳线 可以知道 ADDR0~3 是由 P1 的前四个IO口决定,ENLED = p1.4(终于游到了中央!)

而一个P口是八位,也就是有 8 个IO口

先去试下,最简单的代码吧!!!

1
2
3
4
	ADDR0 = 0;
	ADDR1 = 1;
	ADDR2 = 1;
	ADDR3 = 1;

额,似乎 它只是让我们打开了LED灯的电源,并且干脆试了下,但是并没有亮,可以知道DB 端全是高电位。

但还又叫他们怎么亮,既然上方已经通电,那么就要把下方的DB 大逼哥打一顿!


大逼哥由 U2的74HC245 控制,查看资料然并卵,不管它,似乎AB之间是对应控制的.

A端 由 P0 控制,我们暂且点一个灯,come on!

这期间犯了个错误,就是忘记把C文件放进去,/(ㄒoㄒ)/~~

1
2
3
4
5
6
7
8
9
void main(){
	ENLED = 0;
	ADDR0 = 0;
	ADDR1 = 1;
	ADDR2 = 1;
	ADDR3 = 1;
	LED0 = 0;
	while(1);
}

OK!


开始花里胡哨的灯。

  • 直接用P0控制灯, 不用啥子点了。P0^0;
P0 = 0xFF;
P0--;

如同这个一样,我们也要把开关抽象一下!

先回顾一下:

  • ADDR0~3 由 P1^1……3, 使能引脚ENLED 由 P1^4;所以可以看作 P1 为阀门。
  • 我们已经把P0 抽象成8位的LED 控制开关了。

P1^0……3 控制着ADDR* 也就是 三八译码器 74HC138 的开关。

其的 四个位的二进制决定着,也就是 P1的前四位, P0@F;

所以P1=0x0(1……6) 控制LED数据输出

P4P3P2P1P0
ENLEDADDR3ADDR2ADDR1ADDR0对应“开关“
0 有效1高有效110LED灯 P1=0x0F -1

似乎P1=0x0@…… 影响了晶振,anyway,明天搞搞蜂鸣器,然后看看视频,蛮不错的。

updatedupdated2020-05-312020-05-31
加载评论