因为最近忙着考试,所以都没时间更新博客了,在后台有个小姐姐给我留言说自己对单片机很感兴趣,但是又不知道从哪里开始学起,是先学硬件好还是先学软件好,其实在我们复杂的电子学里,硬件和软件是分不开的,硬件就像是我们的心脏和四肢,软件就像我们的大脑,如果只有软件没有硬件,那我们的系统就是一个没用的程序,不能执行任何操作,而如果只有硬件没有软件那么整个系统就是一个行尸走肉,是一个没有“大脑”的躯壳,我说到现在大家也应该明白了,硬不离软,软不离硬,只有软硬兼修,方能大成!好了,回到刚才的问题,我建议先从硬件开始学起,先理解了硬件的架构和各部分的工作原理,然后再去看软件,这样能更好的理解原理,就像我推荐大家先用汇编后用C一样好了,写了这么多,如果你有不同意见或者想法欢迎留言和私信。
今天送给大家一个比较简单的小项目吧,如果你有兴趣的话可以试着做一下呦!
好了老规矩先上实物图
正面图:
焊接好的成品背面图:
电路原理图:
PCB图:
音乐喷泉的项目元器件清单:
音乐喷泉单片机C语言参考源代码如下:
defineucharunsignedchar
#defineuintunsignedint
sbitout=P3^7;
sbitled1=P0^7;
sbitled2=P0^6;
sbitled3=P0^5;
sbitled4=P0^4;
sbitled5=P0^3;
sbitled6=P0^2;
sbitled7=P0^1;
sbitled8=P0^0;
sbitSCL=P1^2;//SCL定义为P1口的第3位脚,连接ADC0832SCL脚
sbitDO=P1^3;//DO定义为P1口的第4位脚,连接ADC0832DO脚
sbitCS=P1^0;//CS定义为P1口的第4位脚,连接ADC0832CS脚
ucharh1,date;
unsignedcharadval;
voiddelay(uintz)
{
uchary;
for(;z0;z--)
for(y=120;y0;y--);
}
以下是模数转换部分
/***********读数模转换数据********************************/
//请先了解ADC0832模数转换的串行协议,再来读本函数,主要是对应时序图来理解,本函数是模拟0832的串行协议进行的
//110通道
//111通道
unsignedcharad0832read(bitSGL,bitODD)
{
unsignedchari=0,value=0,value1=0;
SCL=0;
DO=1;
CS=0;//开始
SCL=1;//第一个上升沿
SCL=0;
DO=ODD;
SCL=1;//第二个上升沿
SCL=0;
DO=SGL;
SCL=1;//第三个上升沿
DO=1;
for(i=0;i8;i++)
{
SCL=1;
SCL=0;//开始从第四个下降沿接收数据
value=1;
if(DO)
value++;
}
for(i=0;i8;i++)
{//接收校验数据
value1=1;
if(DO)
value1+=0x01;
SCL=1;
SCL=0;
}
if(value==value1)//与校验数据比较,正确就返回数据,否则返回0
returnvalue;
return0;
}
voidpenquan()//PWM调压
{
date=ad0832read(1,0);
h1=(255-date);
out=0;
delay(h1);
if(h130)led1=1;elseled1=0;
if(h170)led2=1;elseled2=0;
if(h1100)led3=1;elseled3=0;
if(h1130)led4=1;elseled4=0;
if(h1160)led5=1;elseled5=0;
if(h1180)led6=1;elseled6=0;
if(h1200)led7=1;elseled7=0;
if(h1220)led8=1;elseled8=0;
out=1;
delay(date);
}
……………………
鉴于篇幅所限代码只能写到这里,由于平台不能上传附件,如果需要设计文件请留言或者私信,如果你有什么意见和建议欢迎大家交流,让我们共同学习,一起进步!