1、
中国石油大学(北京)
实
验
报
告
实验课程: 单片机原理及应用
实验名称: 实验四—— LED灯和数码显示器的中断控制
班级: 学号: 姓名:
总学时: 48 教师: 成绩:
实验日期: 2011 年 11 月 7 日
一、 实验目的
掌握外部中断的工作原理,学会中断程序设计。
二、 实验内容
1、按照教材图A.53,绘制实验四电路原理图;
2、采用外部中断原理编程,按键K1、K2均设置为下降沿触发方式,且
2、为自然优先级;
3、编写实验四C51程序,实现如下功能:K1对应于D1状态反转; K2对应于0~F间的数码管加一计数显示;
3、观察仿真结果,完成实验报告。
三、 实验要求
提交的实验报告中应包括:电路原理图,外部中断工作原理阐述,源程序(含流程图与注释语句),运行效果图,实验小结。
提交实验报告的电子邮件主题及存盘文件名格式如,2005041220马晓明实验四。
1、电路原理图
电路图如下
电路分析:K1、K2分别接INT0(P3.2)和INT1(P3.3)引脚(公共端接地),单击后可产生下降沿脉冲;D1接P0.4引脚,高电平驱动 ,通过上拉电阻接电源;共阴极数码管
3、LED1接P2口,静态显示(com端接地)。
2、外部中断原理
对于K1,按下K1时在K1弹起瞬间
3、C51程序
程序流程图
主函数
#include
char led_mod[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x58,0x5e,0x79,0x71} ;//LED字模
sbit P0_4=P0^4;
int count=0;
int0_key() interrupt 0//中断程序
{
P0_4=!P0_4;
}
in
4、t1_key() interrupt 2//中断程序
{
count++;
if(count>0x0f)
count=0;
P2=led_mod[count];
}
void main()//主函数
{
IT0=1;EX0=1;EA=1;
IT1=1;
EX1=1;
P0_4=0;
P2=0x3f;
while(1);
}
4、仿真运行效果
加载.hex文件开始仿真,效果如下图示
按下K1,D1灯亮,如下图所示
再按下K1,D1灯灭,如下图
继续按下K1则D1将“亮→灭→亮→灭→…→亮→灭”如此循环。
当按K2时,每按一次数码显示管上的字符变化一次,持续按K2则数码显示管依次显示1-F:
5、实验小结
实验结果:持续按下K1则D1将“亮→灭→亮→灭→…→亮→灭”如此循环,表明实现了K1对应于D1状态反转这个功能;持续按下持续按K2则数码显示管依次显示1-F,实现了K2对应于0~F间的数码管加一计数显示。
体会:通过实验对Protues有了更多的了解,操作起来更加熟练,能很快的完成绘图;与前几次相比,编程时也更得心应手,能熟练的运用软件找出自己所编程序中的语法问题及其他问题,并予以改正。