单片机实验指导书.docx
- 文档编号:11953898
- 上传时间:2023-06-03
- 格式:DOCX
- 页数:107
- 大小:3.44MB
单片机实验指导书.docx
《单片机实验指导书.docx》由会员分享,可在线阅读,更多相关《单片机实验指导书.docx(107页珍藏版)》请在冰点文库上搜索。
单片机实验指导书
《单片机实验》指导书
崔涛于微波
长春工业大学
电气与电子工程学院
二零一六年
第一章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
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
#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
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
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 单片机 实验 指导书