打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
无单片机基础也能做智能小车

很多人对智能小车比较感兴趣,想做但又苦于没有单片机基础,所以会觉得太难没敢做。其实,人总是对于未知领域的东西总会觉得那是很高深的,可并不知道那些“高深”知识也许只要你迈进一小步就能掌握。“万事开头难”就是这个道理。


下面我们就开始制作过程了

51单片机,以AT89S52为例,AT89c52或STC89c52等常用51单片机都可以通用。
具体什么是单片机,你可以认为是一个微控制器,并且你可以按你的思路编写程序到里面,从而达到智能控制你的小车的目的。
准备一台电脑就可以先开始了。
先下载
编程软件:keil
程序烧写软件:progisp
方便起见再下个仿真软件:proteus



接下来先讲下51单片机最小系统板的搭建
准备材料:
1、焊接工具:电烙铁,松香(最好不要用焊锡膏),锡焊丝。新手可以加个烙铁架,也可自己做一个。
2、洞洞板或覆铜板1块(10*15CM);
3、40PIN插座1个;
4、晶振1个(建议11.592M,以后做其他用时方便);
5、30P瓷片电容2个;
6、 LED 若干(最好8个以上);
7、at89s52单片机一块;
8、AT isp下载线一条(烧写程序用);
9、10Uf电解电容一个;
10、10K排阻一个(9脚的);
11、10K电阻一个;
12、轻触按键1个;
13、2.54间距10PIN牛角座一个。

AT89S52引脚图

借助防真软件Proteus来讲下最小系统
因软件里没有AT89S52这个元件,讲的时候用的是89C52,实际搭建时只要相应引脚接上是一样的。





这么多引脚,是不是眼睛看花了,觉得引脚太多了。先别急,引脚多是一件好事,想象一下,假如一个引脚可以控制一个电机的转动、停止、加速、减速等等(当然不仅仅能控制电机),是不是有点小激动呢。也许等你以后弄高大上的东东时,你可能还会觉得引脚太少了,不够用呢。
AT89S52可以供我们用的IO口(输入/输出口)有四组,每组8个,一共是32个IO口。所以做个简单的避障小车或者循线小车是绰绰有余的。



为了验证最小系统搭建是否正确,我们用Keil编制一个简单的程序,然后在仿真软件Proteus里面模拟一下。
所以请将这两个软件安装到电脑上(不会安装的可以举手)。纸上谈兵阶段程序烧写软件progisp先不用管他,但是你可以顺带也将其安装好。
好,请先打开Keil,

怎么安装KEIL。
一:找到下载好的文件,解压,打开文件夹,找到C51V900.exe,双击开始安装,点击Next;
二:在“I agree to all the terms of the preceding.....”前面打勾,再点Next;



在Destination Folder框内输入你要安放的路径,然后点Next,


四、输入你的名字与邮箱后,再点Next;

安装读条完成后,点击finish完成安装;



好,现在可以在你电脑桌面上找到KEIL图标,请狠狠地双击它:

然后请点击:project,选择新建一个工程文件;


将文件写个名字,再找好存放路径(以后得找得到啊),占保存完成;


弹出对话框,点开Atmel


在里面找到At89S52芯片,点OK;



再弹出对话框,点OK;


现在恭喜您,你已经建好了一个工程文件了(是不是觉得自己是个工程师了?想想还有点小激动呢……。)
喂!喂!那个发呆的同学请回过神来……。
接下来我们要干嘛呢,别以为你就可以开始编程了,我们还得再在工程文件里面建立我们的C程序源文件才行,请看这里;
点击新建图标;






是不是发现你的KEIL里面多了一个1.TXT文件了;



先别激动,再听我讲,请看这里:
点击保存图标;



请注意了,这里绝对是容易弄错的重点了!!!!!!!
  保存时一定要将文件名以.C为后缀(也就是C源文件);



当把这个C文件(这里以main为文件名,你可以取一个你喜欢的名字)建好以后,我们还不能直接往里面编程。我们得把它先添加到工程文件的资源里面,具体怎么做方法有很多,我只讲一种,其他方法请自行摸索,请看:
右击Source Group1,在下拉菜单里选择“Add Files to Group......”;


弹出对话框里找到刚建好的main.c文件,并选择中它,点ADD添加,然后Close关闭对话框;

在你在工程资源文件视窗里是不是可以找到main.c这个文件了?




能找到的同学请为自己喝彩一下,你真不错!因为你现在开始就真的是一个程序工程师了!是不是又有点小激动呢?好吧,我们开香槟庆祝一下。
“干杯!!!”
“喂,那位同学你怎么不过来一起喝?”
……
“什么,你找不到这个C文件?!”
……
“什么,你想一个人静一静,好吧,你站黑板前面静一静吧。”
“来,我们接着干杯!”
......

请同学们把下图的内容写到main.c这个文件里面,注意把输入法换成英文模式。
不用着急,我知道你要说什么,红框里面的内容可以不输,所以请换成英文模式。
如果你硬要全部写上,那么请只有在必须输入中文的时候才换成中文,是的,连输个空格位都请用英文模式。



考虑到有些同学可能会输错,而导致后面编译时出错,我发下原文。好吧,你可以笑着复制下面的文字到你的main.c里了:
#include'reg52.h' //51单片机头文件,以后同学们可以慢慢研究
void delay(unsigned int time) // 延迟函数声明
{
unsigned int i,j; //定义变量 i,j
for(i=0;i<500;i++) // FOR循环
for(j=0;j<time;j++); // 套嵌FOR循环
}
void main() // 主函数声明
{
P3=~P3; // P3IO口取反
delay(100); // 调用延时函数,执行100次
}

点击Project菜单,在里面找到Option for Target...这一栏,狠狠地点它。







弹出设置窗口,在里面选中Output,并在 Create HEX File前面打勾,然后点OK完成设置:


然后在找到“Rebuild all target fiels”图标(当然也可以是Build图标,当你只有一个main.c文件时,作用是一样的),然后也请狠狠地点它,并注意看下信息框内是不是有'0 Error(s), 0 Warning(s)',如果不是的话,说明程序某些地方有错误或者需要注意的地方,不信的可以把程序里的某个小标点改下试试。



请打开你的Proteus软件

点击新建图标(默认模式):






点击保存图标,选择好存放路径,并命好名字,点保存完成:



选择元器件模式图标,然后狠狠地点P按钮:




在关键词里面输入89C52,然后双击右边查找到的89C52单片机:



这里再看你的元件库里是不是多了一个 AT89C52 的元件(为什么不是AT89S52?因为这个软件里没有,而它是与S52可以通用的),


然后选中AT89C52后,在右边的图纸上面双击,就可以把AT89C52单片机安装到我们的图纸上:






然后我们双击这个安装好的单片机,弹出一个元器件编辑设置窗口,注意在Program File这一栏里填入我们先前生成好的HEX文件的路径,可以点右侧的图标方便找到你的HEX文件:


点OK完成程序的装入后,我们点Play演示按钮,是不是可以看到P3口的八个引脚在交替地红、蓝闪动着:


来我们看下我们讲的这个AT89S52单片机,它有很多的引脚,我们经常拿来用的主要有P0、P1、P3、P4四组,每组有八个,一共32个端口。
以P3组为例:有P3.0~P3.7这八个,这一组里面每一个都有一个用法相同的基本功能,就是能够读取外部传过来的电平信号和向外部输出电平信号,这样进进出出的是不是很有意思?所以叫它们为IO口。
细心的同学会发现P3这组IO口都有一个另外的名字,比如P3.0又写了RXD这个名字,等等。是的,有两个名字的端口说明它们还有第二个功能,具体怎么用我们现在先不要去管它。
想像一下,你的小车上有一个传感器和一个电机,你希望在某个时间点上读取到传感器的信号,然后你根据这个信号来给电机下达一个命令让其是正转、反转、停止、加速、减速等等。这时你只需将传感器的信号线接到其中一个IO口上(比如P3.0),然后将电机的两根线(这里先不考虑驱动的问题,驱动可理解为只是把电流电压放大了)接到另两个IO口上(比如P3.1和P3.2)。



为便于观察,我们将刚才的P3口上全部接上LED灯试一下,来,请在Proteus里点停止按钮结束刚才的演示;


然后,我们在元器件模式下添加一个LED,关键词输入LED,在右边找一个LED灯珠双击添加,好像很多,好吧,就是它了:LED-YELLOW,这是一个黄色的LED,我喜欢这个,对,就是它了!




然后我们把这个LED安装到右侧(安装8个),注意先点一下旋转按钮,让其转成90度,这样更美观,等下也更好连线;



接下来我们点选择终端模式,找到GND,安装到图纸上,并连好线;



好了,现在可以点演示按钮,是不是容易观察多了?



现在请对照你的程序源文件,我们一起来看看:
第一行:#include'reg52.h'
reg52.h是一个52单片机的头文件,这个文件你可以在Keil\C51\INC这个文件夹里找到,是软件编写人员已经写好了的一段代码,包括一些寄存器的定义等等,你可以在里面按自己的习惯进行修改,比如你可以把P0口改成:ILOVECSR1985,不过以后编程时,凡是遇到要用到P0时,你都必需写成ILOVECSR1985。我建议你不要这样做,我会受不了的。所以你可以理解这个reg52.h是方便我们编程的,你可以不需要弄明白,但用这个软件编程时不能不写,除非你是大神。
第二行:void delay(unsigned int time)
这是声明一个函数,名字叫delay(),并且这个函数执行完后没有值返回。
Void意思就是执行完这个函数后没有值返回。
delay(unsigned int time),其中delay是这个函数的名字,因为这个函数是我们自己编写的,当然也是我们自己给他取的名字,所以delay你可以改成你喜欢的名字,比如I_Love_you,或者dl都可以,但是当你需要调用这个函数时你必须还能记得他的名字,因此函数名称这个是真可以改的,但是无论怎么改名字,后面的()是不能丢掉的,因为这是一种格式。
unsigned int time,是这个函数的参数,参数的名字叫time,并且它的数据类型是unsigned int(无符号的整型变量)。其中的time是我们自己取的名字,所以同样的道理你也可以改成其他你喜欢的名字。
第三行:{
他与第七行的:}是一对完整的格式符号{},他们是成对出现的,如果只有一个出现,那么就会像男人少了女人一样,会让整个程序都“疯”掉的。你可以把这对括号中间包括的所有内容都看成是他们的手下,是不允许别人来用他们的,除非是他们的主人,而他们的主人就是前面的delay()。
第四行:是同时定义了两个变量:i 和 j 。你可以同时定义很多变量,把他们用,(逗号)分开就行。你必需记住:程序里面的所有要用到的变量都必需在要用他们之前先定型数据类型的定义。
第五行:for(i=0;i<500;i++)


这是一个for循环函数,意思是:i从0开始;判断i<500是“真”还是“假”。是“真”,让i=i+1,再执行后面的一条语句,接着又进行判断,如此反复。直到判断i<500是“假”退出循环。
第六行:同于第五行,他与第五行形成一个套嵌的循环。
第八行:void main()


这是一个主函数main(),需要注意的是每个程序必需有且仅有一个主函数,并且无论它写在第几行,程序一定是从他开始执行的。同时这个主函数的名字是不能改的。
第十行:P3=~P3;
P3是我们所说的端口的名称,机通过有头文件的引用说明后,单片机一看到他就会认识:(哦,原来是你P3.0至P3.7这八兄弟啊,你们有什么事吗?)
~是一个取反符号,是0变成1,或者是1变成0
所以P3=~P3意思是把P3的值取反后再赋值给P3。
第十一行:delay(100);

调用函数delay(),给他的参数是100。而这个函数里面的内容是什么前面上面我们已经说过了。



现在我们整体来看下这个程序做了些什么。
仔细阅读你会发现,原来程序只是让单片机做了两件事,
第一件:让P3口取反,具体地说是让电平取反(这里对于单片机来说电平只有高或者低两种情况);
第二件事:让单片机在心里面默默地数数,具体点来说是从0数到100为一组,一共数了500组。
但是由于这个单片机做完第二件事之后,它会自动地跑去又做第一件事,接着又做第二件事,以次反复。所以,你就看到了看到了灯一闪一闪的了。

好,同学们,下面我们来讲一讲怎么怎么来做个流水灯,并且我们这次要把P1的8个端口也加进来:
先在Proteus里,将我们的模拟图里的连线都删除,并用鼠标拖个选框,将8个LED都选进去,然后右击,选择Block Copy(块复制),并在图纸适当的其他地方点击一下,再右击鼠标退出块复制状态,就复制出了8个LED灯:


调整好LED位置(同样可以选框选中,并拖曳鼠标一起移动),再在Terminals Mode(终端模式)下选择DEFAULT(默认),在LED左侧并排添加上:



同样在单片机的P1口与P3口对应的位置也添加上(注意单片机右侧的请先点X镜像,再添加会方便很多):



再给我们的接线端命上名(注意方法也有很多,我说一种效率最高的方法),先点击工具栏上的
Property Assignment Tool按钮,弹出设置窗口,在String栏输入'NET=LED#',点OK :



这时再将鼠标移至接线端口的小圆圈上,你会发现鼠标和之前的变化,从P1.0边上那个开始,顺次每个接线端点击一下(请注意别点两下),会有惊喜出现的,是不是这16个接线端都依你的设置快速地命好名了!






请先不要得意,不然你会后悔的!这时请再点击工具栏上的Property Assignment Tool按钮,弹出设置窗口,同样地还在String栏输入'NET=LED#',点OK ,再依次给LED边上的接线端命上名(请注意看下与前面的命名是不是对得上):




这时请更不要得意,不然你会更后悔!
这时请第三次还是点击工具栏上的Property Assignment Tool按钮,弹出设置窗口,这时请点Cancel取消:



革命尚未成功,同志仍需努力,我们还得把LED的负极与GND接上,以及相应端口与接线端都接好。如果你发现连不了的话,说明你的两个点之间相隔太近,请同学们自行调整好距离。如果你连线时觉得有点累了,你可以在需要平行连线的地方(这样的一方是不是非常多)将画笔移到需要连线的其中一个点上试着双击一下,也许有人会有小惊喜,但我不保证你的小惊喜会不会出现,因为也许你点错了地方。接好后应该如下图:



第一次做是不是有点累或者不习惯?没事,谁没有第一次?等你熟悉了以后,我保证你可以在1分钟之内完成的这点小儿科事情的!
什么?你更快?只要30秒!!!
好吧,壮士,大神,同学,别这样子!太快了也许你会觉得没有乐趣的。
好吧,终于把原理图完成了,为你们自己先鼓掌喝彩一下吧!



本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
UC头条:STM32简单程序编译及Proteus程序设计与仿真
从单片机初学者迈向单片机工程师
proteus仿真AT89C51单片机测试试验[无须keil](1)
单片机点燃led灯编程案例
基于proteus的51单片机开发实例30
51单片机50个例程代码
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服