赞
踩
《单片机原理与应用》课程
课程实验报告
Hz的方波,使LED闪烁。(参考例7-1,仿真实现)
2. 实物实现上述功能(实验开发板实现,连接8只LED灯的输出端口需改成P2口)
(现场验收点1:仿真和实物同时演示结果。)
3. 计数器+中断综合应用实验:采用T1的计数模式,方式1中断,计数输入引脚T1(P3.5)上外接按钮开关,作为计数信号输入。按4次按钮开关后,P1.0口的LED闪烁不停(图如下,程序参考例题7-2 ,基于KEIL+Proteus仿真实现)。
4. 基于开发板以实物方式实现步骤3中的功能,此时需将连接8只LED灯的输出端口改成P2口,计数输入引脚T1(P3.5)实际对应开发板上的K5(即不变)。
(现场验收点2:仿真和实物同时演示结果。)
提醒:开发板实物实现时,需将仿真时连到P1.0端口的蜂鸣器改成P2.1端口。
仿真参考图:
开发板蜂鸣器连接关系图:
三、 实验环境
Keil软件,proteus仿真软件,51开发板,PC机。
//1
2//
4//
5//
五、 实验系统的详细设计与实验过程
1. 仿真部分:
//定时器/计数器T0作定时器
//计数器+中断综合应用实验
//示波器
//蜂鸣器
//门铃
(原始版本)
(修改版本)可运行,有声音
(4)加载(烧写)程序,调试并记录实验现象;
//定时器/计数器T0作定时器
//计数器+中断综合应用实验(GIF文件)
//示波器(已演示)
//蜂鸣器(已演示)
//定时器/计数器T0作定时器
#include <REGX51.H>
unsigned char i=100;
void Delay(unsigned int xms)
{
unsigned char i,j;
while(xms--)
{
i=2;
j=239;
do
{
while(--j);
}while(--i);
}
}
void main()
{
TMOD=0x01;//定时器T0工作方式1
TH0=0xee;//设置定时器初始值
TL0=0x00;//
P1=0x00;//P1口八个LED灯点亮
EA=1;//总是中断允许
ET0=1;//允许定时器T0中断
TR0=1;//启动定时器
while(1)//循环等待
{
}
}
void timer0() interrupt 1 //T0中断
{
TH0=0xee;//重新赋值
TL0=0x00;//
i--;//循环减1
for(;;)
{
P1=~P1;//取反
Delay(500);
P1=~P1;
Delay(500);
i=100;//重复循环次数
}
}
//计数器+中断综合应用实验
#include <REGX52.H>
void Delay(unsigned int i)
{
unsigned int j;
for(;i>0;i--)
for(j=0;j<125;j++)
{;}
}
void main()
{
TMOD=0x50;//定时器T0工作方式1
TH1=0xff;//设置定时器初始值
TL1=0xfc;//
//P2=0x00;//P1口八个LED灯点亮
EA=1;//总是中断允许
ET1=1;//允许定时器T0中断
TR1=1;//启动定时器
while(1)//循环等待
{
}
}
void T1_int(void) interrupt 3 //T1中断
{
for(;;)
{
P2=0xff;
Delay(500);
P2=0;
Delay(500);
}
}
//示波器
#include <reg51.h>
sbit P1_0=P1^0;
void main(void)
{
TMOD=0x01;
TR0=1;
while(1)
{
TH0=0xfc;
TL0=0x18;
do{}
while(!TF0);
P1_0=!P1_0;
TF0=0;
}
}
//蜂鸣器
#include <reg51.h>
sbit sound=P2^1;
#define f1(a) (65536-a)/256
#define f2(a) (65536-a)%256
unsigned int i = 500;
unsigned int j = 0;
void main(void)
{
EA=1;
ET1=1;
TMOD=0x10;
TH1=f1(i);
TL1=f2(i);
TR1=1;
while(1)
{
i=460;
while(j<2000);
j=0;
i=360;
while(j<2000);
j=0;
}
}
void Tl(void) interrupt 3 using 0
{
TR1= 0;
sound=~sound;
TH1=f1(i);
TL1=f2(i);
j++;
TR1=1;
}
//门铃
#include <REGX51.H>
typedef unsigned char u8;
typedef unsigned int u16;
sbit BEEP=P2^5;
sbit K1=P3^1;
u8 ding,dong,flag,stop;
u16 n;
void delay(u16 i)
{
while(i--);
}
void time0init()//定时器初始化
{
TMOD=0x01;//方式0
TH0=0xff;
TL0=0x06;//定时250us
//TR0=1
EA=1;
ET0=1;
}
void biaohaoinit()
{
ding=0;
dong=0;
n=0;
flag=0;
stop=0;
}
void main()
{
time0init();
biaohaoinit();
while(1)
{
if(K1==0)//按下按键
{
delay(1000);//消抖
if(K1==0)
{
TR0=1;//打开定时器
while(!stop);
}
}
}
}
void time0() interrupt 1
{
n++;
TH0=0xff;
TL0=0x06;//250us
if(n==2000)//定时0.5m,ding 0.5, dong 0.5
{
n=0;
if(flag==0)
{
flag=~flag;
}
else
{
flag=0;
stop=1;
TR0=0; //close 计时器
}
}
if(flag==0)
{ //改变定时器计数时间来改变声音
ding++;
if(ding==1)
{
ding=0;
BEEP=~BEEP;
}
}
else
{
dong++;
if(dong==2)//咚
{
dong=0;
BEEP=~BEEP;
}
}
}
//定时器/计数器T0作定时器
LED八个灯闪烁交替亮灯
//计数器+中断综合应用实验
按下按钮K5 ,四次之后LED八个灯开始亮灯
//示波器
模拟显示示波器频率波动
//蜂鸣器
单片机蜂鸣器以1Khz/0.5Khz的频率交替鸣响
//门铃
蜂鸣器发出叮咚的声音
总结:此次实验对中断寄存有了一定的了解,但对一些错误的点还是不能熟练的找到,对于后期的练习还是非常有必要的,同时原理和对开发板的熟悉是必不可少的。
《单片机原理与应用》课程
课程实验报告
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。