您的当前位置:首页正文

流水灯以间隔时间500ms为单位,依次流水点亮

来源:帮我找美食网
第三周任务

一. 实验要求

1. 了解中断原理及51中断编程。

2. 了解51单片机的定时器及其工作模式。

电路结构如上图所示,两个按钮分别接外部中断1和2。当按下按钮1时,流水灯以间隔时间500ms为单位,依次流水点亮(即按下按钮1后,灯1点亮500ms,其余灯熄灭。随后灯2点亮500ms, 其余灯熄灭. 随后灯3点亮500ms, 其余灯熄灭……).任意时刻,当按钮2按下时,流水灯停止,并保持当前状态。 二. 硬件分析

三. 实验流程图

开始 定时/计数器初始值设置 启动定时/计数器 定时/计数器是否延时50ms? 定时/计数器重新赋值 是否循环10次(延时500ms) 按键2按下暂停

四.程序分析 #include #define uchar unsigned char #define uint unsigned int uchar num=0,i;

ucharcodeALLNum[8]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f}; void exter0(); void exter1(); void exter2();

void exter0()interrupt 0 //外部中断0处理函数 {

ET0=0; }

void exter1()interrupt 1 //定时器0中断处理函数 {

TH0=(65536-50000)/256; TL0=(65536-50000)%256; num++; {

if(num==10) //定时器中断执行10次,每次50ms共500ms

num=0; //将num值重置为零,进行下一次中断

使之达到500ms i++;

EX0=1; IT0=1; }

void exter2()interrupt 2 //外部中断1中断处理函数 {

i=0;

P0=0xfe; //给P0一个初值使一个灯亮 ET0=1; //开定时器中断 } void main() {

TMOD=0x01; //使定时器的工作方式为1 TH0=(65536-50000)/256; //对定时器高、低8位赋值 TL0=(65536-50000)%256;

TR0=1; //启动定时器0 }

if(i==8) i=0; P0=ALLNum[i];

EA=1; EX1=1; IT1=0; IT0=1; while(1); }

//无限循环

作者:杨丹班级:学号:

1207 20121885

因篇幅问题不能全部显示,请点此查看更多更全内容

Top