
8051单片机(STC89C52)实现可修改计时初值的单倒计时器(Version1.0)
发布日期:2021-05-08 01:18:15
浏览次数:25
分类:精选文章
本文共 1185 字,大约阅读时间需要 3 分钟。
程序启动后计时初值为15, 之后可通过串口发来的数据(如"99")来修改下一次计时初值.
#includeunsigned char code DIG_CODE[10] = {0x3f, 0x06, 0x5b, 0x4f, 0x66, 0x6d, 0x7d, 0x07, 0x7f, 0x6f};//对应数码管显示0~9 char buf[2];int tcount = 0;//记录经过的10ms区间段个数int sec = 15;//倒计时初始值记录int sec2 = 15;//倒计时初始值void T0_INT() interrupt 1 //timer0中断, 每10ms触发一次{ TR0 = 0;//关闭timer0 TH0 = 0xD8; TL0 = 0xF0;//65536 - 10000 = 55536 if(tcount % 2 == 0) { //显示个位数 P2 = 0;// P2 = 0 -> (P24, P23, P22) = (0, 0, 0) -> 右数第一个数字点亮 P0 = DIG_CODE[sec2 % 10]; tcount ++; } else if(tcount % 2 == 1) { //显示十位数 P2 = 1 << 2;//P2 = 0000 0100 -> (P24, P23, P22) = (0, 0, 1) -> 右数第二个数字点亮 P0 = DIG_CODE[sec2 / 10]; tcount ++; } if(tcount == 100) //10ms * 100 = 1000ms = 1s -> 1s时间到 { tcount = 0; sec2 --; if(sec2 == -1) { sec2 = sec; } } TR0 = 1;//重新开启timer0}int main(){ int i = 0; TMOD = 0x21; SCON = 0x50;//设置串行通信格式 TH0 = 0xD8; TL0 = 0xF0;//65536 - 10000 = 55536 IE = 0x82;//EA + ET0 -> 1000 0010 TH1 = 0xE6; TL1 = 0xE6;//1200bps under 12MHz RI = 0; TR0 = 1;//开启timer0 TR1 = 1;//开启timer1 while(1) { if(RI == 1) { RI = 0; buf[i++] = SBUF;//接收串口发来的数据 if(i == 2) { i = 0; sec = (buf[0] - 48) * 10 + (buf[1] - 48); } } } return 0;}
发表评论
最新留言
关注你微信了!
[***.104.42.241]2025年04月26日 18时18分13秒
关于作者

喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
[Go] gin框架渲染html字符串
2019-03-15
[js] js中的闭包以及特点
2019-03-15
[操作系统]内存连续分配管理方式
2019-03-15
[Go] json.Unmarshal()解析后存储的结构体定义
2019-03-15
[PHP]PHP不支持方法重载和只支持方法覆盖
2019-03-15
[Go] 获取Go二进制文件的真正执行路径os.Args
2019-03-15
java Map
2019-03-15
scala Tuple入门到熟悉
2019-03-15
RDD partitioner入门详解
2019-03-15
presto查询报错
2019-03-15
superset报错
2019-03-15
Hive 分组取Top N
2019-03-15
yarn开启Label Scheduler
2019-03-15
Spark sample入门到精通
2019-03-15
C++ Primer Plus【复习笔记】-【复合类型】
2019-03-15
前端一些要会的知识点
2019-03-15
VUE +ElementUI form表单回车提交
2019-03-15
使用Spring AOP应该注意的一个小细节
2019-03-15
学习Swoole之进程队列之间通信
2019-03-15
docker 快速安装bcmath扩展
2019-03-15