开天辟地第一章

硬件DIY一直是技术宅的另外一个标杆,如果说真正能够将软件和硬件玩到一块的话,那么就说明他已经宅到一定的境界了!!本人目前写JAVA,Python,主要是在WEB应用开发方面,不过最近有点乏了,先把这些放一边,玩玩以前的老本行,硬件驱动编写,用C语言直接操作电路板的芯片,貌似在OSC上还从来没有过吧!!

闲言碎语不要讲,讲讲今天要玩的东西,理论上来说,玩硬件DIY首先要设计意见的电路原理图,然后自己用三氯化贴和覆铜板来制作印刷电路板,苦于自己已经离开电子设计行业有两年多了,好多材料不好买了,只能从网上搞个现成的PCB版玩玩。不过一般的模拟电子电路么什么玩的,为什么,因为么法写程序,就装配电气元件不符合我的兴趣方向,今天我们来个高智商的东西。单片机开发版。这种很便宜 淘宝网上一百多一个,随便都能买到。为了不去话电路板,我就花钱偷了个懒了!!今天玩什么?今天主要玩玩LED小灯泡,这个最好玩,也最容易玩,而且还能够玩出很多花样出来。

先说说我们的这个原理:
第一,电源的供电方式,我们使用5V的USB供电,这个最容易找到,也最安全,当前有些不怕死的回自己做电源,不过这个不建议去做,因为“不做就不会死”。曾经被220V的电电过,有些阴影。
第二,电气原理图设计,其实点亮小LED灯不算什么难事,高中的物理只要没有睡觉的,基本都能搞得出来。现在把这个电路过程中的几个难点说说:
第一,LED正常工作的情况下,两端压降是1.5V,正常工作的电流都是15-25mA不等,当然,根据欧姆定义来计算的话,假如我在这个位置加上5V的电压,LED铁铁的要被烧坏,所以,我们需要电阻的支持,需要多大的电阻?R=U/I,R=(5-1.5)/0.025,大概最小也得这么个数吧,不过这个都是个概数。只要不超过最大的LED工作电流,基本都能算OK。
第二,点亮LED的原理,我们假设LED正常工作,我的芯片要给LED的一端输出低电平,也就是说,LED的正极接5V电压,LED负极由我的芯片输出低电平,这样LED正向偏执,导通条件成立,所以就能亮了。现在假设我有8个LED灯,假设硬件都是OK的,只要程序OK,那么我们的LED灯就能够正常启动。先将条件说明如下:
P1.0-P1.7分别是从低到高的编号 对应D0-D7八个LED灯。P1.0输入低电平(0)为D0灯亮,那么对应等的亮灭就能够得出来了。

管脚排列说明:(左→右 P1.7-P1.6-P.15-….-P1.0)

D0对应的输入编码是:0xfe(1111 1110)D0 亮

D1对应的输入编码是:0xfd(1111 1101)D1 亮

D2对应的输入编码是:0xfb(1111 1011)D2 亮

D3对应的输入编码是:0xf7(1111 0111)D3 亮

D4对应的输入编码是:0xef(1110 1111)D4 亮

D5对应的输入编码是:0xdf(1101 1111)D5 亮

D6对应的输入编码是:0xbf(1011 1111)D6 亮

D7对应的输入编码是:0x7f(0111 1111)D7 亮

反正以上的规律就是,只要某一个上等于0.则对应的LED灯就亮了.所以点灯的程序就是这样的:

<!-- lang: cpp -->
#include <reg52.h>
void main(void){
P1 = 0xFE;//D0灯亮
while(1){

}

}

上面这是最简单的一个灯亮。想要其他灯亮 对应的更改输出编码就对了。下面附赠一个演示程序。可以让灯闪起来。

<!-- lang: cpp -->
void delay(unsigned int ms){

while(ms--);

}

这是个简单的延时程序,不过你要精确的话,需要根据晶振的频率和指令周期等参数综合使用,先不管咋样,闪起来再说。LED灯点亮的原理就是这样,有兴趣可以自己使用Protel99画个PCB版子玩玩,编程IDE用Keil uVision2。

OSC的编辑器又开始扯淡了,版式死都调不好!!!

你可能感兴趣的:(开天辟地第一章)