完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
今天刚学了定时器,还不是太明白,定时器延时时间太长动态数码管就不显示了,老师不让用延时函数,我就不会做了。定时器怎么工作我倒是知道,但是具体怎么用我不懂,网上查了好多,也没搞清楚
#include #define uchar unsigned char #define uint unsigned int uint i; char ctime=0; uchar code led[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90}; /* void delayms(uint ms) //延时函数,延时一段时间 { uint j; while(ms--) {for(j=0;j<120;j++); } } */ void main() { TMOD=0X01; //设定定时器为工作方式1 TH0=(65536-45872)/256; //装初值,11.0592 MHZ晶振定时50MS,计数值为45872 TL0=(65536-45872)%256; EA=1; //打开总中断 ET0=1; //打开定时器中断 TR0=1; //启动定时器0 P2=0xff; while(1) { /* P0=led[ctime/10]; P2=led[ctime%10]; */ P2=0xfb; //P2.0引脚输出低电平,DS0点亮 P0=led[ctime/10%10]; //数字1的段码 // delayms(10); P2=0xf7; //P2.1引脚输出低电平,DS1点亮 P0=led[ctime%10]; //数字2的段码 // delayms(10); } } void time() interrupt 1 //定时器0中断服务程序 { TH0=(65536-45872)/256; //重装初值 TL0=(65536-45872)%256; i++; if(i==20) //如果i=20,说明1s时间到 { i=0; ctime++; if(ctime>99) { ctime=0; } } } |
|
相关推荐
2个回答
|
|
给你提供一个思想:在定时器中对1个数进行递减/加运算,在主程序中对该数进行判断,递减/加到某个值执行一次显示,并且重新赋初值,每判断一次可以轮换数码管显示,这样就实现了动态显示
|
|
|
|
延时就是你在一个地方等,看表到时间了你就走,定时器就是一个闹钟,到点了他会告诉你,不用你看表,就是这么点差别
|
|
|
|
你正在撰写答案
如果你是对答案或其他答案精选点评或询问,请使用“评论”功能。
744 浏览 0 评论
【每周推荐】采用11代Intel CPU,基于youyeetoo X1开发板搭建少儿AI智能STEAM积木平台
865 浏览 0 评论
2679 浏览 2 评论
【youyeetoo X1 windows 开发板体验】+ 影音处理和AI模型移植
2295 浏览 5 评论
I.MX6ULL-飞凌 ElfBoard ELF1板卡- 移植zbar的方法
1716 浏览 0 评论
【youyeetoo X1 windows 开发板体验】少儿AI智能STEAM积木平台
5830 浏览 31 评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-4-26 00:12 , Processed in 0.571426 second(s), Total 68, Slave 51 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号