第6周实验--中断与定时计数

一、采用定时计数器控制LED灯每隔1s周期性亮灭

电路图:
![[Pasted image 20240407230555.png]]

代码:

#include<reg51.h>
char  i=100;
void main ()
{
	TMOD=0x01;			//定时器T0为方式1
	TH0=0xee;			//设置定时器初值
	TL0=0x00;
P1=0x00;				//P1口8个LED点亮
	EA=1;					//总中断开
	ET0=1;					//开T0中断
	TR0=1;					//启动T0
	while(1);				//循环等待
	{
		;
	}
}
void timer0() interrupt 1			//T0中断程序
{
	TH0=0xee;				//重新赋初值
	TL0=0x00;
i--;					//循环次数减1
	if(i<=0)
	{
		P1=~P1;			//P1口按位取反
		i=100;				//重置循环次数
	}
}

程序通过定时器 T0 的中断,每次中断触发时切换 LED 灯的状态,从而实现 LED 灯的闪烁效果

二、计数器中断,实现按4次按钮开关后,P1口的8只LED闪烁不停

电路图:
![[Pasted image 20240407232444.png]]

代码:

 #include <reg51.h>
    void Delay(unsigned int i)		//定义延时函数Delay( ),i是形     					             //式参数,不能赋初值
{	
	unsigned int j;		
	for(;i>0;i--)			//变量i由实际参数传入一个值					//因此i不能赋初值
	for(j=0;j<125;j++)		
	{;}				//空函数
 }

void  main( )				//主函数
 {
	TMOD=0x50;			//设置定时器T1为方式1计数
	TH1=0xff;			//向TH1写入初值的高8位
	TL1=0xfc;			//向TL1写入初值的低8位
	EA=1;    				//总中断允许
ET1=1;   			//定时器T1中断允许  
 	TR1=1;   			//启动定时器T1
 	while(1) ;		  	//无穷循环,等待计数中断
 }

void T1_int(void)  interrupt 3  	//T1中断函数
{
	for(;;)				//无限循环
 	{	
		P1=0xff;			//8位LED全灭
 		Delay(500) ;		//延时500ms
 		P1=0;			//8位LED全亮
 		Delay(500); 		//延时500ms 
	}							
}

  • 4
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值