单片机实验例题及答案docxWord文档下载推荐.docx
- 文档编号:16585786
- 上传时间:2022-11-24
- 格式:DOCX
- 页数:34
- 大小:108.11KB
单片机实验例题及答案docxWord文档下载推荐.docx
《单片机实验例题及答案docxWord文档下载推荐.docx》由会员分享,可在线阅读,更多相关《单片机实验例题及答案docxWord文档下载推荐.docx(34页珍藏版)》请在冰豆网上搜索。
12.
用Proteus打开文件“数字钟.DSN”,编写程序实现如下功能:
开机时显示00.00.00(时分秒),按钮“SW1”控制“时”的调整,每按一次加1小时;
按钮“SW2”控制“分”的调整,每按一次加1分钟;
按钮“SW3”控制“秒”的调整,每按一次加1秒钟,按“SW4”启动数字钟从设定的时间开始计时。
当按SW1、SW2或SW3键时,时钟进入暂停状态,再一次按SW4键启动计时。
13.实验板上有4个发光二极管,与单片机的连接如右所示。
编写流水灯的程序,使4个发光二极管每隔1秒依次点亮(每次亮一个),要求每个发光二极管逐渐点亮然后熄灭,再点亮下一个发光二极管。
程序在实验板上调试通过。
通过改变加在单片机引脚上脉冲的占空比来改变发光二极管的亮度,可以在一个定时中断中点亮发光二极管,同时启动在另一个定时中断,在该中断过程中关闭发光二极管,两个中断之间的时间间隔逐渐加大,二极管就慢慢亮起来了。
)(本题无法在Proteus中仿真)
14.用Proteus打开文件“流水灯.DSN”,可以看到在单片机89C52的P2口接有8个发光二极管。
编写流水灯的程序,使8个发光二极管从左往右依次点亮(每次亮一个),当按一下按钮SW1并抬起后,流水暂停,再按一下按钮SW1后,从暂停的位置继续流水,如此反复。
15.用Proteus打开文件“电子打铃器.DSN”,编写程序实现定时打铃功能。
要求如下:
开机时显示00.00.00(时分秒),按钮“SW1”控制“时”的调整,每按一次加1小时;
按钮“SW2”控制“分”的调整,每按一次加1分钟;
按钮“SW3”控制“秒”的调整,每按一次加1秒钟,按“SW4”启动数字钟从设定的时间开始计时。
当按SWKSW2或SW3键时,时钟进入暂停状态,再一次按SW4键启动计时。
在程序中设定,8点10分00秒和8点20分00秒各打一次铃,打铃时间长度为10秒钟。
图中用一发光二极管模拟电铃。
程序调试时可将时间调到打铃前几秒再启动时钟。
16.用Proteus打开文件“拨盘开关.DSN”,可以看到图中有一个6位拨盘开关、六个发光二极管和一个数码管。
当转动拨盘开关时,拨盘开关的编号显示在数码管上,同时点亮对应编号的发光二极管。
17,用Proteus打开文件“流水灯.DSN”,可以看到在单片机89C52的P2口接有8个发光二极管。
编写流水灯的程序,使8个发光二极管从左往右依次点亮,每次亮相邻两个,如先是Dl、D2亮,然后是D2、D3亮,……D7、D8亮,D8、D1亮,如此周而复始。
当按一下按钮SW1后,流水暂停,再按一下按钮SW1后,从暂停的位置继续流水。
说明:
用自己学号的最后四位数加题号作为源程序文件名,同时将自己的完整学号、班级、姓名、第几题等信息放在源程序的第一行,如1052号同学考第3题,其源程序文件名应为“1052_03.C”(题号必须为两位数),源程序的第一行为:
/*完整学号班级姓名第X题*/
程序要正确缩进,否则扣5分;
考试完毕,不要关闭开发环境MedWin和Proteus,不拆除实验板,千万不要关闭计算机。
1、简易电子琴参考答案:
〃1--简易电子琴
^include<
REG51.h>
^defineU8unsignedchar
^definekey_portP3
codeU8kcode[]=(0xEE,OxDE,OxBE,OxED,OxDD,OxBD,OxEB,OxDB,OxBB,0xE7,0xD7,0xB7);
〃反转码对应键值0123456789AB
codeunsignedinteye□={1800,1600,1440,1351,1200,1079,960);
〃音阶1-7的半周期数U8HO,LO,ent,err;
voidcntintO(void)interrupt1//定时器0中断用于产生音阶方波
{THO二H0;
TLO二L0;
P2_0=~P2_0;
//P2.3是音乐信号输出脚,P2.3反相,产生方波
}
voidcntintl(void)interrupt3//定时器1中断用于产生节拍延时或显示
(cnt++;
voiddelay_ms(U8ms)
{U8i,j;
for(i=0;
i<
100;
i++)
(for(j=0;
j<
ms;
j++);
};
U8key(void)
{U8a,r;
delay_ms(20);
//延时20毫秒,消除按键抖动
if(key_port==OxfO)gotorn;
a=keyport;
key_port=a|OxOf;
delay_ms(20);
for(r=0;
r<
=11;
r++)
(if(a=kcode[r])break;
);
if(r>
11)r=Oxff;
//Oxff表示无效
rn:
key_port=OxfO;
returnr;
voidmain(void)
{U8i,k,a;
unsignedintb;
TM0D=0xll;
EA=1;
ETO二1;
ET1=1;
cnt=O;
TR1=1;
i=0;
key_port=OxfO;
while
(1){
if(key_port!
=OxfO)
(delay_ms(20);
k=key();
if((k<
8)&
&
(k>
0))
{err=0;
TRO=O;
P2=0xff;
//关闭显示
b=cyc[k-l];
//根据基本音阶,求出半周期数H0二(65536-b)/256;
//根据半周期数,计算TO初值的高字节和低字节L0二(65536-b)%256;
TRO二1;
//启动定时器0发音
while(key_port!
=OxfO);
delay_ms(20);
TRO=O;
while(key_port!
2、参考答案:
〃2-用Proteus打开文件〃计算器.DSN〃,当按下键盘上的0〜F十六个键时,能将键值以十六进制形式在四个
//数码管上滚动显示。
REG51.H>
#defineU8unsignedchar
U8codetab[]=(OxCO,0xF9,0xA4,OxBO,0x99,0x92,0x82,0xF8,0x80,0x90,0x88,0x83,0xC6,OxAl,0x86,0x8E);
codeU8
kcode[]=(0xEE,OxDE,OxBE,0x7E,OxED,OxDD,OxBD,0x7D,OxEB,OxDB,OxBB,0x7B,0xE7,0xD7,0xB7,0x77);
〃反转码对应键值0123456789ABCDEF
U8scn[]=(0xf7,Oxfb,Oxfd,Oxfe);
//先点亮左边一个数码管
U8buf[4]-{0,0,0,0);
//显示缓冲区,开机先显示"
0000”
U8ent=0;
//扫描计数
{U8i,J;
{for(j=0;
j++);
};
{U8a,r=Oxff;
if(key_port=OxfO)gotorn;
OxOf;
key_port=
a=key_port;
=15;
(if(a==kcode[r])break;
15)r=Oxff;
(if(key_port!
(k=key();
if(k<
16)
{for(i=l;
i<
=3;
i++)buf[i-l]=buf[i];
//数字左移一位buf[3]=k;
//在个位显示冈I派的数字
=OxfO);
//等待按键抬起delay_ms(20);
voidtimeint(void)interrupt1//定时器0中断服务程序
chari;
THO
=Oxee;
//
设置定时器时间常数
TLO
=o;
i二
ent&
0x03;
求应点亮的LED号(从左到右依次为0,1,2,3)
P0=
tab[buf[i]];
笔划代码送P0口
P2=
scn[i];
控制扫描码送P2口
cnt++;
3、参考答案
/*3、用Proteus打开文件〃频率计.DSN〃,图中,在单片机的外部中断0脚INTO接有一个脉冲信号源,编写程序实现一个频率计的功能,能够测定该脉冲信号源的频率。
程序调试时可以修改信号源的频率,看测量值与设定值有多大的差距,仿真时一般误差在10%内就算正常。
修改信号源频率的方法是,右击信号源图标后再左击,打开信号源的属性对话框,在其中修改其频率(frequncy),不要改变其它属性值,频率可以在1Hz到10000Hz之间设定。
再设计一个定时器中断服务程序,用于计时。
每秒钟读一次脉冲数,并将其清零,然后将脉冲数显示在数码管上,每秒钟内的脉冲数就是频率。
*/
U8codetab[]=(0xa0,Oxbb,0x62,0x2a,0x39,0x2c,0x24,Oxba,0x20,0x28};
U8codescn[]=(0x7f,Oxbf,Oxdf,Oxef);
//vte点亮左边一个数码管
U8buf[4]=(0,0,0,0);
//显示缓冲区
unsignedintfreq=0;
unsignedintF;
voidmain(void)
{
EA二
1;
//允许中断
TMOD
=0x01;
//设定时器0为模式1(16位)
ETO=
1;
//定时器0中断允许
THO=
TLO=
Oxee:
0;
//晶振11.0592MHz,5mS
TRO=
//开始计数
PXO=
〃外部中断优先级高
EXO=
//允许外部中断
ITO=1;
while
(1);
//外部中断下降沿触发
voidexintO(void)
interrupt0//夕卜部中断0服务程序
{freq++;
THO二Oxee;
//设置定时器时间常数
TLO=0;
i=ent&
//求应点亮的LED号(从左到右依次为0,1,2,3)
P0=tab[buf[i]];
//笔划代码送P0口
P2=scn[i];
//控制扫描码送P2口
if(cnt=200)
(cnt=0;
//到1秒钟,显示的数字加一
F=freq;
freq=0;
buf[0]=F/1000;
buf[1]=
=(F/100)%10;
buf[2]:
=(F/10)%10;
buf[3]=
-F%10;
4、参考答案
〃4-用Proteus打开文件〃电子秒表.DSN〃,开机时显示00.00,单位是秒,精确到10毫秒,
//按〃SW1〃键启动或暂停,在暂停时按〃SW2〃键时间清零。
计时超过99.99秒以后,显示(Over)o
U8codetab[]=(0xC0,0xF9,0xA4,OxBO,0x99,0x92,0x82,0xF8,0x80,0x90,OxCl,0x86,OxAF};
//0123456789VEr
0000〃
bitRun=0;
bitStop=0;
for(i二0;
(for(j=0;
允许中断
设定时器0为模式1(16位)
ETO二
:
定时器0中断允许
THO二
;
晶振11.0592MHz,5mS
=0;
TRO=1;
//开始计数
while
(1)
(if(P3_0=0||P3_3=0)
{delay_ms(20);
if(P3_0==0&
Stop==0)
(if(Run二二0)Run=1;
elseRun=0;
if(P3_3==0&
Run==0)
(buf[0]=0;
buf[l]=0;
buf[2]=0;
buf[3]=0;
Stop=0;
while(P3_0==0||P3_3==0);
//等待按键抬起
while7P3_0二二0||P3_3二二0);
(chari;
TH0二Oxee;
if(buf[0]==9&
buf[1]==9&
buf[2]==9&
buf[3]==9)
(buf[0]=0;
buf[l]=10;
buf[2]=11;
buf[3]=12;
Run=0;
Stop=1;
if(Run==l&
(cnt&
l)==l&
(for(i=3;
i>
=0;
i—)
{buf[i]++;
if(buf[i]==10)buf[i]=0;
//加到10向前进位
elsebreak;
//求应点亮的LED号(从左到右依次为0,1,2,3)
if(i==l&
Stop==0)P0=tab[buf[i]]&
0x7f;
elseP0=tab[buf[i]];
P2二scn[i];
5、参考答案
/*5.用Proteus打开文件〃播放音乐.DSN〃,按图设计一个开机就能播放康定情歌的程序,
并将其简谱在数码管上同步滚动显示。
ttinclude<
bitsn;
codeU8tab[]=(0xa0,Oxbb,0x62,0x2a,0x39,0x2c,0x24,Oxba,0x20,0x28,0x64,0x37,0x23,0x7f,Oxff);
//0123456789End-无显示
codeU8scn[]=(0x7f,Oxbf,Oxdf,Oxef);
//先点亮左边一个数码管
U8buf[4]=(14,14,14,14);
//显示缓冲区,开机不显示
codeunsignedinteye□={1800,1600,1440,1351,1200,1079,960);
//音阶1-7的半周期数
codeU8tone□={13,15,16,16,15,16,13,12,12,13,15,16,16,15,16,13,13,13,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,Oxff);
//乐曲《康定情歌》的简谱表
codeU8time[]={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);
//《康定情歌》的节拍表
U8HO,LO,cnt=0,tm=0,sd=O;
voidcntintO(void)interrupt1//定时器0中断用于产生音阶方波{THO=HO;
TLO=LO;
P2_3=sd&
1;
sn=sd&
sd++;
//P2.3是音乐信号输出脚
//记住P2.3脚的状态
voidcntintl(void)interrupt3//定时器1中断用于产生节拍延时(chari,k;
EA二1;
TH1=Oxee;
//设置定时器时间常数
TL1=0;
P0二tab[buf[i]];
//笔划代码送P0口k=scn[i];
if(sn==0)k=k&
0xf7;
//恢复P2.3脚的状态
P2=k;
if(cnt>
ll)
tm++;
{U8i,j,a,t;
next:
EA=1;
ET1=1;
TRI=1;
PTO=1;
ETO=1;
//定时器0中断允许
TH1二Oxee;
//晶振11.0592MHz,5mS
i-0;
(t=tone[i];
//读音调
for(j=0;
3;
j++)
(buf[j]=buf[j+1];
buf[3]=t%10;
if(t>
50)break;
//Oxff是结束符
if(t!
=O)//0是休止符
(b=
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 单片机 实验 例题 答案 docx
![提示](https://static.bdocx.com/images/bang_tan.gif)