单片机实验指导书.docx

上传人:b****8 文档编号:11953898 上传时间:2023-06-03 格式:DOCX 页数:107 大小:3.44MB
下载 相关 举报
单片机实验指导书.docx_第1页
第1页 / 共107页
单片机实验指导书.docx_第2页
第2页 / 共107页
单片机实验指导书.docx_第3页
第3页 / 共107页
单片机实验指导书.docx_第4页
第4页 / 共107页
单片机实验指导书.docx_第5页
第5页 / 共107页
单片机实验指导书.docx_第6页
第6页 / 共107页
单片机实验指导书.docx_第7页
第7页 / 共107页
单片机实验指导书.docx_第8页
第8页 / 共107页
单片机实验指导书.docx_第9页
第9页 / 共107页
单片机实验指导书.docx_第10页
第10页 / 共107页
单片机实验指导书.docx_第11页
第11页 / 共107页
单片机实验指导书.docx_第12页
第12页 / 共107页
单片机实验指导书.docx_第13页
第13页 / 共107页
单片机实验指导书.docx_第14页
第14页 / 共107页
单片机实验指导书.docx_第15页
第15页 / 共107页
单片机实验指导书.docx_第16页
第16页 / 共107页
单片机实验指导书.docx_第17页
第17页 / 共107页
单片机实验指导书.docx_第18页
第18页 / 共107页
单片机实验指导书.docx_第19页
第19页 / 共107页
单片机实验指导书.docx_第20页
第20页 / 共107页
亲,该文档总共107页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

单片机实验指导书.docx

《单片机实验指导书.docx》由会员分享,可在线阅读,更多相关《单片机实验指导书.docx(107页珍藏版)》请在冰点文库上搜索。

单片机实验指导书.docx

单片机实验指导书

《单片机实验》指导书

崔涛于微波

 

长春工业大学

电气与电子工程学院

二零一六年

 

 

第一章KeilC软件使用

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

下面介绍KeilC51软件的使用方法:

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

几秒钟后出现编辑界。

启动KeilC51时的屏幕

                   进入KeilC51后的编辑界面

 简单程序的调试

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

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

 1)建立一个新工程

 单击Project菜单,在弹出的下拉菜单中选中NewProject选项。

 2)然后选择你要保存的路径,输入工程文件的名字,比如保存到C51目录里,工程文件的名字为C51

如下图所示,然后点击保存。

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

 4)完成上一步骤后,屏幕如下图所示。

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

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

 新建文件后屏幕如下图所示。

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

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

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

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

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

 选中Test.c,然后单击“Add ”屏幕好下图所示。

 注意:

“SourceGroup1”文件夹中多了一个子项“Text1.c”,子项的多少与所增加的源程序的多少相同。

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

 #include         //包含文件

 #include

 voidmain(void)          //主函数

 {    

  SCON=0x52;

  TMOD=0x20;

  TH1=0xf3;

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

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

  printf(“Iwillbeyourfriend.\n”);

  while

(1);

 }

 在输入上述程序时,Keilc51会自动识别关键字,并以不同的颜色提示用户加以注意,这样会使用户少犯错误,有利于提高编程效率。

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

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

 9)调试程序:

在上图中,单击“Debug”菜单,在下拉菜单中单击“Go”选项,(或者使用快捷键F5),然后再单击“Debug”菜单,在下拉菜单中单击“StopRunning”选项(或者使用快捷键Esc);再单击“View”菜单,再在下拉菜单中单击“SerialWindows#1”选项,就可以看到程序运行后的结果,其结果如下图所示。

至此,我们在KeilC51上做了一个完整工程的全过程。

但这只是纯软件的开发过程。

10)单击“Project”菜单,再在下拉菜单中单击“

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

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

 

第二章单片机下载器软件使用

1.打开STC-ISP软件;然后选择单片机型号。

2.点击“openfile”然后根据自己所存程序的路径选择所要下载的程序,选的是Hex文档。

3.

(1)选择端口,选择相应的硬件端口。

(2)选择MaxBuad中选择波特率为115200。

4.其他选择采用默认值,不予修改。

5.按下“Download/下载”按钮——再给学习板重新闭合电源开关。

6.下载程序完成,软件界面如下:

 

第三章实验

实验一程序状态指示灯实验

一、实验目的:

本程序重点演示了一个最简程序的基本结构,它从顺序、判断、循环的形式表现程序的基本结构,此程序通过闪灯不断的闪动,及闪灯闪动的快慢来表示程序不不同工作状态。

它也是常数字设备中进行状态表示的方法之一(例:

网卡)。

二、实验原理图:

连接方法:

JP11(P2)和J12用8PIN排线连接起来

三、实现代码:

(1)LED灯闪烁代码

#include//此文件中定义了51的一些特殊功能寄存器

voiddelay(unsignedinti);//声明延时函数

main()

{

while

(1){

P2=0x00;//置P0口为低电平

delay(600);//调用延时程序

P2=0xff;//置P0口为高电平

delay(600);//调用延时程序

}

}

/*******延时函数*************/

voiddelay(unsignedinti)

{

unsignedcharj;

for(i;i>0;i--)//循环600*255次

for(j=255;j>0;j--);

}

(2)二进制加法灯闪烁代码

#include

voiddelay(unsignedinti);//声明延时函数

main()

{

unsignedcharNum=0xff;

while

(1)

{P2=Num;

delay(1000);//延时函数

Num--;

}

}

/*******延时函数*************/

voiddelay(unsignedinti)

{

unsignedcharj;

for(i;i>0;i--)

for(j=255;j>0;j--);

}

(3)LED流水灯代码

#include//此文件中定义了51的一些特殊功能寄存器

#include

voiddelayms(unsignedcharms)

//延时子程序

{

unsignedchari;

while(ms--)

{

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

}

}

main()

{

unsignedcharLED;

LED=0xfe;//0xfe=11111110

while

(1)

{

P2=LED;

delayms(250);

LED=LED<<1;//循环右移1位,点亮下一个LED"<<"为左移位

if(P2==0x00){LED=0xfe;}//0xfe=11111110

}

}

(4)跑马灯代码

#include

#include

voiddelayms(unsignedcharms)

{

unsignedchari;

while(ms--)

{

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

}

}

main()

{

unsignedcharLED;

LED=0xfe;

P2=LED;

while

(1)

{

delayms(250);

LED=_crol_(LED,1);//循环右移1位,点亮下一个LED此函数位库函数

P2=LED;

}

}

(5)中断闪烁代码

#include//此文件中定义了51的一些特殊功能寄存器

voiddelay(unsignedinti);//声明延时函数

intnum;

sbitP2_0=P2^0;

main()

{

TMOD=0X10;//定时器1的工作方式1

EA=1;//开启总中断

ET1=1;//开启定时器中断1

TH1=0x3c;//高位赋初值

TL1=0xb0;//低位赋初值3cb0是15535,则计时为(65535-15535=50000)us,即50ms

TR1=1;//启动定时器T1

num=0;

while

(1)

{

P2_0=num;

}

}

/*******延时函数*************/

voidint_1()interrupt3

{

unsignedcharn;

TH1=0x3c;

TL1=0xb0;//3cb0是15535,则计时为(65535-15535=50000)us,即50ms

TR1=1;

n++;

if(n==10)//0.5snum加1

{

num=~num;

n=0;

}

}

四、运行效果:

程序运行效果为:

LED灯闪烁。

五、思考题:

1、如何改变流水灯之间间隔时间?

2、怎样实现流水灯的乒乓实验?

实验二按键实验

一、实验目的:

本程序重点演示了按键控制功能,首先通过程序判断哪个按键被按下,通过单片机控制相应的LED灯点亮或者移位。

二、实验原理图:

三、实现代码:

(1)按键控制LED灯移位

/*

*按键控制程序*

*连接方法:

JP10(P2)与J12(LED灯)连接*

*JP11(P0)与JP5(按键接口)连接*

*/

#include

#include

unsignedcharscan_key();

voidproc_key(unsignedcharkey_v);

voiddelayms(unsignedcharms);

sbitK1=P0^0;//对应按钮K1

sbitK2=P0^1;//对应按钮K2

main()

{

unsignedcharkey_s,key_v;

key_v=0x03;

P2=0xfe;

while

(1)

{

key_s=scan_key();

if(key_s!

=key_v)

{

delayms(10);

key_s=scan_key();

if(key_s!

=key_v)

{

key_v=key_s;

proc_key(key_v);

}

}

}

}

unsignedcharscan_key()

{

unsignedcharkey_s;

key_s=0x00;

key_s|=K2;

key_s<<=1;

key_s|=K1;

returnkey_s;

}

voidproc_key(unsignedcharkey_v)

{

if((key_v&0x01)==0)

{

P2=_cror_(P2,1);

}

elseif((key_v&0x02)==0)

{

P2=_crol_(P2,1);

}

}

voiddelayms(unsignedcharms)//延时子程序

{

unsignedchari;

while(ms--)

{

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

}

}

(2)按键控制LED灯点亮

/*

*连接方法:

JP10(P2)与J12(LED灯)连接*

*JP11(P0)与JP5(按键接口)连接*

*/

#include

#include

main()

{

while

(1)

{

P2=P0;

}

}

(3)读按键控制LED灯点亮

/*

*连接方法:

JP10(P2)与J12(LED灯)连接*

*JP11(P0)与JP5(按键接口)连接*

*/

#include

#include

unsignedintkey;

voidscan_key();

main()

{

while

(1)

{

scan_key();//检测按键

switch(key)//读出对应值

{

case1:

P2=0x01;break;

case2:

P2=0x02;break;

case3:

P2=0x04;break;

case4:

P2=0x08;break;

case5:

P2=0x10;break;

case6:

P2=0x20;break;

case7:

P2=0x40;break;

case8:

P2=0x80;break;

default:

;

}

}

}

voidscan_key()//按键检测函数

{

if(P0==0xfe)

key=1;

if(P0==0xfd)

key=2;

if(P0==0xfb)

key=3;

if(P0==0xf7)

key=4;

if(P0==0xef)

key=5;

if(P0==0xdf)

key=6;

if(P0==0xbf)

key=7;

if(P0==0x7f)

key=8;

}

(4)按键LED灯花样点亮

/*

*连接方法:

JP10(P2)与J12(LED灯)连接*

*JP11(P0)与JP5(按键接口)连接*

*/

#include

#include

unsignedintkey;

voiddelay(ms);

voidscan_key();

voidled1();

voidled2();

voidled3();

voidled4();

voidled5();

voidled6();

voidled7();

voidled8();

main()

{

while

(1)

{

scan_key();//检测按键

switch(key)//读出对应值

{

case1:

led1();key=0;break;

case2:

led2();key=0;break;

case3:

led3();key=0;break;

case4:

led4();key=0;break;

case5:

led5();key=0;break;

case6:

led6();key=0;break;

case7:

led7();key=0;break;

case8:

led8();key=0;break;

default:

;

}

}

}

voidled1()//led左移

{

unsignedchari;

P2=0x01;

for(i=8;i>0;i--)

{

P2<<=1;

delay(100);

}

}

voidled2()//led右移

{

unsignedchari;

P2=0x80;

for(i=8;i>0;i--)

{

P2>>=1;

delay(100);

}

}

voidled3()//led交替闪1

{

P2=0xaa;

delay(100);

P2=0x55;

delay(100);

P2=0xaa;

delay(100);

P2=0x55;

delay(100);

}

voidled4()////led交替闪2

{

P2=0x55;

delay(100);

P2=0xaa;

delay(100);

P2=0x55;

delay(100);

P2=0xaa;

delay(100);

}

voidled5()////led交替闪3

{

P2=0xcc;

delay(100);

P2=0x33;

delay(100);

P2=0xcc;

delay(100);

P2=0x33;

delay(100);

}

voidled6()////led交替闪4

{

P2=0x33;

delay(100);

P2=~P2;//取反

delay(100);

P2=~P2;

delay(100);

P2=~P2;

delay(100);

}

voidled7()

{

led1();led2();led3();led4();led5();led6();//全来一遍

}

voidled8()

{

P2=0XFF;//全亮

}

voidscan_key()//按键检测函数

{

if(P0==0xfe)

key=1;

if(P0==0xfd)

key=2;

if(P0==0xfb)

key=3;

if(P0==0xf7)

key=4;

if(P0==0xef)

key=5;

if(P0==0xdf)

key=6;

if(P0==0xbf)

key=7;

if(P0==0x7f)

key=8;

}

voiddelay(ms)

{

unsignedi,j;

for(i=ms;i>0;i--)

for(j=110;j>0;j--);

}

四、运行效果:

程序运行效果为:

按键控制LED灯的移位。

五、思考题:

1、用按键控制流水灯的方向翻转。

2、用一个按键控制所有发光管的亮、灭。

实验三蜂鸣器发声实验

一、实验目的:

通过单片机的定时器来实现不同声音的操作。

二、实验原理图:

三、实现代码:

#include

#include

sbitBeep=P1^5;

unsignedcharn=0;//n为节拍常数变量

unsignedcharcodemusic_tab[]={

0x18,0x30,0x1C,0x10,//格式为:

频率常数,节拍常数,频率常数,节拍常数,

0x20,0x40,0x1C,0x10,

0x18,0x10,0x20,0x10,

0x1C,0x10,0x18,0x40,

0x1C,0x20,0x20,0x20,

0x1C,0x20,0x18,0x20,

0x20,0x80,0xFF,0x20,

0x30,0x1C,0x10,0x18,

0x20,0x15,0x20,0x1C,

0x20,0x20,0x20,0x26,

0x40,0x20,0x20,0x2B,

0x20,0x26,0x20,0x20,

0x20,0x30,0x80,0xFF,

0x20,0x20,0x1C,0x10,

0x18,0x10,0x20,0x20,

0x26,0x20,0x2B,0x20,

0x30,0x20,0x2B,0x40,

0x20,0x20,0x1C,0x10,

0x18,0x10,0x20,0x20,

0x26,0x20,0x2B,0x20,

0x30,0x20,0x2B,0x40,

0x20,0x30,0x1C,0x10,

0x18,0x20,0x15,0x20,

0x1C,0x20,0x20,0x20,

0x26,0x40,0x20,0x20,

0x2B,0x20,0x26,0x20,

0x20,0x20,0x30,0x80,

0x20,0x30,0x1C,0x10,

0x20,0x10,0x1C,0x10,

0x20,0x20,0x26,0x20,

0x2B,0x20,0x30,0x20,

0x2B,0x40,0x20,0x15,

0x1F,0x05,0x20,0x10,

0x1C,0x10,0x20,0x20,

0x26,0x20,0x2B,0x20,

0x30,0x20,0x2B,0x40,

0x20,0x30,0x1C,0x10,

0x18,0x20,0x15,0x20,

0x1C,0x20,0x20,0x20,

0x26,0x40,0x20,0x20,

0x2B,0x20,0x26,0x20,

0x20,0x20,0x30,0x30,

0x20,0x30,0x1C,0x10,

0x18,0x40,0x1C,0x20,

0x20,0x20,0x26,0x40,

0x13,0x60,0x18,0x

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

当前位置:首页 > 外语学习 > 法语学习

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2