首先呢,点进来的一定有像我一样是个单片机新手,也一定有高手们来看看这里面这有什么花样,嘻嘻,不管怎么样,同志们来看帖子的不会失望的,因为我本来是个新手,所以写的东西也一定是好理解的,这里呢,鄙人还有一个不情之请,就是请大家帮忙回复几条呗,毕竟拿奖品实在诱人,而我最近有在物色开发板,每每看到一个相中的,心里就抽搐一下,毕竟作为学生经济来源靠父母,所以想买开发板,只有勒紧裤腰带过日子了。再次谢谢各位了。
好了言归正传,关于单片机大家多多少少有些理解,还有结构什么的大家只要问一下度娘,各种资料就都有了,而我如果只是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
//定义一个数据表格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换一换就行了,然后再把它们换成十六进制写进代码里,在执行上面的步骤,就可以实现不同的灯亮法了,
大概就是这样,作为入门我们先从左东西开始,慢慢的在把相应的单片机的知识补上来,要不直接 学什么引脚什么的一来枯燥,二来容易忘记,因为并不是每个引脚都会经常用的,既然是做工程的,就没必要做那么多的无用功,只学对自己有用的,慢慢的自己的知识就积累起来了。各位加油!