博客
关于我
8051单片机(STC89C52)以定时器中断模式实现两倒计时器异步计时
阅读量:358 次
发布时间:2019-03-05

本文共 1313 字,大约阅读时间需要 4 分钟。

 相较单倒计时器对timer0初值的设定, 此处将中断处理程序触发时间间隔改为5ms, 目的是给人在视觉上以更好的体验(设定为10ms会明显感觉到闪烁).

#include 
unsigned char code DIG_CODE[10] = {0x3f, 0x06, 0x5b, 0x4f, 0x66, 0x6d, 0x7d, 0x07, 0x7f, 0x6f};//对应数码管显示0~9int tcount = 0;//记录经过的5ms区间段个数int sec1 = 15, sec2 = 25;//倒计时初始值void T0_INT() interrupt 1 //timer0中断, 每5ms触发一次{ TR0 = 0;//关闭timer0 TH0 = 0xEC; TL0 = 0x78;//65536 - 5000 = 60536 if(tcount % 4 == 0) { //显示个位数(第一个倒计时器) P2 = 0;// P2 = 0 -> (P24, P23, P22) = (0, 0, 0) -> 右数第一个数字点亮 P0 = DIG_CODE[sec1 % 10]; tcount ++; } else if(tcount % 4 == 1) { //显示十位数(第一个倒计时器) P2 = 1 << 2;//P2 = 0000 0100 -> (P24, P23, P22) = (0, 0, 1) -> 右数第二个数字点亮 P0 = DIG_CODE[sec1 / 10]; tcount ++; } else if(tcount % 4 == 2) { //显示个位数(第二个倒计时器) P2 = 100 << 2;//P2 = 0001 0000 -> (P24, P23, P22) = (1, 0, 0) -> 右数第五个数字点亮 P0 = DIG_CODE[sec2 % 10]; tcount ++; } else if(tcount % 4 == 3) { //显示十位数(第二个倒计时器) P2 = 101 << 2;//P2 = 0001 0100 -> (P24, P23, P22) = (1, 0, 1) -> 右数第六个数字点亮 P0 = DIG_CODE[sec2 / 10]; tcount ++; } if(tcount == 200) //5ms * 200 = 1000ms = 1s -> 1s时间到 { tcount = 0; sec1 --; sec2 --; if(sec1 == -1) { sec1 = 15; } if(sec2 == -1) { sec2 = 25; } } TR0 = 1;//重新开启timer0} int main(){ TMOD = 0x01; TH0 = 0xEC; TL0 = 0x78;//65536 - 5000 = 60536 IE = 0x82; TR0 = 1;//开启timer0 while(1) { ; } return 0;}

 

转载地址:http://ojsg.baihongyu.com/

你可能感兴趣的文章
Vue之Element标签页保留用户操作缓存。
查看>>
智能合约开发实践(1)
查看>>
2. Spring Boot学习——Yaml等配置文件教程
查看>>
MATLAB——操作矩阵的常用函数
查看>>
【C++】Essential c++ 第四章学习笔记
查看>>
CMake自学记录,看完保证你知道CMake怎么玩!!!
查看>>
Eigen库中vector.transpose()函数什么意思
查看>>
ORB-SLAM2:LocalMapping线程学习随笔【李哈哈:看看总有收获篇】
查看>>
ORB-SLAM2:LoopClosing线程学习随笔【李哈哈:看看总有收获篇】
查看>>
牛客练习赛56 D 小翔和泰拉瑞亚(线段树)
查看>>
Codeforces Round #614 (Div. 2) B - JOE is on TV! (简单贪心)
查看>>
Codeforces Round #611 (Div. 3) E. New Year Parties (贪心)
查看>>
Codeforces Round #553 (Div. 2) B. Dima and a Bad XOR(异或+思维)
查看>>
Codeforces Round #381 (Div. 1) B. Alyona and a tree (树上差分)
查看>>
Codeforces Round #305 (Div. 1) B. Mike and Feet(单调栈)
查看>>
hdu6434 Problem I. Count(数论)(好题)
查看>>
NC15553 数学考试(线性DP)
查看>>
POJ - 1651 Multiplication Puzzle(区间DP)
查看>>
MongoDB副本集
查看>>
MySQL两阶段提交、崩溃恢复与组提交
查看>>