ImageVerifierCode 换一换
格式:DOCX , 页数:14 ,大小:28.03KB ,
资源ID:11639434      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/11639434.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(《单片机原理及应用》实验指导书C语言.docx)为本站会员(b****5)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

《单片机原理及应用》实验指导书C语言.docx

1、单片机原理及应用实验指导书C语言 单 片 机 原 理 及 应用 实 验 指 导 书 (C语言) XX大学物电学院 微机教研室 XX 211 前 言 由于单片机具有高可靠性、超小型、低价格、容易产品化等特点,在仪器仪表智能化、实时工业控制、实时数据采集、智能终端、通信设备、导航系统、家用电器等控制应用领域,具有十分广泛的用途。由于目前在国内单片机应用中,MCS-51系列单片机仍然是一种主流单片机,所以本实验指导书为学习MCS-51单片机的学生,配合单片机原理及应用课程的教学,结合本学院自制单片机教学实验板编写了这本实验指导书。单片机原理应用及是一门实践性很强的课程,提高教学质量的一个重要环节是上

2、机实习和训练,无论是学习汇编语言程序设计,还是学习接口电路和外设与计算机的连接,或者软硬兼施地研制单片机应用系统,不通过加强动手是不能获得预期效果的。本实验指导书提供多个实验的指导性材料,有些实验还有一些有一定难度的选做项目,可以根据课时的安排和教学要求进行取舍。为了达到某些实验的目的,书中提供的参考程序与实际应用中的程序会有些差别,所以不一定是最优的。由于时间紧迫,需要赶课程进度与实验时间的同步,加上编者学识有限,如有不妥之处,欢迎读者批评指正。实 验 须 知 实验前必须阅读教科书的有关部分和本实验指导书,了解实验目的、内容、步骤,做好实验前的准备工作,编写好实验中要求自编或修改的程序;完成

3、实验前要求完成的准备工作后方可以上机实验,否则不得上机操作。 各种电源的电压和极性不能接错,严禁带电接线和接插元器件。通电前须经过指导教师检查认可后方能通电。 不准随意拨弄各种与实验无关的旋钮和开关,凡与本次实验无关的任何设备都禁止动用和摸弄,注意安全。 严禁用手触摸实验系统印制电路板和元器件的引脚,防止静电击穿芯片。 实验中若损坏仪器或元器件,应及时向指导教师报告。 在实验室内保持安静和卫生,不得随意走动和喧哗,集中精力完成实验。 实验完成后,关掉电源,及时整理实验台桌面,保持环境整洁。 按规定认真完成实验报告,在规定的时间内缴上实验报告。 凡实验或实验报告未能按规定完成的学员,不能参加本课

4、程的考试或考查。单片机实验报告格式 实验报告标题 一、实验目的 二、实验内容 三、实验设计及调试(1)实验分析及内容。(2)实验电路画出与实验内容有关的简单实验电路。(3)实验设计及调试步骤根据内容写出实验程序。调试程序,观察结果。(4)实验调试过程中所遇到的问题、解决问题的思路和解决的方法。四、实验后的经验教训总结。五、对实验课的建议 目 录 实验一 实验板使用,KEIL C51软件使用 6 实验二 单片机控制LED灯点亮 12 实验三 模拟开关灯 16 实验四 单片机控制数码管实验 21 实验五 中断系统应用实验 25 实验六 LED 数码管的动态驱动 29 实验七 定时器/计数器使用 3

5、2 实验八 数字电子钟 36 实验九 矩阵键盘识别实验 37 实验十 自动演奏乐曲 41 实验十一 综合实验 交通信号灯控制器的设计 45 实验十二 教学板自检程序设计 46 实验十三 综合实验数据采集火灾报警装置的软硬件设计 47 附录实验教学板电路原理图 48 实验一 实验板使用,Keil C51软件使用 一、实验目的 熟悉单片机实验板、Keil C51软件使用 二、实验说明 本实验介绍实验板的组成、Keil C51软件使用以及烧录软件的使用。通过该实验学生可以了解单片机编程、调试方法。三、实验内容及步骤 启动PC机,安装好Keil C51软件以及烧录软件,用串口线连接计算机与实验板(US

6、B线提供电源)。打开Keil uVision2仿真软件,首先建立本实验的项目文件,接着建立源程序,编译无误后,全速运行程序。可把源程序编译成可执行文件,用烧录器烧录到89芯片中。四、Keilc 软件使用说明 1、打开程序双击程序 2、新建工程Project New Project保存工程选择CPU(一般选ATMEL公司的AT89S51) -17- 3、设置工程:右击Options for Target 1 选择Create HEX (输出HEX文件)。-18- 4、新建源文件选FileNew输入、编辑源程序保存(汇编源程序文件名.asm;C源程序文件名.c) 5、为工程添加源文件在Projec

7、t出口File页上单击文件组,选择Add Files to GroupSource Group 1选项,选择你的源文件和文件类型,然后点击ADD,再点击close。-19- 6、编译点击 ,或右击Target 1 Build Target F7,就可对源程序进行编译。当程序有语法错误时,会在输出窗口(Output Windows)中显示错误信息和警告信息,修改编译成功后会生成 HEX文件。7、下载、调试编译成功后,用在线烧录程序将.HEX文件下载到单片机内部ROM中运行,在运行过程中若发现错误要重新修改程序,并编译后再下载运行。五、烧录软件的使用 1、打开在线烧录程序 2、选择MCU类型(ST

8、C89C51RC) 1、 点击, 打开工程目录下的hex文件 2、 选择端口(一般是COM1) 3、 点击Download烧录程序 4、 打开实验板上的电源(如果烧录的时候出现问题,点击stop) 注意5、6 两步骤的顺序不能颠倒!即在点击Download之前要先关掉实验板上的电源。实验二 单片机控制LED灯点亮 一、实验目的 进一步熟悉编程和程序调试 学习P1口的使用方法 学习延时子程序的编写和使用 二、实验说明 (1)输出控制。如图1所示 ,当P1 . 端口输出高电平,即P1时 ,根据发光二极管的单向导电性 可知,这时发光二极管L1熄灭;当 P1 .端口输出低电平,即 P1 .时,发光二极

9、管L 1亮;我们可以使用SETB P指令使 P 端口输出高电平 , 使用CLR P指令使 P1 . 端口输出低电平 。(2)延时子程序的设计方法 作为单片机的指令的执行时间是很短的,数量达微秒级,因此,如果我们要求的闪烁时间间隔为.2秒,相对于微秒来说,相差太大,所以我们在执行某一指令时,插入延时程序,来达到我们的要求,但这样的延时程序是如何设计呢?下面具体介绍其原理石英晶体为12MHz,因此,1个机器周期为1微秒 机器周期 微秒 MOV R6,#2 2个机器周期 2 D1: MOV R7,#248 2个机器周期 22 DJNZ R7,$ 2个机器周期 22482 DJNZ R6,D1 2个机

10、器周期22412 因此,上面的延时程序时间为1.2ms。由以上可知,当R61、R7248时,延时5ms,R62、R7248时,延时1ms,以此为基本的计时单位。如要求.2秒2ms,1msR52ms,则R52,汇编延时子程序如下DELAY: MOV R5,#2 D1: MOV R6,#2 D2: MOV R7,#248 DJNZ R7,$ DJNZ R6,D2 DJNZ R5,D1 RET C语言延时子程序如下void delay2s(void) /延时.2秒子程序 unsigned char i,j,k; for(i=2;i;i-) for(j=2;j;j-) for(k=248;k;k-);

11、 三、实验步骤及参考例子 实验步骤说明本实验需要用到单片机最小应用系统。用P1口做输出口,程序功能使发光二极管点亮。用串行数据通信线连接计算机与实验板,用USB给实验板提供电源 打开Keil uVision2仿真软件,首先建立本实验的项目文件,输入源程序(参考程序1),进行编译,直到编译无误。生成hex文件。通过STCISP下载软件,将hex文件下载到实验板内,观察发光二极管显示情况。参考例子(1) 点亮板子上的第一个灯D (2) 让第一个灯闪烁 四、参考程序 (一)适用于mini8E实验板 1) #include void main() P1=xfe; 2) #include #define

12、 uint unsigned int #define uchar unsigned char delay(); void main() while(1) P1=xfe; delay(); P1=xff; delay(); void delay() uint x,y; for(x=1;x;x-) for(y=6;y;y-) ; (二)适用于自制最小系统实验板 (1) #include void main (void) P2=x; P2=x1; P=xfe; (2) #include void delay(void); void main (void) P2=x; while(1) P2=x1;

13、P=xfe; delay(); /P2=x; P=xff; delay(); void delay(void) int x,y; for(x=6;x;x-) for(y=1;y;y-); 六、实验内容 请在keil环境下编写以下程序1)点亮最后一个LED(或者任意一个LED,或者任意几个LED) 2)让点亮的LED闪烁 3)点亮板子上的D、D2、D4、D6灯,与D1、D3、D5、D7灯交替闪烁 4)设计出流水灯程序,从D7D或从D-D7 实验三 模拟开关灯 1实验目的 进一步熟悉编程和程序调试 学习独立按键的使用方法 2实验说明 如果系统只需几个按键,可直接采用I/O线构成单个按键电路,各个按

14、键之间相互独立,一根线上的按键状态不会影响其他输入线上的工作状态,又称独立式键盘接口电路。检测是否有键闭合,如有键闭合,则去除键抖动,判断键号并转入相应的按键处理。编写单片机的键盘检测程序时,一般在检测按下时加入去抖延时,检测松手时就不用加了。3、参考例子 1)通过四个按键来控制LED灯的显示情况S1D点亮 S2D1点亮 S3D2点亮 S4D3点亮 4、参考程序 (一)适用于自制实验板 #include #define uint unsigned int #define uchar unsigned char uchar flag; uchar key_down; sbit LED2=P; s

15、bit LED3=P1; sbit LED4=P2; sbit LED5=P3; void delay(uint k) uint data i,j; for(i=;ik;i+) for(j=;j121;j+) ; uchar scan_key(void) uchar temp; temp=P3; return temp; void main(void) key_down=; P3=xf7; P2=x1; P=xff; while(1) P3=xf7; if(P3!=xf7)&(key_down=) delay(2); if(P3!=xf7)&(key_down=) flag=scan_key(

16、); key_down=1; switch(flag) case xe7:LED2=LED2;break; case xd7:LED3=LED3;break; case xb7:LED4=LED4;break; case x77:LED5=LED5;break; default: break; if(P3=xf7) key_down=; (二)适用与mini8E板 #include #define uint unsigned int #define uchar unsigned char uchar flag; void delay(uint k) uint data i,j; for(i=;

17、ik;i+) for(j=;j121;j+) ; uchar scan_key(void) uchar temp; temp=P3; return temp; void main(void) while(1) P3=xff; if(P3!=xff) delay(2); if(P3!=xff) flag=scan_key(); else flag=; switch(flag) case xfe:P1=xfe;break; case xfd:P1=xfd;break; case xfb:P1=xfb;break; case xf7:P1=xf7;break; default:P1=xff;brea

18、k; 或者 include #define uint unsigned int #define uchar unsigned char uchar flag; uchar key_down; sbit LED2=P1; sbit LED3=P11; sbit LED4=P12; sbit LED5=P13; void delay(uint k) uint data i,j; for(i=;ik;i+) for(j=;j121;j+) ; uchar scan_key(void) uchar temp; temp=P3; return temp; void main(void) key_down

19、=; P3=xff; P1=xff; while(1) P3=xff; if(P3!=xff)&(key_down=) delay(2); if(P3!=xff)&(key_down=) flag=scan_key(); key_down=1; switch(flag) case xfe:LED2=LED2;break; case xfd:LED3=LED3;break; case xfb:LED4=LED4;break; case xf7:LED5=LED5;break; default: break; if(P3=xff) key_down=; 5、实验内容 1)8个按键分别对应8盏led

20、灯的亮灭(针对自制教学板) 2)通过四个按键来控制LED灯的显示情况S1D-D3点亮 S2D2点亮 S3D-D7点亮 S4D-D5点亮 实验四 单片机控制数码管实验 一、实验目的 掌握数码管是如何显示出字符 进一步掌握延时子程序的使用 二、实验原理 数码管两种接法 共阴极数码管编码 x3f , x6 , x5b , x4f , x66 , x6d , 1 2 3 4 5 x7d , x7 , x7f , x6f , x77 , x7c , 6 7 8 9 A B x39 , x5e , x79 , x71 , x C D E F 无显示 请思考共阳极数码管的编码。三、参考例子 1)让第一个数码

21、管显示一个8字 A) 对于MINI8E实验板(共阴极), 数码管的选通是通过P2口控制三八译码器得到的,要让第一个数码管显示8字,那么别的数码管的位选就要关闭,即只打开第一个数码管的位选。控制位选的P2口要输出的数据位xf7(二进制为1111 111)。位选确定后,在确定段选,要显示的是8,那么只有dp段为,其余段为1,所以P口要输出x7f(二进制111 1111)。B) 对于自制实验板(共阳极),数码管的选通是通过P2口控制的。要让第一个数码管显示8字,那么别的数码管的位选就要关闭,即只打开第一个数码管的位选。控制位选的P2口要输出的数据位x8(二进制为 1)。位选确定后,在确定段选,要显示

22、的是8,那么只有dp段为1,其余段为,所以P口要输出x8(二进制1 )。2)在四个数码管上显示1,2,3,4 位选接P2口 左边四个数码管 DS3 DS2 DS1 DS 对应的P2口xf3 xf2 xf1 xf 右边四个数码管 DS3 DS2 DS1 DS 对应的P2口xf7 xf6 xf5 xf4 段选接P口 四、参考程序 (一)mini8e实验板 1) #include void main(void) while(1) P2=xf7; P=x7f; 2) #include #define uint unsigned int #define uchar unsigned char void

23、delay(); void main(void) while(1) P2=xf7; P=x66; delay(); P2=xf6; P=x4f; delay(); P2=xf5; P=x5b; delay(); P2=xf4; P=x6; delay(); void delay() /延时程序1 uint x,y; for(x=2;x;x-) for(y=112;y;y-) ; (二)自制教学实验板(共阳极数码管) (1) #include void main(void) while(1) P2=x8; P=x8; 2) #include #define uint unsigned int #

24、define uchar unsigned char void delay(); void main(void) while(1) P2=x8; P=x99; delay(); P2=x4; P=xb; delay(); P2=x2; P=xa4; delay(); P2=x1; P=xf9; delay(); void delay() /延时程序1 uint x,y; for(x=2;x;x-) for(y=112;y;y-) ; 五、原理图 六、实验内容 1)用一位数码管循环显示9;2)用数码管显示字母A-F;3) 交替点亮4个数码管。(例如开始时在数码显示器的最右边一位上显示1个“”字,

25、以后每隔.5秒将“”字左移1位,直到最左边一位后则停止显示。) 4)结合实验3,实现按键与数字的一一对应。实验五 中断系统应用实验 一、实验目的 掌握外部中断技术的基本使用方法 掌握中断处理程序的编写方法 二、实验说明 外部中断的初始化设置共有三项内容中断总允许即EA=1,外部中断允许即EXi=1(i=或1),中断触发方式设置。中断触发方式设置一般有两种方式电平触发方式和脉冲(边沿)触发方式,本实验选用后者,其前一次为高电平后一次为低电平时为有效中断请求。因此高电平状态和低电平状态至少维持一个周期,中断请求信号由引脚INT(P2)和INT1(P3)引入,本实验由INT(P2)引入。中断控制原理

26、中断控制是提供给用户使用的中断控制手段。实际上就是控制一些寄存器,51系列用于此目的的控制寄存器有四个TCON 、IE 、SCON 及IP。中断响应的过程首先中断采样然后中断查询最后中断响应。采样是中断处理的第一步,对于本实验的脉冲方式的中断请求,若在两个相邻周期采样先高电平后低电平则中断请求有效,IE或IE1置“1”;否则继续为“”。所谓查询就是由CPU测试TCON和SCON中各标志位的状态以确定有没有中断请求发生以及是那一个中断请求。中断响应就是对中断请求的接受,是在中断查询之后进行的,当查询到有效的中断请求后就响应一次中断。 851的中断系统 851的中断系统包括5个中断源,并提供两个优

27、先级,允许用户对中断源进行独立控制和中断优先级设置.851支持的5个中断源分别为外部中断、定时器溢出中断、外部中断1、定时器1溢出中断和串口中断。对应的中断号为、1、2、3、4;寄存器有4个工作组可以切换,为-3;C51中,中断服务程序是以中断函数的方式来时实现的。中断函数格式如下void 函数名() interrupt 中断号 using 工作组 中断服务程序内容; 三、参考例子 1) 右边的三个数码管从“”开始进行加法计数。按动按键时计数暂停,再按继续计数。四、参考程序 (一)适用于自制教学实验板 #include #define uchar unsigned char #define u

28、int unsigned int sbit P37=P37; uchar code table1=xc,xf9,xa4,xb,x99,x92,x82,xf8,x8,x9; uchar code wei4=x8,x4,x2,x1; uint cnt; bit flag; void init(void) bit flag=; /设置标志 EA=1;/开中断 EX=1; /外部中断开中断 IT=1; /外部中断的触发方式 void delay(uint k) uint data i,j; for(i=;ik;i+) for(j=;j999)cnt=; for(i=;i1;i+) P=tablecnt

29、/1; P2=wei2; delay(1); P=table(cnt%1)/1; P2=wei1; delay(1); P=tablecnt%1; P2=wei; delay(1); void extern_int(void) interrupt using flag=!flag; (二)适用于MINI8E实验板 #include #define uchar unsigned char #define uint unsigned int sbit P37=P37; uchar code table1=x3f,x6,x5b,x4f,x66,x6d,x7d,x7,x7f,x6f; uchar co

30、de wei4=xf7,xf6,xf5,xf4; uint cnt; bit flag; void init(void) bit flag=; /设置标志 EA=1;/开中断 EX=1; /外部中断开中断 IT=1; /外部中断的触发方式 void delay(uint k) uint data i,j; for(i=;ik;i+) for(j=;j999)cnt=; for(i=;i1;i+) P=tablecnt/1; P2=wei2; delay(1); P=table(cnt%1)/1; P2=wei1; delay(1); P=tablecnt%1; P2=wei; delay(1);

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

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