51单片机定时器实验c语言,基于Proteus仿真51单片机定时器、计数器应用实验

#include //包含 51 标准文件头

#define uchar unsigned char

#define uint unsigned char

uchar dat=0; //定义 BCD 计数单元(范围: 0~99)

uchar i; //定义循环变量

int cnt=0;

sbit key=P1^0; //定义按键

/*---------------------- T0 初始化子函数 -----------------------*/

void Timer0Init(void) //50毫秒@12.000MHz

{

AUXR &= 0x7F; //定时器时钟12T模式

TMOD &= 0xF0; //设置定时器模式

TL0 = 0xB0; //设置定时初值

TH0 = 0x3C; //设置定时初值

TF0 = 0; //清除TF0标志

EA = 1; //全局中断使能

ET0 = 1; //定时器0中断使能

}

/*---------------------- T1 初始化子函数 -----------------------*/

void Timer1Init(void) //50毫秒@12.000MHz

{

AUXR &= 0xBF; //定时器时钟12T模式

TMOD &= 0x0F; //设置定时器模式

TL1 = 0xB0; //设置定时初值

TH1 = 0x3C; //设置定时初值

TF1 = 0; //清除TF1标志

TR1 = 1; //定时器1开始计时

EA = 1; //全局中断使能

ET1 = 1; //定时器1中断使能

}

/*-------------------- T0 中断服务子函数 -----------------------*/

void Timer0_int(void) interrupt 1 //T0 中断服务子程序

{

i++;

if(i==10) //计时 1S

{

i = 0;

dat++;

if(dat==100) //计时到 100S 时,又从 0 开始

{

dat = 0;

}

}

}

/*-------------------- T1 中断服务子函数 -----------------------*/

void Timer1_isr (void) interrupt 3

{

cnt++;

if(cnt==10)

P17=!P17;

else if(cnt==30)

{

cnt=0;

P17=!P17;

}

}

/*----------------------- 启动子函数 ---------------------------*/

void Start(void) //启动定时函数

{

if(key==0) //判断按键按下

{

TR0=1; //定时器0开始计时

}

else

{

TR0=0; //定时器0结束计时

}

}

/*-------------------- BCD 码转换子函数 ------------------------*/

int decimal_bcd_code(int decimal) //十进制转BCD码

{

int sum = 0, i; //i计数变量,sum返回的BCD码

for ( i = 0; decimal > 0; i++)

{

sum |= ((decimal % 10 ) << ( 4*i));

decimal /= 10;

}

return sum;

}

/*-------------------------- 主函数 ---------------------------*/

void main(void)

{

Timer0Init(); //T0 初始化

Timer1Init(); //T1 初始化

while(1)

{

Start(); // 启动定时

P0 = ~(decimal_bcd_code(dat)); //送 LED 显示

}

}

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值