流水灯的软硬件控制设计.docx

上传人:b****6 文档编号:5695831 上传时间:2022-12-31 格式:DOCX 页数:54 大小:1.89MB
下载 相关 举报
流水灯的软硬件控制设计.docx_第1页
第1页 / 共54页
流水灯的软硬件控制设计.docx_第2页
第2页 / 共54页
流水灯的软硬件控制设计.docx_第3页
第3页 / 共54页
流水灯的软硬件控制设计.docx_第4页
第4页 / 共54页
流水灯的软硬件控制设计.docx_第5页
第5页 / 共54页
点击查看更多>>
下载资源
资源描述

流水灯的软硬件控制设计.docx

《流水灯的软硬件控制设计.docx》由会员分享,可在线阅读,更多相关《流水灯的软硬件控制设计.docx(54页珍藏版)》请在冰豆网上搜索。

流水灯的软硬件控制设计.docx

流水灯的软硬件控制设计

前言

  为了解决初学者对于单片机的入门难问题,本书依据CDIO(conceive构思、design设计、implement实现、operate运作)理念,体现在做中学,把工程师职场环境作为工程教育环境,,为学生提供丰富的设计实现的项目,让学生在实践中和主动学习的情况下更好地掌握理论知识。

在项目驱动下学习一“做中学”;在设计项目和有针对性的环境中学习一“用中学”;在实训实习中学习一“练中学”;教育创造学生价值的理念,基于CDIO的教育教学改革是“实学”PK“虚学”、“动学”PK“静学”、“活学”PK“死学”的一场革命。

老师们表示,将积极参与这场全校性的教育教学改革,提高教学质量。

而并非传统的内容教育。

  单片机的学习并非像传统电子线路那样直观,它是软/硬件结合的技术。

单片机开发人员既要懂单片机的硬件结构,又要懂的软件编程才能驾驭单片机。

单片机教学必须摒弃传统教材,顺应新技术发展的潮流,利用现有的良好软硬件开发环境,实行“理论紧密结合实践”的单片机教学改革,大力培养应用型人才

  本教材利用proteus单片机仿真软件,提供一个比较真实的实验环境,初学者可以不做任何硬件投资,自己设计硬件电路和自己设计的程序载入仿真系统,进行逼真的实验,体验成功的喜悦,但是在具体硬件设计中还需要进行必要的硬件补充和完善。

  本书以教学内容为指导,以工程理念为准则进行了小工程的模块设计,通过每一个简单实例,使读者在一开始就能熟悉单片机的整个开发过程,消除对单片机的“畏惧感”然后采用“边理论、边实践,学一样、会一样”的工程案例教学模式,使单片机的硬件结构在实例学习和设计中逐步掌握和熟练操作。

  为了进一步的提高学生的动手能力,本实验指导书设计了十块模拟的开放式单片机电路板,供同学们设计操作使用。

  

  

 

 

第1章概述

1.1单片机基础

1、单片机概述

单片机,专业名称—MicroControllerUnit(微控制器件),它是由大名鼎鼎的INTEL公司发明的,最早的系列是MCS-48,后来有了MCS-51,现在还有MCS-96系列。

我们经常说的51系列单片机就是MCS-51,它是一种8位的单片机,而MCS-96系列则是一种16位的单片机。

后来INTEL公司把它的核心技术转让给了世界上很多的小公司,所以世界上就有许多公司生产51系列兼容单片机,比如飞利浦的87LPC系列,华邦的W78L系列,达拉斯的DS87系列,现代GSM97系列等等。

目前在我国比较流行的就是美国ATMEL公司的89C51它是一种带Flash ROM的单片机,我们就是以该型号的单片机来作实验的。

讲到这里,也许有的人会问:

我平时在各种书上看到全是讲解8031,8051等型号的单片机,它们又有什么不同呢?

其实它们同属于一个系列,只是89C51的单片机更新型一点(事实上,89C51目前正在用89S51代替,我们的实验系统采用就是89S52的,兼容89C52)。

2.主要单片机的分类

    再给大家介绍一下我们经常在各种刊物上看到的AVR系列和PIC系列单片机是怎么回事?

以便让大家对单片机的发展有一个较全面的认识。

在没有学习单片机之前,这是一个令很多初学者非常困惑的问题,这么多的单片机我该先学哪一种呢?

    AVR系列单片机也是ATMEL公司生产的一种8位单片机,它采用的是一种叫RISC(精简指令集单片机)的结构,所以它的技术和51系列有所不同,开发设备也和51系列是不通用的,它的一条指令的运行速度可以达到纳秒级(即每秒1000000000次),是8位单片机中的高端产品。

说完了AVR的,再来说说另一种--PIC系列单片机,它是美国MICROCHIP公司,唉,又是老美,叫微芯公司的生产的另一种8位单片机,它采用的也是RISC的指令集,它的指令系统和开发工具与51系列更是不同,但由于它的低价格和出色性能,目前国内使用的人越来越多,国内也有很多的公司在推广它,不过它的影响力远没有51系列的大,所以作为初学者,51系列当然(不,绝对)是首选。

   以上几种只是比较多见的系列,其实世界上还有许多的公司生产各种各样的单片机,比如:

MOTOROLA的MC68H系列(老牌的单片机),TI的MSP430C系列(极低功耗的单片机),还有日本的TOSHIBA,日立的HITACH,德国的西门子SIEMENS等等,它们都有各自的结构体系,并不与51系列兼容。

为了不搞大家的脑筋,这里就不介绍了,等大家入门了以后自己再去研究它吧!

现在我们还是回来了解一下51系列单片机到底是个什么东西,它有那些部分组成,请接着往下看。

 3.单片机的结构及组成

   单片机到底是一种什么东东,它究竟能做什么呢?

其实它就是一种能进行数学和逻辑运算,根据不同使用对象完成不同控制任务的面向控制而设计的集成电路。

此话好象有点绕口,没关系,大家都应该知道我们经常使用的电脑吧,在电脑上,我们可以用不同的软件在相同的硬件上实现不同的工作。

比如我们用WORD可以打字,用PROTEL可以设计图纸等等,单片机其实也是如此,同样的芯片可以根据他不同的要求做出截然不同的产品,只不过电脑是面向应用的,而单片机是面向控制的,比如控制一个指示灯的亮和灭,控制一台电机的启动和停止等等。

   那么它的内部究竟由哪些部件组成的呢?

大家都知道我们的电脑有很多的零件,比如CPU(中央处理),RAM(内存),ROM(程序存储器),输入输出设备(并行串行口)等等,在单片机中这些部件都有,而且还把它们全部做到了一块芯片上(这就是单片机名称的由来)。

  讲到这里,您一定会想,这么多零件集成在一块芯片上,那为什么单片机的价格会这么便宜(89S51每块才10元左右),其实原因很简单----功能有强弱,就象我们平时用的PLC,控制一台数控机床要用128点的,而控制一台电机有几点的就足够了,另外这种芯片的产量很大,技术也非常的成熟,自然价格也就很低了。

那么单片机是如何来工作的,我们学习单片机又需要做哪些准备呢?

对于一个初学者来说这是很有必要了解的:

4.学习单片机的准备工作

首先您需要一台电脑,这是最基本的,配置嘛,P2以上的就可以了;然后您需要一套开发单片机的软件,这个软件叫KEILC51,它是美国KeilSoftware公司专门为MCS-51系列单片机开发的第三方软件,安装时选择Uvision2,虽然有2K代码的限制,但足以满足我们学习的需要;

    其次,您还需要一台编程器,它一种把程序写进单片机芯片的设备,这种设备品种很多,操作也很简单,大家既可以买现成的产品,也可以自己制作;有了这两样东西还不行,为了看到程序执行的结果,我们还需要一块实验板。

    好在现在出现了一种支持在线下载的单片机,只要满足一定的外部条件,就能够直接把汇编的程序下载到目标单片机中。

经过反复的实验,我们开发设计了这样的一套实验系统,它采用了一套集源代码编辑、软件汇编、程序下载于一体的专业软件,采用具有在线下载功能的FLASH ROM单片机89S52,配合本教程,可以完成教程中的每一个实验。

这样既免去了您添置编程器和仿真器等设备的昂贵费用,又可以直接在实验板上看到程序执行的结果,更由于采用的是FLASH ROM的存储器,烧写次数可以达到1000次以上。

1.2Proteus使用介绍

一、开始→所有程序→Proteus7Professional→ISIS7Professional,进入Proteus界面,如图1-1-1所示:

图1-1-1Proteus界面

二、点击右上角

的P,进入PickDevices界面选择合适的元件,PickDevices界面如图1-1-2所示:

图1-1-2PickDevices界面

三、在PickDevices界面左边选择类别,中间会显示出相应的器件,右面示相应的引脚图和封装图。

如选择80C52芯片,类别处选MicroprocessorICs,然后中间选择80C52,双击使80C52导入备用框。

选择MicroprocessorICs后界面如图1-1-3所示:

图1-1-3MicroprocessorICs界面

同样的方法找到220R电阻和打光LED,关闭MicroprocessorICs界面,原界面

下会出现导入的备用元件,如图1-1-4所示:

图1-1-4DEVICES选项界面

四、然后在绘图栏空白处右键→放置→器件→82C52,绘图框出现红色80C52元件,单击绘图框合适位置,摆放好元件,如图1-1-5所示:

图1-1-580C52元件摆放图

同理,摆放好发光LED和220R电阻。

如图1-1-6所示:

图1-1-580C52、发光LED和220R电阻元件摆放图

五、左边单击

选择列表(如图1-1-6)中的POWER,在绘图框单击,会出现

,双击该元件会弹出EditTerminalLabel界面,在Label标签下的标号选VCC,如图1-1-7所示:

图1-1-6

列表选项

图1-1-7EditTerminalLabel界面

六、用导线把元器件连起来,连好后如图1-1-8所示:

图1-1-8元器件连接图

七、双击80C52元件,进入编辑元件界面,如图1-1-9所示:

图1-1-9编辑元件界面

在ProgramFile:

导入hex程序,在ClockFrequency选择好仿真所需的经侦频率,如下:

图1-1-10ClockFrequency经侦频率选择界面

点击确定。

八、仿真调试:

点击调试→开始/重新启动调试。

九、保存文件:

文件→保存设计→输入文件名→单击保存。

1.3keil使用教程

KEILC51标准C编译器为8051微控制器的软件开发提供了C语言环境,但是界面是英文的好多初学者看很多教程都是一头雾水,本站特地制作了一个相对简单的教程。

他能能嵌入汇编语言保留了汇编代码高效,快速的特点。

KEILC51编译器的功能不断增强,使你可以更加贴近CPU本身,及其它的衍生产品,其效率已经达到了相当搞的程度。

C51已被完全集成到uVision2的集成开发环境中,这个集成开发环境包含:

编译器,汇编器,实时操作系统,项目管理器,调试器。

uVision2IDE可为它们提供单一而灵活的开发环境。

KeilC51软件是众多单片机应用开发的优秀软件之一,它集编辑,编译,仿真于一体,支持汇编,PLM语言和C语言的程序设计,界面友好,易学易用。

下面介绍KeilC51软件的使用方法,这应该算一个入门教程,奉献给大家

进入KeilC51后,屏幕如下图所示。

几秒钟后出现编辑界,如图1-2-1所示:

图1-2-1KeilC51启动界面

图1-2-2KeilC51编辑界面

 简单程序的调试 学习程序设计语言、学习某种程序软件,最好的方法是直接操作实践。

下面通过简单的编程、调试,引导大家学习KeilC51软件的基本使用方法和基本的调试技巧。

1、

建立一个新工程 单击Project菜单,在弹出的下拉菜单中选中NewProject选项 

图1-2-3KeilC51建立一个新工程

2、

然后选择你要保存的路径,输入工程文件的名字,比如保存到C51目录里,工程文件的名字为C51如下图所示,然后点击保存.

图1-2-4KeilC51建立一个新工程

3、这时会弹出一个对话框,要求你选择单片机的型号,你可以根据你使用的单片机来选择,keilc51几乎支持所有的51核的单片机,我这里还是以大家用的比较多的Atmel的89C51来说明,如下图1-2-5所示,选择89C51之后,右边栏是对这个单片机的基本的说明,然后点击确定.

图1-2-5KeilC51选择单片机的型号

4、完成上一步骤后,屏幕如下图1-2-6所示

图1-2-6KeilC51界面

到现在为止,我们还没有编写一句程序,下面开始编写我们的第一个程序。

5、在下图中,单击“File”菜单,再在下拉菜单中单击“New”选项。

如图1-2-7所示:

图1-2-7KeilC51新建文件选项界面

  新建文件后屏幕如下图1-2-8所示

图1-2-8KeilC51新建文件界面

此时光标在编辑窗口里闪烁,这时可以键入用户的应用程序了,但笔者建议首先保存该空白的文件,单击菜单上的“File”,在下拉菜单中选中“SaveAs”选项单击,屏幕如下图所示,在“文件名”栏右侧的编辑框中,键入欲使用的文件名,同时,必须键入正确的扩展名。

注意,如果用C语言编写程序,则扩展名为(.c);如果用汇编语言编写程序,则扩展名必须为(.asm)。

然后,单击“保存”按钮。

图1-2-9KeilC51保存文件界面

6、回到编辑界面后,单击“Target1”前面的“+”号,然后在“SourceGroup1”上单击右键,弹出如下单:

图1-2-10KeilC51“SourceGroup1”上单击右键选项

然后单击“AddFiletoGroup‘SourceGroup1’”屏幕如下图所示

图1-2-10单击“AddFiletoGroup‘SourceGroup1’”后屏幕界面

选中Test.c,然后单击“Add”屏幕好下图1-2-11所示:

图1-2-11单击“Add”屏幕界面

注意到“SourceGroup1”文件夹中多了一个子项“Text1.c”了吗?

子项的多少与所增加的源程序的多少相同

7、现在,请输入如下的C语言源程序:

 #include         //包含文件 

voidmain(void)          //主函数 

{

SCON=0x52;

TMOD=0x20;

TH1=0xf3;

TR1=1;  //此行及以上3行为PRINTF函数所必须  

printf(“HelloIamKEIL.\n”); //打印程序执行的信息 

 printf(“Iwillbeyourfriend.\n”);

 while

(1); 

}

在输入上述程序时,读者已经看到了事先保存待编辑的文件的好处了吧,即Keilc51会自动识别关键字,并以不同的颜色提示用户加以注意,这样会使用户少犯错误,有利于提高编程效率。

程序输入完毕后,如下图所示:

图1-2-11C语言源程序界面

8、在上图中,单击“Project”菜单,再在下拉菜单中单击“BuiltTarget”选项(或者使用快捷键F7),编译成功后,再单击“Project”菜单,在下拉菜单中单击“Start/StopDebugSession”(或者使用快捷键Ctrl+F5),屏幕如下所示

图1-2-12“Start/StopDebugSession”界面

9、单击“Project”菜单,再在下拉菜单中单击“

”在下图中,单击“Output”中单击“CreateHEXFile”选项,使程序编译后产生HEX代码,供下载器软件使用。

把程序下载到AT89S51单片机中。

图1-2-12CreateHEXFile界面

1.4STC下载软件使用说明

1.打开STC-ISP的图标。

图1-3-1STC-ISP图标

2.STC-ISP整体界面如下。

图1-3-2STC-ISP整体界面

3.然后在步骤一中选择单片机型号,可以选择(STC89C51RC)。

图1-3-3STC-ISP选择单片机型号界面

4.点“OpenFile”然后根据自己所存程序的路径选择所要下载的程序,选的是Hex

文档。

图1-3-3STC-ISPOpenFile界面

5.

(1)选择端口,选择根据自己电脑的硬件端口。

(如COM1)

图1-3-4STC-ISP硬件端口设置界面

(2)然后选MaxBuad中选择波特率。

图1-3-5STC-ISP波特率设置界面

6.选择可以不管(因为本实验板符合默认的模式)。

图1-3-6STC-ISP步骤4界面

7..按下“Download/下载”。

给开发板断电后在上电。

图1-3-7STC-ISPDownload/下载界面

8.下载完成。

图1-3-8STC-ISP下载完成界面

第2章实验项目设计

2.1流水灯的软硬件控制设计

一、实验目的:

1、通过实验,熟悉并掌握试验系统原理与使用方法。

2、通过实验掌握51单片机的I/O口使用方法。

二、实验内容:

1、利用51单片机的I/O口作用,设置流水灯。

2、掌握使用keil环境编程。

3、掌握下载keil编译好的程序到51单片机中。

三、实验步骤:

1、了解并熟悉实验设备,掌握51单片机与外设流水灯的接法。

2、用keil编程环境,编写流水灯程序。

3、在keil编译好的程序下载到51单片机中,使流水灯依次点亮。

4、编写实现各种典型程序,熟悉并掌握程序设计方法。

5、完成实验报告。

四、实验原理图:

五、实物图:

六、实验程序:

//ex1-1:

使用P1口流水点亮8位LED

#include//包含单片机寄存器的头文件

/****************************************

函数功能:

延时一段时间

*****************************************/

voiddelay(void)

{

unsignedchari,j;

for(i=0;i<250;i++)

for(j=0;j<250;j++);

}

 

/*******************************************************

函数功能:

主函数

********************************************************/

voidmain(void)

{

while

(1)

{

P1=0xfe;//第一个灯亮

delay();//调用延时函数

P1=0xfd;//第二个灯亮

delay();//调用延时函数

P1=0xfb;//第三个灯亮

delay();//调用延时函数

P1=0xf7;//第四个灯亮

delay();//调用延时函数

P1=0xef;//第五个灯亮

delay();//调用延时函数

P1=0xdf;//第六个灯亮

delay();//调用延时函数

P1=0xbf;//第七个灯亮

delay();//调用延时函数

P1=0x7f;//第八个灯亮

delay();//调用延时函数

}

}

 

//ex1-2:

用左移运算流水点亮P1口8位LED

#include//包含单片机寄存器的头文件

/*****************************

函数功能:

延时一段时间

*****************************/

voiddelay(void)

{

unsignedintn;

for(n=0;n<30000;n++);

}

/*****************************

函数功能:

主函数

*****************************/

voidmain(void)

{

unsignedchari;

while

(1)

{

P1=0xfe;

delay();

for(i=0;i<8;i++)//设置循环次数为8

{

P1=((P1<<1)|0x01);//每次循环P1的各二进位左移1位,低位与1或

delay();//调用延时函数

}

}

}

 

//ex1-3用字符型数组控制P0口8位LED流水点亮

#include//包含单片机寄存器的头文件

/****************************************

函数功能:

延时约60ms(3*100*200=60000μs)

****************************************/

voiddelay60ms(void)

{

unsignedcharm,n;

for(m=0;m<100;m++)

for(n=0;n<200;n++);

}

 

/****************************************

函数功能:

主函数

****************************************/

voidmain(void)

{

unsignedchari;

unsignedcharcodeTab[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};//定义无符号字符型数组

while

(1)

{

for(i=0;i<8;i++)

{

P1=Tab[i];//依次引用数组元素,并将其送P1口显示

delay60ms();//调用延时函数

}

}

}

//ex-4:

内部函数intrins.h应用举例

#include//包含51单片机寄存器定义的头文件

#include//包含函数isalpha()声明的头文件

/*************************************************

函数功能:

延时约150ms

*************************************************/

 

voiddelay(void)

{

unsignedcharm,n;

for(m=0;m<200;m++)

for(n=0;n<250;n++);

}

 

/*************************************************

函数功能:

主函数

*************************************************/

voidmain(void)

{

P1=0xfe;//P1=11111110B

while

(1)

{

P1=_crol_(P1,1);//将P1的二进制位循环左移1位后再赋给P1

delay();//调用延时函数

}

}

 

//ex1-5:

用定时器T0查询方式P1口8位控制LED

#include//包含51单片机寄存器定义的头文件

/**************************************************************

函数功能:

主函数

**************************************************************/

voidmain(void)

{

inti=0;

TMOD=

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 经管营销

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1