前面介绍了很多概念知识,做了很多准备工作,从这一节开始,我们正式开始单片机的学习。我们将使用单片机完成一项非常简单的工作:点亮一个发光二极管(即led:light-emitting diode)。
led简介
先简单介绍一下led。led是一种半导体器件,大家其实对led并不陌生,各种电器的指示灯、手机键盘灯、led液晶屏的背光、高亮led手电筒等,都是通过led发光的。led有两种主要用途,一种是作为指示灯;另一种是照明。照明用的led一般都是大功率led,需要较大的电压电流才能正常工作。而这里我们要用到的则是用作指示灯的小功率led。常见的小功率led,在它的正负极加上3v左右的电压,就会发光,正常发光的时候,电流大概是2~5ma。这里要注意,led有正负极之分,接反了不会发光。另外,电压也不可太高,那样会烧坏led。关于led更详细的介绍,大家可以参考电子元器件介绍之类的书籍。
电路设计
前面已经介绍了,单片机的io口能输出高低电平,点亮led就是通过io口输出电平实现的。如果我们把led的正极接在电源正极,负极接在单片机的一个io口上。让单片机的io口输出低电平,也就是接近0v的电压,这时led两端有电压差,就能发光;如果io口输出高电平,led就会熄灭。
由于我们用的51单片机是5v供电,而led需要3v电压,所以我们需要在led上串联合适的电阻,否则会烧坏器件。我们可以选用p0~p3共32个io口中的任何一个,这里选择的是p1.0。电路图如下,电阻取值推荐为330ω ~ 1kω之间。
顺便附上电阻阻值的计算过程:
1、电阻和led串联,led点亮时总电压5v,led上需要3v,所以电阻上电压是5-3=2v。
2、led的电流为2~5ma,如果算成2ma,电阻上电压为2v,电流为2ma,根据欧姆定律,所以阻值应该为2v/2ma=1kω。
面包板搭建电路
我们在自己的面包板上搭建的电路如下,我把led连接在p1.0端口上(万用板焊接的电路这里没有提供,大家可以自己去搭建):
开发板的使用
如果你是用的是开发板并且上面有led模块,你可以查看电路图。例如我的开发板电路图:
图中vcc通过j1接到rp1上,rp1是排阻,图中的1号脚是公共脚,在排阻的内部从1号脚往2~9号每个管脚之间有一个1k电阻,总共8个1k电阻排列起来,所以叫做排阻。j1相当于一个开关,其实是两个排针构成的插座。如果插上跳线帽,就可以导通;拔下跳线帽,就断开了。这样设计的好处是,如果我要用led模块就插上跳线帽;而如果我不用led模块,而讲io口用于其他目的,这时led就不会对我的电路产生干扰,因为led一端接io口,另一端接到排阻上,而排阻另一端是悬空的,没有接入电路。
而图中的标号db1~db8又接在单片机最小系统电路中的p1.0~p1.7的io口,所以在j1导通的情况下,p1.0~p1.7的高低电平就能控制d1~d8这八个led的亮灭了。
具体操作
单片机的编程,我们通常使用keil软件。keil软件可以从网上下载,安装过程这里不做详细介绍,有基本计算机操作知识,安装起来应该没有问题。值得注意的一点是,安装的时候尽量安装到英文目录下,最好不要用中文,以免程序运行出现问题。
我们打开keil软件,准备给单片机写程序。大家可以按照下面的步骤进行(这里以keil uv4英文版为例进行说明。如果你使用的是keil其他版本,操作方式基本相同)。
一、新建并配置工程
1、首先新建工程:点击菜单中的project – new uvision project。
2、然后我们在电脑上为我们的工程新建一个文件夹,这里我用的是project01 – led,大家可以自行命名,但最好是英文名。
3、打开文件夹,输入工程的名称,点击保存。这里我输入的是led。
4、然后弹出一个窗口,让我们选择单片机的型号。我们用到的是stc89c52rc,而这里面可能没有stc单片机,我们只需要选择完全兼容stc的atmel系列at89c52单片机,点击ok确认即可。
5、随后会弹出一个窗口,提示我们是否需要添加8051的启动代码到工程中,点击否即可(如果我们需要使用自定义的启动代码,则可以点是,然后修改启动代码。而我们编程用的是c语言,一般情况下不需要修改启动代码。至于启动代码有什么用处,则可以等到我们对单片机了解的比较深入的时候再查找相关资料进行学习)。
6、下面我们对工程进行简单的设置。右击target 1,选择第一项options for target ‘target1’…,弹出工程属性设置窗口。
7、我们打开output标签,并勾选create hex file,然后点击ok确认即可。
二、新建源文件并添加至工程中
1、工程新建并配置完成了,下面我们开始新建程序源文件。点击菜单中的file-new,出现一个新的文件,如图。
2、然后我们点击保存按钮,将其保存到工程文件夹project01 – led中,保存为扩展名是“.c”的文件,如main.c。这里大家要注意的是,源文件其实只是一个普通的文本文件,不过扩展名是c而不是txt。我们刚刚新建main.c文件的操作,也可以通过在资源管理器中新建文本文档,然后重命名为main.c的方式进行。
3、源文件新建好了。源文件只是一个独立的文本文件,而工程文件现在和刚刚新建的源文件还是完全独立、没有关联的。我们要把刚刚新建的main.c文件添加到我们的工程中来:右击target 1/source group 1,并选择菜单中的add files to group ‘source group 1’…来添加文件。
4、双击需要添加的文件main.c,或者选中它再点击add按钮,从左边的project窗口就可以看到,文件就已经被添加到工程中了。这时弹出的窗口并没有关闭,因为这样可以方便继续添加其他文件。因为我们现在只需添加一个文件并且添加好了,所以点击close关闭弹出的窗口。
三、编写程序并编译
1、我们打开main.c,开始正式编写程序了。我们编写的程序如下并保存。至于这个程序是什么含义,之后将详细介绍。注意一点,我给出的程序中设置的led是p1.0,如果你的开发板或者自己搭建的电路中led的io口不是p1.0,你需要照着我给出的格式修改sbit那一行。这一点也充分体现了,单片机编程是和实际硬件电路息息相关的,程序和电路要配套,才能正常运行。
#include
sbit led = p1^0;
void main()
{
led = 0;
while(1);
}
2、点击左上方的双箭头按钮编译全部文件,我们看到下方的输出窗口显示编译完成,“creating hex file from ‘led’”表明已经编译时创建了hex文件(hex文件是十六进制文件,将烧写进单片机。相当于windows中的可执行文件“.exe”),“0 error(s), 0 warning(s).”表示编译成功,程序也没有语法错误。如果提示你的程序有错,请细心的检查一下,有没有发生漏掉分号等情况。
四、烧写程序到单片机中
在工程文件夹下,我们可以看到生成的led.hex文件,这正是我们所需要的。下面我们将把led.hex文件烧写进单片机。前面已经介绍了单片机程序下载相关知识,这里我们将介绍下载程序的一般步骤。由于大家使用的电脑、开发板等都不完全一样,有可能会下载失败。希望下载没有成功的读者不要灰心,关于下载失败如何处理,请继续看后面内容。下载程序的操作步骤如下:
1、设置单片机型号,这里我们设置单片机为stc89c52rc。
2、设置串口端口号,波特率等参数。由于我们一般用的是usb转串口芯片,不是真正的rs232串口,所以串口号不固定,每次插上转接板或单片机学习板时,我们应打开设备管理器如图(xp系统:右击“我的电脑”→“属性”→“硬件”→“设备管理器”;win7系统:右击“计算机”→“管理”→“设备管理器”)。找到端口(com和lpt)选项,展开,里面会有一个类似“prolific usb-to-serial comm port(com1)”或者“usb-serial ch431(com1)”的项。括号里面的comx就是我们要找的端口号。填到stc-isp中就可以了(如果有多项不知道是哪一个,可以插拔单片机学习板看哪项会刷新)。如果很不幸,你的串口号很大,超出stc-isp可设置的范围了,可以右击设备管理器中显示的那一项更改com端口序号。波特率等选项一般按默认即可,不需设置。
3、点击“打开程序文件”,选择要烧写的单片机程序hex或bin文件。hex或bin文件是编译之后的机器码,打开后可以在stc-isp右侧程序文件中看到对应的十六进制数字。你可以选择自己写的程序产生的机器码,也可以在stc-isp的test-hex目录中找一些测试程序。这里我们选择刚刚编译生成的hex文件。
4、先点击“下载”,然后再打开电源开关,给单片机上电。稍后stc-isp就会显示正在烧写程序。如果点击“下载”前忘了先关电源,或者程序没能下载,不需要点击“停止”按钮,直接断电再上电尝试即可。一般几秒钟就能下载完成,stc-isp中会显示下载成功。
五、观察程序执行结果,有必要的时调试程序。
一般程序下载完成后,如果p1.0口接有led,电路连接无误,led就会奇迹般的亮起来。我们就成功的让单片机执行了我们自己写的程序。每个初学单片机的人在看到这一幕的时候,往往都会激动万分,正如我第一次学习单片机一样开心。由于这里的程序非常简单,基本不需要调试。这时你就可以向好友炫耀一下,展示你的劳动成果了。
中国高端彩电市场竞争将越来越激烈
基于CC2530F256芯片和WiFi协议栈实现双模无线网关的设计方案
助焊膏在应用领域有哪些地方?
恩智浦携手万事达卡帮助所有设备实现无忧支付
用平衡输入电路抑制共模噪声的话筒放大器
如何用单片机电路点亮led?
通过利用虚拟仪器模糊控制技术来实现恒压供水系统的设计
WhatsApp将在2021年终止对iPhone和Android手机的支持
开关插座火灾的主要预防措施有哪些
边缘计算概念股一览
富士康斥资一亿美金设立显示技术研究所
新一代人工智能技术将“智”领新生活
智慧建筑发展有哪些关键点还存在哪些问题
工控系统Web组态工具的特点
TMS320C6678处理器的VLFFT演示探讨与研究
区块链在土木建设数据存储中的作用
智能手机迎来寒武纪大爆发时期
高性能DC/DC变换器LM2717的特点性能和电路应用设计分析
超低损耗功率器件IGBT提高电路效率
中美两国半导体产业建立一个及时沟通的资讯共享机制