微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > 51单片机教程之基础编(基于C语言)

51单片机教程之基础编(基于C语言)

时间:12-01 来源:互联网 点击:

网上很多教程有一些都是误人子弟,有不少错误,本人总结了很多经验,因为在此之前本人对单片机也是小白一个,所以很会理解初学者的心里。下载了KEIL,买了单片机开发板和单片机,下面我们就来开始单片机学习之旅吧,先来看出自单片机教程网www.51hei.com第4课的一个闪烁灯的小程序(他文章中主要从汇编的角度详解了闪烁灯的工作原理,我对此进行了C语言方面的详解算是对第4课的补全.):
#include //头文件
#define uchar unsigned char //宏定义
sbit LED=P1^0; //定义引脚
void delay() //延时函数
{
uchar a,b;
for(a=200;a>0;a--)
for(b=200;b>0;b--);
}
void main() //主函数
{
while(1)
{
LED=0; //点亮LED
delay(); //延时
LED=1; //熄灭LED
delay(); //延时
}
}

在这里我先说明一个问题,关于KEIL的使用网上有很多教程,由于时间关系这里我就不说了。上面是一个LED闪烁的小程序,初学者往往连这个也看不懂,好像在看天书,别急!本人刚开始也是!我一个个说明。第一个,就是头文件,什么是头文件呢?就是编译器里面的一个库,里面定义了单片机的一些寄存器,写了这个头文件,编译器就知道你使用的是52单片机,以下的操作它就认识了,否则编译会报错!第二个,宏定义,就是自己定义的新名字,上面的操作就是告诉编译器,以后遇到uchar就是unsigned char了,便于书写,节省时间。第三个,就是定义单片机的引脚,如果我的LED接在P1.0这个引脚上,就这样定义了,以此类推。好了,开始说函数,有人说编程要大学生才可以,NO!NO!NO!就拿我来说,我才初中毕业呢!不过话说回来,你的英语必须有30分以上,代数在60分以上才可以,否则吃力!呵呵....因为C语言运用到了计算,单词等初中知识。这个是一个延时函数,因为单片机运行速度很快,如果不延时,LED闪烁就十分快,我们是分辨不出来的。那么这个是怎么延时的呢?首先我们定义了两个变量a、b,然后a先赋值200,for这个是32个关键字其中一个,是一个循环语句,首先执行a=200,接着判断a是否大于0,如果不是,则执行a--,就是a-1,直到a=0,这个语句执行了200次,同样下面的语句也是,这两个语句这样写起到了嵌套作用,就是上面执行完了执行下面,这样就执行了200*200=40000次。为什么要这样呢?就是为了延时!其实这个程序就是让CPU在那里执行空操作浪费时间来达到延时目的。下面的函数叫主函数,C语言每一个程序都有且只有一个主函数main,程序都是从主函数开始执行,上面的延时函数叫子函数,也叫子程序,主函数可以调用子函数,反过来子函数是不可以调用主函数的。前面大家都注意到有一个void ,void在英文的意思是空,意思这个函数不带返回值,至于什么是返回值,以后再说。在函数的后面还有一个小括号,这个里面也是有一个void的,只是省略了,那这个是什么作用呢?这个就是函数的参数,什么参数?也是以后再说!程序从主函数开始,进入了while(1)这个函数体,每个函数体都要有一个大括号来包括,while的意思是如果括号里面的条件为真即为1,就执行里面的程序,否则退出,所以也是一个循环函数,把里面写1就是这个while永远为真,永远执行这个函数,这样做的目的就 是让程序不断执行下去,这样LED就不断闪烁了。到了LED=0时,意思是把单片机P1.0这个引脚置为低电平,LED正极是接电源的,负极接P1.0,这样LED就亮了。接着,延时,到这里单片机执行延时函数,紧接着LED=1,意思P1.0置为高电平,这个时候LED就灭了,然后又是延时,再点亮,周而复始,LED就闪烁了。闪烁的频率由延时函数决定,当然你可以再写个for,这个LED闪烁就更慢了。

看了这个小程序,你有什么感觉?实际上设备上的程序比这个可是复杂多了,要学的东西太多了。好了,先到这里,我会慢慢教大家继续深入单片机编程,大家有什么要交流可以加本人QQ.只要我有时间,绝对做出回答。

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top