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

加入VIP,免费下载
 

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

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

下载须知

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

版权提示 | 免责声明

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

单片机实验例题及答案.docx

1、单片机实验例题及答案单片机实验考试题:1、 用Proteus打开“简易电子琴.DSN”,按图编写程序,设计一个简易电子琴。按数字键17,分别发“斗”、“来”、“米”音(频率见实验指导书),按键抬起则发音停止,不考虑高八度和低八度音,按下17以外的其它键不发音。2、 用Proteus打开文件“计数器.DSN”,当按下键盘上的0F十六个键时,能将键值以十六进制形式在四个数码管上滚动显示。在LED上显示字符AF的形式分别为:。3、 用Proteus打开文件“频率计.DSN”,图中,在单片机的外部中断0脚接有一个脉冲信号源,编写程序实现一个频率计的功能,能够测定该脉冲信号源的频率。 程序调试时可以修改

2、信号源的频率,比较测量值与设定值的差距,仿真时一般误差在10%内就算正常。修改信号源频率的方法是,右击信号源图标后再左击,打开信号源的属性对话框,修改其中的频率(frequncy),不要改变其它属性值,频率可以在1Hz到10000Hz之间设定。(提示:可以设置一个外部中断0的中断服务程序,每次中断时给某个变量加一;再设置一个定时器中断服务程序,用于计时。每秒钟读一次脉冲数,并将其清零,然后将脉冲数显示在数码管上,每秒钟内的脉冲数就是频率。)4、 用Proteus打开文件“电子秒表.DSN”,开机时显示00.00,单位是秒,精确到10毫秒,按“SW1”键启动或暂停,按“SW2”键时间清零。 提示

3、:关于点亮小数点,每5mS刷新LED时,判断当刷新到第2个LED时将笔划代码中与小数点对应的位(bit7)清零。5、 用Proteus打开文件“播放音乐.DSN”,按图设计一个开机就能播放的程序,并将其简谱在数码管上同步滚动显示。此程序也可以下载到实验板上运行。6、 用Proteus打开文件“流水灯.DSN”,可以看到在单片机89C52的P2口接有8个发光二极管。编写流水灯的程序,使8个发光二极管每隔约0.5秒依次点亮(每次亮一个),要求开始时从左往右点亮,每按一次按钮SW1后,改变流水的方向。7、用Proteus打开文件“计数器.DSN”,当按下键盘上的09十个数字键时,能将键值在四个数码管

4、上滚动显示。若按了AF六个字母键,则在数码管上显示(Over)。8、用Proteus打开文件“电子秒表.DSN”,开机时显示00.00,单位是分、秒,按“SW1”键启动/暂停计时,在暂停状态按“SW2”键分秒清零。在计时状态分和秒之间的小数点闪烁(每秒钟亮半秒,熄半秒),暂停状态常亮。提示:关于小数点闪烁,每5mS刷新LED时,判断当刷新到第2个LED并且时间是前半秒时将笔划代码中与小数点对应的位清零。9. 用Proteus打开文件“定时关灯控制器.DSN”,按图编写程序设计一个定时关灯控制器。从键盘输入时间(单位:秒,最大9999秒,最小1秒),按一下A键灯亮,时间每秒减1,减到0时停止,灯

5、熄灭。可以再次输入时间并启动定时过程。10. 用Proteus打开文件“交通信号灯.DSN”,编程实现时间倒计时及绿黄红三色灯的切换。切换方式为:如此周而复始。(提示:图中数码管与单片机之间的连接方式与实验指导书中相同)11. 用Proteus打开文件“多路开关指示.DSN”,可以看到图中有八个按钮、八个发光二极管和一个数码管。编写程序实现如下功能:当按一下某一按钮时,该按钮的编号显示在数码管上,同时点亮对应编号的发光二极管。12. 用Proteus打开文件“数字钟.DSN”,编写程序实现如下功能:开机时显示00.00.00 (时分秒),按钮“SW1”控制“时”的调整,每按一次加1小时;按钮“

6、SW2”控制“分”的调整,每按一次加1分钟;按钮“SW3”控制“秒”的调整,每按一次加1秒钟,按“SW4”启动数字钟从设定的时间开始计时。当按SW1、SW2或SW3键时,时钟进入暂停状态,再一次按SW4键启动计时。13实验板上有4个发光二极管,与单片机的连接如右所示。编写流水灯的程序,使4个发光二极管每隔1秒依次点亮(每次亮一个),要求每个发光二极管逐渐点亮然后熄灭,再点亮下一个发光二极管。程序在实验板上调试通过。(提示:通过改变加在单片机引脚上脉冲的占空比来改变发光二极管的亮度,可以在一个定时中断中点亮发光二极管,同时启动在另一个定时中断,在该中断过程中关闭发光二极管,两个中断之间的时间间隔

7、逐渐加大,二极管就慢慢亮起来了。)(本题无法在Proteus中仿真)14用Proteus打开文件“流水灯.DSN”,可以看到在单片机89C52的P2口接有8个发光二极管。编写流水灯的程序,使8个发光二极管从左往右依次点亮(每次亮一个),当按一下按钮SW1并抬起后,流水暂停,再按一下按钮SW1后,从暂停的位置继续流水,如此反复。15用Proteus打开文件“电子打铃器.DSN”,编写程序实现定时打铃功能。要求如下:开机时显示00.00.00 (时分秒),按钮“SW1”控制“时”的调整,每按一次加1小时;按钮“SW2”控制“分”的调整,每按一次加1分钟;按钮“SW3”控制“秒”的调整,每按一次加1

8、秒钟,按“SW4”启动数字钟从设定的时间开始计时。当按SW1、SW2或SW3键时,时钟进入暂停状态,再一次按SW4键启动计时。在程序中设定,8点10分00秒和8点20分00秒各打一次铃,打铃时间长度为10秒钟。图中用一发光二极管模拟电铃。程序调试时可将时间调到打铃前几秒再启动时钟。16用Proteus打开文件“拨盘开关.DSN”,可以看到图中有一个6位拨盘开关、六个发光二极管和一个数码管。编写程序实现如下功能:当转动拨盘开关时,拨盘开关的编号显示在数码管上,同时点亮对应编号的发光二极管。17用Proteus打开文件“流水灯.DSN”,可以看到在单片机89C52的P2口接有8个发光二极管。编写流

9、水灯的程序,使8个发光二极管从左往右依次点亮,每次亮相邻两个,如先是D1、D2亮,然后是D2、D3亮, D7、D8亮,D8、D1亮,如此周而复始。当按一下按钮SW1后,流水暂停,再按一下按钮SW1后,从暂停的位置继续流水。说明:用自己学号的最后四位数加题号作为源程序文件名,同时将自己的完整学号、班级、姓名、第几题等信息放在源程序的第一行,如1052号同学考第3题,其源程序文件名应为“1052_03.C”(题号必须为两位数),源程序的第一行为:/* 完整学号 班级 姓名 第X题 */程序要正确缩进,否则扣5分;考试完毕,不要关闭开发环境MedWin和Proteus,不拆除实验板,千万不要关闭计算

10、机。1、简易电子琴参考答案:/1-简易电子琴#include #define U8 unsigned char#define key_port P3code U8 kcode=0xEE,0xDE,0xBE,0xED,0xDD,0xBD,0xEB,0xDB,0xBB,0xE7,0xD7,0xB7;/反转码对应键值 0 1 2 3 4 5 6 7 8 9 A Bcode unsigned int cyc=1800,1600,1440,1351,1200,1079,960;/音阶1-7的半周期数U8 H0,L0,cnt,err;void cntint0(void) interrupt 1 / 定时器

11、0中断用于产生音阶方波 TH0=H0; TL0=L0; P2_0=P2_0; / P2.3是音乐信号输出脚,P2.3反相,产生方波void cntint1(void) interrupt 3 / 定时器1中断用于产生节拍延时 或显示 cnt+;void delay_ms(U8 ms) U8 i,j; for(i=0;i100;i+) for(j=0;jms;j+); ;U8 key(void) U8 a,r; delay_ms(20); / 延时20毫秒,消除按键抖动 if(key_port = 0xf0) goto rn; a = key_port; key_port = a | 0x0f;

12、 delay_ms(20); a = key_port; for (r = 0;r 11) r = 0xff; /0xff表示无效rn: key_port = 0xf0; return r;void main(void) U8 i,k,a; unsigned int b; TMOD=0x11; EA=1; ET0=1; ET1=1; cnt=0; TR1=1; i=0; key_port = 0xf0; delay_ms(20); while(1) if (key_port != 0xf0) delay_ms(20); k = key(); if (k0) err=0; TR0=0; P2=0

13、xff; / 关闭显示 b=cyck-1; / 根据基本音阶,求出半周期数 H0=(65536-b)/256; / 根据半周期数,计算T0初值的高字节和低字节 L0=(65536-b)%256; TR0=1; / 启动定时器0发音 while(key_port != 0xf0); delay_ms(20); TR0=0; while(key_port != 0xf0); 2、参考答案:/2-用Proteus打开文件计算器.DSN,当按下键盘上的0F十六个键时,能将键值以十六进制形式在四个/ 数码管上滚动显示。#include #define U8 unsigned char#define ke

14、y_port P3U8 code tab=0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90,0x88,0x83,0xC6,0xA1,0x86,0x8E;code U8 kcode=0xEE,0xDE,0xBE,0x7E,0xED,0xDD,0xBD,0x7D,0xEB,0xDB,0xBB,0x7B,0xE7,0xD7,0xB7,0x77;/反转码对应键值 0 1 2 3 4 5 6 7 8 9 A B C D E FU8 scn=0xf7,0xfb,0xfd,0xfe;/ 先点亮左边一个数码管U8 buf4=0,0,0,0;/ 显示缓冲区,开机

15、先显示0000 U8 cnt = 0; / 扫描计数void delay_ms(U8 ms) U8 i,j; for(i=0;i100;i+) for(j=0;jms;j+);U8 key(void) U8 a,r = 0xff; delay_ms(20); / 延时20毫秒,消除按键抖动 if(key_port = 0xf0) goto rn; a = key_port; key_port = a | 0x0f; delay_ms(20); a = key_port; for (r = 0;r 15) r = 0xff; /0xff表示无效rn: key_port = 0xf0; retur

16、n r;void main(void) U8 k,i; EA = 1; / 允许中断 TMOD = 0x01; / 设定时器0为模式1(16位) ET0 = 1; / 定时器0中断允许 TH0 = 0xee; / 晶振11.0592MHz,5mS TL0 = 0; TR0 = 1; / 开始计数 while(1) if (key_port != 0xf0) k = key(); if (k 16) for(i=1;i=3;i+) bufi-1=bufi;/ 数字左移一位 buf3 = k; / 在个位显示刚按的数字 while(key_port != 0xf0);/ 等待按键抬起 delay_

17、ms(20); while(key_port != 0xf0); void timeint(void) interrupt 1 / 定时器0中断服务程序 char i; TH0 = 0xee; / 设置定时器时间常数 TL0 = 0; i = cnt & 0x03; / 求应点亮的LED号(从左到右依次为 0,1,2,3) P0 = tabbufi; / 笔划代码送P0口 P2 = scni; / 控制扫描码送P2口 cnt+;3、参考答案/*3、用Proteus打开文件频率计.DSN,图中,在单片机的外部中断0脚INT0接有一个脉冲信号源,编写程序实现一个频率计的功能,能够测定该脉冲信号源的

18、频率。 程序调试时可以修改信号源的频率,看测量值与设 定值有多大的差距,仿真时一般误差在10%内就算正常。修改信号源频率的方法是,右击信号源图标后再 左击,打开信号源的属性对话框,在其中修改其频率(frequncy),不要改变其它属性值,频率可以在1Hz 到10000Hz之间设定。(提示:可以设置一个外部中断0的中断服务程序,每次中断时给某个变量加一; 再设计一个定时器中断服务程序,用于计时。每秒钟读一次脉冲数,并将其清零,然后将脉冲数显示在 数码管上,每秒钟内的脉冲数就是频率。)*/#include #define U8 unsigned charU8 code tab=0xa0,0xbb,

19、0x62,0x2a,0x39,0x2c,0x24,0xba,0x20,0x28;U8 code scn=0x7f,0xbf,0xdf,0xef;/先点亮左边一个数码管U8 buf4=0,0,0,0;/ 显示缓冲区 U8 cnt = 0; / 扫描计数unsigned int freq = 0;unsigned int F;void main(void) EA = 1; / 允许中断 TMOD = 0x01; / 设定时器0为模式1(16位) ET0 = 1; / 定时器0中断允许 TH0 = 0xee; / 晶振11.0592MHz,5mS TL0 = 0; TR0 = 1; / 开始计数 P

20、X0 = 1; / 外部中断优先级高 EX0 = 1; / 允许外部中断 IT0 = 1; / 外部中断下降沿触发 while(1); void exint0(void) interrupt 0 / 外部中断0 服务程序 freq+;void timeint(void) interrupt 1 / 定时器0中断服务程序 char i; TH0 = 0xee; / 设置定时器时间常数 TL0 = 0; i = cnt & 0x03; / 求应点亮的LED号(从左到右依次为 0,1,2,3) P0 = tabbufi; / 笔划代码送P0口 P2 = scni; / 控制扫描码送P2口 cnt+;

21、 if(cnt=200) cnt=0; / 到1秒钟,显示的数字加一 F = freq; freq = 0; buf0 = F / 1000; buf1 = (F / 100) % 10; buf2 = (F / 10) % 10; buf3 = F % 10; 4、参考答案/4-用Proteus打开文件电子秒表.DSN,开机时显示00.00,单位是秒,精确到10毫秒, / 按SW1键启动或暂停,在暂停时按SW2键时间清零。计时超过99.99秒以后,显示(Over)。#include #define U8 unsigned charU8 code tab=0xC0,0xF9,0xA4,0xB0

22、,0x99,0x92,0x82,0xF8,0x80,0x90,0xC1,0x86,0xAF;/ 0 1 2 3 4 5 6 7 8 9 V E r U8 scn=0xf7,0xfb,0xfd,0xfe;/ 先点亮左边一个数码管U8 buf4=0,0,0,0;/ 显示缓冲区,开机先显示0000 U8 cnt = 0; / 扫描计数bit Run = 0;bit Stop = 0;void delay_ms(U8 ms) U8 i,j; for(i=0;i100;i+) for(j=0;j=0;i-) bufi+; if(bufi=10) bufi=0;/ 加到10向前进位 else break;

23、 i = cnt & 0x03; / 求应点亮的LED号(从左到右依次为 0,1,2,3) if(i=1 & Stop = 0) P0 = tabbufi & 0x7f; / 笔划代码送P0口 else P0 = tabbufi; P2 = scni; / 控制扫描码送P2口 cnt+;5、参考答案/*5用Proteus打开文件播放音乐.DSN,按图设计一个开机就能播放康定情歌的程序, 并将其简谱在数码管上同步滚动显示。此程序也可以下载到实验板上运行。*/#include #define U8 unsigned charbit sn;code U8 tab=0xa0,0xbb,0x62,0x2

24、a,0x39,0x2c,0x24,0xba,0x20,0x28,0x64,0x37,0x23,0x7f,0xff;/ 0 1 2 3 4 5 6 7 8 9 E n d - 无显示code U8 scn=0x7f,0xbf,0xdf,0xef;/先点亮左边一个数码管U8 buf4=14,14,14,14;/ 显示缓冲区,开机不显示code unsigned int cyc=1800,1600,1440,1351,1200,1079,960;/音阶1-7的半周期数code U8 tone=13,15,16,16,15,16,13,12,12,13,15,16,16,15,16,13,13, 13

25、,15,16, 16,15,16,13,12,12,15,13,12,13,12,11,12,6,6,12,15,13,12,6,6,15,13,12,13,12,11, 12,6,5,6,0xff;/ 乐曲康定情歌的简谱表code U8 time=8,8,8,4,4,8,8,12,4,8,8,8,4,4,8,16,8,8,8,8,4,4,8,8,12,4,8,8,4,4, 4,4,8,24,8,24,8,24,8,16,8,8,8,4,4,4,4,8,16,8,32;/ 康定情歌的节拍表U8 H0,L0,cnt=0,tm=0,sd=0;void cntint0(void) interrupt

26、 1 / 定时器0中断用于产生音阶方波 TH0=H0; TL0=L0; P2_3 = sd & 1; / P2.3是音乐信号输出脚 sn = sd & 1; / 记住P2.3脚的状态 sd+;void cntint1(void) interrupt 3 / 定时器1中断用于产生节拍延时 char i,k; EA = 1; TH1 = 0xee; / 设置定时器时间常数 TL1 = 0; i = cnt & 0x03; / 求应点亮的LED号(从左到右依次为 0,1,2,3) P0 = tabbufi; / 笔划代码送P0口 k = scni; if(sn = 0) k=k&0xf7;/恢复P2.3脚的状态 P2 = k; / 控制扫描码送P2口 cnt+; if(cnt11) cnt=0; tm+; void main(void) U8 i,j,a,t; unsigned int b;next:TMOD=0x1

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

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