今天一早早早起来就开始把玩了。
先分别了解了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;
}
}
}
本文为原创内容,作者:闲鹤,原文链接:https://blog.uwenya.cc/173.html,转载请注明出处。