历史上的今天
今天是:2025年08月02日(星期六)
2020年08月02日 | 8051单片机(STC89C52)两个倒计时器异步计数
2020-08-02 来源:eefocus



#include void delay()//用定时器0实现5ms精准定时 { TMOD = 0x01; TH0 = 0xEA; TL0 = 0x84;//65536 - 5000 = 60036 TF0 = 0;//置溢出标志位为0 TR0 = 1;//开启定时器0 while(TF0 == 0); TR0 = 0;//暂停定时器0 } void disp_digit(int d, int r) { unsigned char code DIG_CODE[10] = {0x3f, 0x06, 0x5b, 0x4f, 0x66, 0x6d, 0x7d, 0x07, 0x7f, 0x6f}; //第一个倒计时 //显示个位数 P2 = 0;// P2 = 0 -> (P24, P23, P22) = (0, 0, 0) -> 右数第一个数字点亮 P0 = DIG_CODE[d % 10]; delay();//5ms精准定时 //显示十位数 P2 = 1 << 2;//P2 = 0000 0100 -> (P24, P23, P22) = (0, 0, 1) -> 右数第二个数字点亮 P0 = DIG_CODE[d / 10]; delay();//5ms精准定时 //第二个倒计时 //显示个位数 P2 = 6 << 2;//P2 = 0001 1000 -> (P24, P23, P22) = (1, 1, 0) -> 右数第七个数字点亮 P0 = DIG_CODE[r % 10]; delay();//5ms精准定时 //显示十位数 P2 = 7 << 2;//P2 = 0001 1100 -> (P24, P23, P22) = (1, 1, 1) -> 右数第八个数字点亮 P0 = DIG_CODE[r / 10]; delay();//5ms精准定时 } int main() { int i; int sec1 = 15, sec2 = 25; while(1) { if(sec1 == -1) { sec1 = 15; } if(sec2 == -1) { sec2 = 25; } for(i = 0; i < 50; i++) { disp_digit(sec1, sec2);//花费大约20ms } sec1 --; sec2 --; } return 0; }
史海拾趣
|
计算机处理的是客观世界的具体任务,我们把它抽象成事件,程序员关注的也是事件,用户关注的也是事件,因此我们需要事件触发式编程。传统上,在VC、VB之类的可视化编程工具支持下,我们可以实现事件触发式编程,比如往桌面上放置一个按钮,我们只需 ...… 查看全部问答> |
|
传个指纹识别芯片的资料,AES3400这玩意儿不好找的哦, 发帖赚点积分换板子 [ 本帖最后由 jialaolian 于 2010-7-18 12:58 编辑 ]… 查看全部问答> |
|
我的uboot用的是1.3.3, bootargs=console=ttyCPM0,19200 root=/dev/mtdblock6 mtdparts=physmap-flash.0:384k,128k,128k,1792k,1792k,30720k,- 文件系统用的是squashfs 1请问是不是必须要做flash的分区,也就是physmap.c必须设置分区后,才能这 ...… 查看全部问答> |
|
本帖最后由 jameswangsynnex 于 2015-3-3 20:04 编辑 IT老记冀勇庆:一家在海外没有任何资源的公司,却需要开拓海外的运营商市场,这注定是一个非常艰辛的过程。2005年,我去欧洲采访华为的时候曾经听到过一种说法:要倒下五拨人,才能起来一片市 ...… 查看全部问答> |
|
本帖最后由 paulhyde 于 2014-9-15 04:02 编辑 南华大学黄智伟 2003~2011赛前元器件清单与赛题对比 根据全国大学生电子设计竞赛组委会专家组的安排,通常会在赛前一周在网上公布本次全国大学生电子设计竞赛需要的基本仪器和主要元器件清单, ...… 查看全部问答> |




