单片机 > 单片机程序设计 > 详情

51单片机-定时器1中断

发布时间:2023-03-21 发布时间:
|

**************************************************************************************

*定时器1实验*

实现现象:下载程序后数码管最后一位间隔一秒循环显示0-F。使用单片机内部定时器可以实现准确延时。

注意事项:如果不想让点阵模块显示,可以将74HC595模块上的JP595短接片拔掉。

***************************************************************************************/


#include "reg52.h" //此文件中定义了单片机的一些特殊功能寄存器


typedef unsigned int u16; //对数据类型进行声明定义

typedef unsigned char u8;


sbit LSA=P2^2;

sbit LSB=P2^3;

sbit LSC=P2^4;


u8 code smgduan[17]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,

0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};//显示0~F的值

u8 n=0;

/*******************************************************************************

* 函 数 名 : Timer1Init

* 函数功能 : 定时器1初始化

* 输 入 : 无

* 输 出 : 无

*******************************************************************************/

void Timer1Init()

{

TMOD|=0X10;//选择为定时器1模式,工作方式1,仅用TR1打开启动。


//0x10=0001 0000,所以是T1模式,工作方式1


TH1=0XFC; //给定时器赋初值,定时1ms (65536-1000=64536)

TL1=0X18;

ET1=1;//打开定时器1中断允许

EA=1;//打开总中断

TR1=1;//打开定时器

}


/*******************************************************************************

* 函 数 名 : main

* 函数功能 : 主函数

* 输 入 : 无

* 输 出 : 无

*******************************************************************************/

void main()

{

LSA=0;

LSB=0;

LSC=0;

Timer1Init(); //定时器1初始化

while(1);

}


/*******************************************************************************

* 函 数 名 : void Timer1() interrupt 3

* 函数功能 : 定时器0中断函数

* 输 入 : 无

* 输 出 : 无

*******************************************************************************/

void Timer1() interrupt 3

{

static u16 i;

TH1=0XFC; //给定时器赋初值,定时1ms

TL1=0X18;

i++;

if(i==1000)

{

i=0;

P0=smgduan[n++];

if(n==16)n=0;

}

}


『本文转载自网络,版权归原作者所有,如有侵权请联系删除』

热门文章 更多
51单片机简易电子称程序