51单片机实验2

51单片机实验2

题目: 编写一个程序实现按下k4按键,让第四位数码管从F到0的13秒倒计时,按下k1使倒计时暂停其中需要使用定时器1,倒计时结束后一直显示0
思路: 既然是需要使用按键和定时器的,那么可以编写一个按键函数其中k4让定时器1的初始化开始,k1用来暂停定时器,显示数码管的任务就可以用定时器1的服务函数来编写,具体看下面的示例
#include <reg51.h>

typedef unsigned char u8;
typedef unsigned int  u16;

/*定义按键位置*/
sbit k1  =  P3^1;
sbit k4  =  P3^3;

/*定义38译码器的3个管脚位置*/
sbit LSA =  P2^2;
sbit LSB =  P2^3;
sbit LSC =  P2^4;

void keypros();    // 声明按键函数
void Time1Iinit(); // 声明定时器1的初始化函数
void delay(u16);   // 声明延迟函数
				
//定义存放数码管数据的数组
u8 code smgduan[] = {0x71,0x79,0x5e,0x39,
					 /*F    E    D    C*/
					  0x7c,0x77,0x6f,0x7f,
					 /*B    A    9    8*/
					  0x07,0x7d,0x6d,0x66,
					 /*7    6    5    4*/
					  0x4f,0x5b,0x06,0x3f
					 /*3    2    1    0*/};
				
void main()
{
	
	LSA = 1;
	LSB = 0;
	LSC = 1;
	P0  = 0x71; //先让数码管显示H
	while(1)
	{
		keypros();
	}
}

void keypros()
{
   /*当按下k4时,执行定时器1的初始化,进入定时中断服务函数*/
	if(k4 == 0)
	{
		delay(1000);
		if(k4 == 0)
		{
			Time1Init();
		}
		while(!k4);
	}
	
  /*当按下k1时,让TR1为0使定时器1暂停工作*/
	if(k1 == 0)
	{
		delay(1000);
		if(k1 == 0)
		{
			TR1 = 0;
		}
		while(!k1);
	}
	
}

void delay(u16 i)
{
	while(i--);
}

void Time1Init()
{
	TMOD |= 0x01;
	
  /*计算初值为1ms*/
	TH1   = 0xfc;
	TL1   = 0x18;
	
	EA    = 1;
	ET1   = 1;
	TR1   = 1;
	
}

/*配置定时器1的服务函数*/
void Time1Start() interrupt 3
{
	u16 count = 0; //定义计数变量
	u8  i = 0;     //定义一个控制数码管显示数据的变量
	/*重新装配初值*/
	TH1   = 0xfc;
	TL1   = 0x18;
	count ++;
	if(count == 1000) //证明已经到达1s
	{
		count = 0;
		
		/*这个if语句让倒计时结束后一直显示0*/
		if(i == 15 )
		{
			i = 14;
		}
		P0 = smgduan[i];
		i++;
	}
	
}
	

  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
课程设计 51单片机开发 编程 实验 模块 源代码 课程设计 51单片机开发 编程 实验 模块 源代码 课程设计 51单片机开发 编程 实验 模块 源代码 课程设计 51单片机开发 编程 实验 模块 源代码 课程设计 51单片机开发 编程 实验 模块 源代码 课程设计 51单片机开发 编程 实验 模块 源代码 课程设计 51单片机开发 编程 实验 模块 源代码 课程设计 51单片机开发 编程 实验 模块 源代码 课程设计 51单片机开发 编程 实验 模块 源代码 课程设计 51单片机开发 编程 实验 模块 源代码 课程设计 51单片机开发 编程 实验 模块 源代码 课程设计 51单片机开发 编程 实验 模块 源代码 课程设计 51单片机开发 编程 实验 模块 源代码 课程设计 51单片机开发 编程 实验 模块 源代码 课程设计 51单片机开发 编程 实验 模块 源代码 课程设计 51单片机开发 编程 实验 模块 源代码 课程设计 51单片机开发 编程 实验 模块 源代码 课程设计 51单片机开发 编程 实验 模块 源代码 课程设计 51单片机开发 编程 实验 模块 源代码 课程设计 51单片机开发 编程 实验 模块 源代码 课程设计 51单片机开发 编程 实验 模块 源代码 课程设计 51单片机开发 编程 实验 模块 源代码 课程设计 51单片机开发 编程 实验 模块 源代码 课程设计 51单片机开发 编程 实验 模块 源代码 课程设计 51单片机开发 编程 实验 模块 源代码 课程设计 51单片机开发 编程 实验 模块 源代码 课程设计 51单片机开发 编程 实验 模块 源代码
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值