今天一早早早起来就开始把玩了。
先分别了解了STC12C5A60S2和其他几个芯片。
我之前玩的是传统的80C51芯片,于是,一上来在没看芯片资料前,就写了个很简单的程序:控制发光二极管的闪烁。
但,结果不是我预想的结果。
我预想是每个1s闪烁一次,但实际是1s闪烁了好几次,
在向卖家请教和查看芯片手册后,发现这款芯片比传统的芯片速度更快,
于是修改程序,终于是按照我的意愿进行控制。
(学单片机也没有好长时间,但是现在的一个体会时,基本的电路图能看懂,并且能根据电路图进行编写代码)
每个红外传感器搭配了一个指示灯和一个灵敏电阻:
逆时针旋转灵敏电阻 —> 灯亮 —- 无障碍
顺时针旋转灵敏电阻 —> 灯灭 —- 有障碍
今天熟悉了一个重要的芯片是RPR220红外线传感器和IM324D放大器。
这两个芯片的花了蛮多时间,请假了物联班的同学,才搞清楚了些,
电路图我就不贴了,把代码贴上了,以做备记:
#include "STC12C5A60S2.h" #include <intrins.h> /** 红外传感器 **/ sbit p20 = P2^0; // 正极发射 0 sbit p23 = P2^3;// 正极接收 sbit p24 = P2^4; sbit p21 = P2^1; sbit led0 = P0 ^ 0; sbit led1 = P0 ^ 1; void delay10ms(void) //误差 -0.000000000001us { unsigned char a,b,c; for(c=199;c>0;c--) for(b=120;b>0;b--) for(a=1;a>0;a--); } void delay500ms(void) //误差 -0.000000000028us { unsigned char a,b,c; for(c=71;c>0;c--) for(b=168;b>0;b--) for(a=250;a>0;a--); } /** 有障碍物 管脚为1 指示灯灭 RPR220D红外传感器输出1 无障碍物 管脚为0 指示灯亮 RPR220D红外传感器输出0 */ void main() { while(1) { if(p23 == 0) { led0 = ~led0; led1 = 1; delay500ms(); } else { led1 = 0; } } }