• 回复
  • 收藏
  • 点赞
  • 分享
  • 发新帖

单片机新手入门的指路小灯

  首先呢,点进来的一定有像我一样是个单片机新手,也一定有高手们来看看这里面这有什么花样,嘻嘻,不管怎么样,同志们来看帖子的不会失望的,因为我本来是个新手,所以写的东西也一定是好理解的,这里呢,鄙人还有一个不情之请,就是请大家帮忙回复几条呗,毕竟拿奖品实在诱人,而我最近有在物色开发板,每每看到一个相中的,心里就抽搐一下,毕竟作为学生经济来源靠父母,所以想买开发板,只有勒紧裤腰带过日子了。再次谢谢各位了。

  好了言归正传,关于单片机大家多多少少有些理解,还有结构什么的大家只要问一下度娘,各种资料就都有了,而我如果只是copy一下也没什么意思,所以我就说点别的。大家都知道单片机一般来说包括以下几个部分,中央处理器,就是CPU,他就像人的大脑一样控制着整个系统的运行,还有存储器,存储器包括ROM和RAM,所谓ROM学名只读存储器,他通常用来存储永久性的数据,所以又被叫做,程序存储器。而RAM是用来存放程序执行时产生的数据的,成为数据存储器。但是这两者有什么区别呢?一般的ROM就像你电脑的硬盘一样,用来存放文件等,存储量较大,而RAM就像你电脑的内存一样,存储量较小。CPU读取数据并不是直接从硬盘读取的,而是从内存中读取的,因为内存的读写速度比硬盘要快。这样就可以理解为什么电脑有硬盘,单片机有ROM和RAM 了吧,另外ROM在断电后数据并不会消失,而RAM的数据则会随着断电而消失。单片机还有输入输出单元就是高手们口中的I/O接口,可以类比的想象成你电脑的外接东西,比如键盘鼠标显示器等等,而单片机的外接只要是,电子元器件,比如开关,LED等,数码管等等。所以说单片机相当于一种小小小电脑,虽然可以处理的数据很小,但是在许多领域已经够用了。

好了,我们开始做点小东西吧,流水灯,虽然简单,但是却是许多人入门单片机行业的第一个小制作,我们的也不例外,从小的东西一点点扩展到大的复杂的东西。

这次我们需要两大软件, proteus和 Keil uVision4。前者主要是做仿真用的,就是在没向单片机烧写程序之前,先用这个软件进行仿真操作,如果仿真成功那么在板子上的实验也多半会成功,如果在仿真上都通不过的话,那么即使把程序烧写进单片机也一定不会成功,这就是为什么电子开发者都喜欢这款软件的原因了。后者是单片机开发的集成环境,目前用的最多性能最稳定的是uVision2,我们学校实验室用的也是2,但是我的电脑里用的是4,但这不是主要问题,因为大体上他们的操作是一样的。终于可以开始操作了!

首先呢,我们在 proteus中制作实验流水灯用的原理图

打开软甲后,点一下我用红圈圈住的P,这时候会弹出一个对话框,这里面可以选择你所需要的元器件,双击,他就会存在于你的调用区内,把所有的原件选进调用区内,到时候便于画电路图,调用区,就是那个P下面的框框,你可以看到我的调用区里已经有了几个原件了,我们用的单片机是AT89C51,按图选择就行了,这些都是实验要用的原件,一一加载完。

开始画图,学过Altium Designer的人对于画电路图应该并不陌生,就是布原件,连线,按照合理的位置布好原件之后就是连线,看上一个图吧,在最左边有各种快捷工具箱,从上往下数第六个就是划线用的,点一下后就可以连接各个元器件了。这里我们用到了总线,就是那根很粗的蓝色线,这样,在空白处单击右键,选择place->bus就可以了,总线的画法,在起点处单击,在终点处单击,在按esc键退出划线状态,连完线之后我们还需要给这块单片机加载程序,这里我们就要用到下一个软件了,keil。



下面就是keil的主界面,选择project->new,新建一个工程,命好名就行了,然后,再点文件,也就是file,new,写代码,然后保存,保存时注意,要自己加上后缀名,就是(.c)


这样系统会自动保存为C程序文件,然后需要点击我圈住的几个图标,来编译生成可执行的文件,这里需要注意的是,要点击我圈住的想魔术棒一样的东西,然后选择output选项,勾选,created HEX file,这个HEX文件就是待会能够加载进,刚刚我们画好的单片机里面进行仿真。

这里点击我画的三个图标中间那个,然后看看没错,说明成功了,然后再切换至protues里,双击单片机,看第二栏,选择文件,把刚才生成的HEX文件加进去,OK,可以执行了,



在protues的左下角有控制开关,点击小三角就可以看到你的灯在像流水一样,亮起!效果就像图一样,但是图不会动,大家就想像着吧!

如果你有单片机,想在板子上看效果就要在keil中点一下这个图标,把程序烧写进单片机里就行了,执行起来,非常有成就感,因为我没有板子,而我在实验室做的效果也忘记拍照片了,实在是不好意思了。



下面我们来分析下代码,

#include //调用51 单片机的头文件

//定义一个数据表格unsigned char code TAB[16]=

{ //定义表格一定要使用code,这样会做到程序存储区中

0xFE, //表格第1 步数据0b111111100

xFD,//表格第2 步数据0b11111101

0xFB, //表格第3 步数据0b11111010

0xF7, //表格第4 步数据0b11110111

0xEF, //表格第5 步数据0b11101111

0xDF, //表格第6 步数据0b11011111

0xBF, //表格第7 步数据0b10111111

0x7F, //表格第8 步数据0b01111111

0x3F, //表格第9 步数据0b00111111

0x1F, //表格第10 步数据0b00011111

0x0F, //表格第11 步数据0b00001111

0x07, //表格第12 步数据0b00000111

0x03, //表格第13 步数据0b00000011  

0x01, //表格第14 步数据0b00000001

0x00, //表格第15 步数据0b00000000

0xFF, //表格第16 步数据0b11111111};

//---------------------------------------//名称: 主函数//---------------------------------------

void main(void) //主函数,单片机开机后就是从这个函数开始运行

{   unsigned int a=0; //定义一个int 型变量,做延时用   

unsigned char b=15; //定义一个char 型变量,显示内容用   

while(1)   //死循环,单片机初始化后,将一直运行这个死循环  

 {    for(a=0;a<20000;a++);   //延时若干时间   

 if(++b>15) b=0;   //b 做加1 操作,并限制在0-15 以内   

 P0=TAB[b]; //将TAB[b]的值送入PO 口输出   

}

}

稍微有点C语言基础的人应该都能看懂,如果看不懂,就应该恶补一下喽!

看刚开始我们定义了一串数组,他们全是用16进制表示的,这个可以表示灯的状态,看2进制,1代表灯亮,0代表灯灭,所以我们只要改变下1和0,就可以实现不同的亮的状态了,下面有几张图,实际上是我们的作业,看黑的代表亮,白的代表灭,所以我们只要在相应的位置上把1,0换一换就行了,然后再把它们换成十六进制写进代码里,在执行上面的步骤,就可以实现不同的灯亮法了,

大概就是这样,作为入门我们先从左东西开始,慢慢的在把相应的单片机的知识补上来,要不直接 学什么引脚什么的一来枯燥,二来容易忘记,因为并不是每个引脚都会经常用的,既然是做工程的,就没必要做那么多的无用功,只学对自己有用的,慢慢的自己的知识就积累起来了。各位加油!



全部回复(17)
正序查看
倒序查看
2014-04-11 09:38

原创 关注!感谢sherlocked的帖子,另外标题我给你加了【原创】加油!~

0
回复
2014-04-11 15:04
楼主v5~
0
回复
2014-04-11 18:40
@电源网-娜娜姐
原创关注!感谢sherlocked的帖子,另外标题我给你加了【原创】加油!~
谢谢喽,,我会把我在单片机上的进展,心得都写进帖子,跟大家分享的
0
回复
2014-04-11 18:41
@电源网-俪俪
楼主v5~
3Q了,,我会继续努力的
0
回复
2014-04-14 13:53
@sherlocked
[图片]3Q了,,我会继续努力的

楼主要更新的节奏嚒

0
回复
2014-04-15 13:46
@电源网-娜娜姐
楼主要更新的节奏嚒
对啊,,因为做起来是一个不间断的过程,正好把他们全都记录下来,,共享
0
回复
2014-04-16 09:47
@sherlocked
对啊,,因为做起来是一个不间断的过程,正好把他们全都记录下来,,共享
支持,搬板凳坐等~
0
回复
2014-04-16 12:58

今天说点Keil C语言的特点吧,总的看起来,和我们平常学的C语言是差不多的,因为大概的框架是一样的。

  总的来说C语言是由一堆函数所构成的,其中主程序也是一个main 函数,而每个函数可以看做独立的个体,就像是模块一样。

在开头,大家都知道的,就是调用头文件(*.h),这是一种事先定义好的基本数据,在8051程序里,必要的头文件是定义8051,内部寄存器地址的数据,至于寄存器的种种复杂的东西,我会在下节更新中给大家做一个详细的解释。

接下来就是声明区,在选择头文件之后,可以在这里声明程序中所用到的各种变量,函数,甚至常数等。起作用范围将是整个程序,包括主函数,和所有子函数。但是如果在某个函数内部定义变量或者常数,那么这种变量的作用范围仅仅是这个函数,一旦函数执行到最后一个大括号,那么,这个变量便失去了作用。我在此建议,最好把函数调用语句写在这里,如果没有声明的话,在使用一个函数之前必须对他进行定义。

主程序,就是以mian()开头,直到他的下大括号结束,如果能够很好的利用函数调用,那么主函数将会非常的简单,仅仅是几句调用函数的语句。

子函数,就是C语言比较好的一方面,因为他可以让你的程序实现模块化,即用每个函数来执行每种特定的功能,然后再主函数中调用,这样不仅便于代码的阅读,而且便于改错,在程序比较大时,大家应该尽量利用函数让自己的函数模块化。

然后就是变量,和数据类型。在C语言中不管是变量还是常量,都在内存中占一定的空间,至于占多少空间,在于你给他分配了多少,我们给变量和常量分配孔家就是通过对他进行数据类型的限制。比如常用的 int型表示整数,在内存中占四个字节,16位。float型占8个字节32位。char型,占两个字节8位。等等可以通过网络来查阅。

8051有自己特殊的数据类型:bit,1位,范围是0~1。sbit  1位,范围也是0~1;sfr 8位,范围0~255;sfr16 16位,范围,0~65535。bit会被存放在0x20~0x2f之间的存储区域。其他的东西可以自己上网查,这种东西也没必要记在脑子里,因为网络的发达,所以我们完全可以把对这些东西外包给网络。

这里哈设计到了间接寻址之类的东西,等我下节介绍了寄存器什么的之后再联系在一起,到时候就是一张知识网络了。

0
回复
sherlocked
LV.4
10
2014-04-16 12:58
@电源网-娜娜姐
支持,搬板凳坐等~
0
回复
shenx123
LV.10
11
2014-04-24 14:06

要做到这样的设计,需要哪些材料呢, 给指点下啊

0
回复
sherlocked
LV.4
12
2014-04-24 21:15
@shenx123
要做到这样的设计,需要哪些材料呢,给指点下啊
首先你需要两大软件,protues和keil,前者是用来做仿真用的,如果你没有一块自己的51开发板的话,这款软件可谓是成本超低呀,,另外有块板子最好,即使有板子也要这个来仿真,在把程序烧写进单片机里之前可以用它来找错,如果仿真都通不过,那么在板子上一定出错,,后者呢就是专门的51c语言的环境,写51程序都是用这个,uvision,,有了这些,就要在来个教材了,,别人会推荐那个郭天祥的书,,我在这里给你推荐一本别的,真的很不错哦,,叫《例说51单片机》,,看完前三章,就可以自己设计初步的电路,至于代码,你可以跟着咱论坛里的  @吴坚鸿 和@高山云两个大神学,他们的思想,尤其是鸿哥的,真心不错,最后算是一点建议,工程,或者说技术这东西,是要靠实践来学的,不要等到理论什么的都学好了再来学,那么你已经落后很多了,,做工程时用到什么知识,现在的网络这么发达,,不怕找不到想要的,,对吧,
0
回复
joyban
LV.3
13
2014-04-25 16:15
@sherlocked
首先你需要两大软件,protues和keil,前者是用来做仿真用的,如果你没有一块自己的51开发板的话,这款软件可谓是成本超低呀,,另外有块板子最好,即使有板子也要这个来仿真,在把程序烧写进单片机里之前可以用它来找错,如果仿真都通不过,那么在板子上一定出错,,后者呢就是专门的51c语言的环境,写51程序都是用这个,uvision,,有了这些,就要在来个教材了,,别人会推荐那个郭天祥的书,,我在这里给你推荐一本别的,真的很不错哦,,叫《例说51单片机》,,看完前三章,就可以自己设计初步的电路,至于代码,你可以跟着咱论坛里的 @吴坚鸿和@高山云两个大神学,他们的思想,尤其是鸿哥的,真心不错,最后算是一点建议,工程,或者说技术这东西,是要靠实践来学的,不要等到理论什么的都学好了再来学,那么你已经落后很多了,,做工程时用到什么知识,现在的网络这么发达,,不怕找不到想要的,,对吧,
指路小灯有视频教我们怎么做吗?
0
回复
sherlocked
LV.4
14
2014-04-25 20:26
@joyban
指路小灯有视频教我们怎么做吗?
没有哎,,因为我的时间被实验室和课程安排的满满的,,录制视频可能有点困难,,所以我尽量叙述的很清楚,,你有什么不懂的可以问哦,,先装好软件,操作之前总觉得难,,真正做起来会感觉很好的,,加油!
0
回复
山东大汉
LV.10
15
2014-04-27 23:57
@sherlocked
没有哎,,因为我的时间被实验室和课程安排的满满的,,录制视频可能有点困难,,所以我尽量叙述的很清楚,,你有什么不懂的可以问哦,,先装好软件,操作之前总觉得难,,真正做起来会感觉很好的,,加油!
目前单片机的软件哪个比较流行呢
0
回复
sherlocked
LV.4
16
2014-04-28 16:15
@山东大汉
目前单片机的软件哪个比较流行呢
至于流行,,我不太清楚,,但是我学习用的是protues和keil uVison4这两个已经非常好用了,,要说流行的话,,应该就是他们的最高版本 了吧
0
回复
2014-04-28 16:34
@sherlocked
至于流行,,我不太清楚,,但是我学习用的是protues和keiluVison4这两个已经非常好用了,,要说流行的话,,应该就是他们的最高版本了吧

向楼主学习,支持一个!

0
回复
sherlocked
LV.4
18
2014-04-28 16:37
@yueyunno1
向楼主学习,支持一个!
是向您学习才对啊,,大师您的LED帖子帮了我个大忙啊
0
回复