采用外部中断的方式控制彩灯的各种变化运行

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

单片机实验报告2
1、实验目的:
学会中断的使用方法
采用外部中断的方式控制彩灯的各种变化运行
2、实验工具
单片机最小应用系统、THKL-C51仿真器、
3、实验步骤
1.首先分析题目的要求
2.根据要求画出流程图
3.确定主程序的内容(根据本题要求,主程序中主要写的LED灯向左移的程序,然后写向右移的程序,接下来是LED随机亮的程序(主要是通过查表法来实现),然后调用外部中断程序(主要是标志量flag 的自增程序),然后将整个程序编写完整)
4.打开Keil uV ision 4软件,建立新的工程和文件,将主程序写入文件中,并且调试至无错误。

连接好外部的硬件系统,开始调试并运行,查看效果,并且记录结果。

4、实验主要程序
#include <reg51.h>
#include<stdio.h>
#include<intrins.h>
#define uchar unsigned char
uchar flag=0; //定义变量
void delayms() //定义延迟函数(250*250*2=0.125秒)
{
unsigned char m,n;
for(m=0;m<250;m++)
for(n=0;n<250;n++);
}
void main()
{uchar inum,i; //定义变量
uchar dispalycode[8]={0x7e,0xbd,0x6a,0x5e,0x15,0x36,0x9b,0xaa}; //定义数组
uchar LED=0xfe;
P0=LED; // 亮一盏LED灯
EA=1; //开启中断总控制位
IT0=1; //外部0中断,下降沿触发
EX0=1; //允许外部中断0中断
while(1) //进入循环
{if(flag==0) //判断标志位
{delayms(); //延迟
LED=_crol_(LED,1); //一盏LED灯循环左移
P0=LED;}
if(flag==1) //判断标志位
{delayms(); //延迟
LED=_cror_(LED,1); //一盏LED灯循环右移
P0=LED;}
if(flag==2) //判断标志位
{inum=0;
for(i=0;i<8;i++)
{inum++;
delayms();
P0=dispalycode[inum];} //查表法LED灯随机闪
}
}
}
void intersvr0(void) interrupt 0 using 1 //INT0中断服务程序
{flag++;//标志位自增
if(flag>2) flag=0; //判断标志位,大于2则置0
}
5、实验结果
按键后给单片机下降沿脉冲,按下第一次键后LED灯依次向左移,再按下第二次键后LED灯依次向右移,再按下第三次键后LED灯随意亮,记下来按键后就重复前三次的情况,与题目的要求相符合。

相关文档
最新文档