完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
//给你一个思路,例程片段参考一下,昨天发的有错误,改动后要审核但丢失了,重发一次。
unsigned char a; //键值变量0~6,0为初始态,不控制闪烁 unsigned char count; //数码管轮流显示计数变量 unsigned int Cnt_ms; //1ms中断计数变量 /******定时器0初始化程序******/ void Timer0Init(void) //1毫秒@12.000MHz { TMOD = 0x01; //设置定时器模式 TL0 = 0x18; //设置定时初值 TH0 = 0xFC; //设置定时初值 TR0 = 1; //定时器0开始计时 EA=1; //开总中断 ET0=1; //开定时器0中断 } /******定时器0中断服务程序******/ void timer0() interrupt 1 { TL0 = 0x18; //设置定重载值 TH0 = 0xFC; //设置定重载值 Cnt_ms++; //1ms变量自+1 count++; //轮流显示计数 if(Cnt_ms>=1000) //1秒,可根据闪烁频率修改 Cnt_ms=0; if(count>=4) //显示程序,1ms显示一位 { count=0; switch(count) { case 0: //显示段语句 if((a==1)&(count<500))//满足两个条件执行以下语句。 { //关闭位语句 } else { //显示位语句 } break; case 1: //显示段语句 if((a==2)&(count<500))//满足两个条件执行以下语句,a=键值 { //关闭位语句 } else { //显示位语句 } break; case 2: //显示段语句 if((a==3)&(count<500))//满足两个条件执行以下语句,a=键值 { //关闭位语句 } else { //显示位语句 } break; case 3: //显示段语句 if((a==4)&(count<500))//满足两个条件执行以下语句,a=键值 { //关闭位语句 } else { //显示位语句 } break; } } }
最佳答案
|
|
|
|
你这不是加延时的问题,而是要增加一个闪烁用的定时,然后在正常的数码管显示程序里根据闪烁定时和需要闪烁的位来控制该位数码管的亮与不亮,来形成闪烁
|
|
|
|
本帖最后由 wulinwl 于 2017-7-13 17:51 编辑
正常数码管动态显示为避免闪烁需要每一位显示时间约1ms,8位显示一轮约10ms。如果刻意需要某一位数码管在特定时间处于1s周期闪烁,也就是说该位数码管500ms同其他一样发光,500ms处于熄灭状态。这最好用定时器中断来处理数码管动态显示程序。由按键程序得到的设定位置变量与数码管动态显示的位变量加时间变量来确定某一位数码管发光或熄灭。这个程序不难,但切不可用delay软件延时处理。否则所有数码管都闪烁或不亮。给你一个思路例程参考。/******定时器0初始化程序******/ void Timer0Init(void) //1毫秒@12.000MHz { TMOD = 0x01; //设置定时器模式 TL0 = 0x18; //设置定时初值 TH0 = 0xFC; //设置定时初值 TR0 = 1; //定时器0开始计时 EA=1; //开总中断 ET0=1; //开定时器0中断 } /******定时器0中断服务程序******/ void timer0() interrupt 1 { TL0 = 0x18; //设置定重载值 TH0 = 0xFC; //设置定重载值 Cnt_ms++; //1ms变量自+1 if(Cnt_ms>=1000) //1秒 { Cnt_ms=0; count++; //轮流显示计数 if(count>=4) //显示程序 { count=0; switch(count) { case 0: //显示段语句 //显示位前先判断条件,下同 if((a==1)&(count<500))//满足两个条件执行以下语句,a=键值0~4,0为初始态,这里无效 { //关闭位语句 } else { //显示位语句 } break; case 1: //显示段语句 if((a==2)&(count<500))//满足两个条件执行以下语句,a=键值 { //关闭位语句 } else { //显示位语句 } break; case 2: //显示段语句 if((a==3)&(count<500))//满足两个条件执行以下语句,a=键值 { //关闭位语句 } else { //显示位语句 } break; case 3: //显示段语句 if((a==4)&(count<500))//满足两个条件执行以下语句,a=键值 { //关闭位语句 } else { //显示位语句 } break; } } } } 补充内容 (2017-7-14 15:54): 程序有错误,5楼是更改后的程序。 |
|
|
|
这里先定义一个概念,闪烁就是指需要闪烁的数码管在固定的周期内进行显示和关闭的交替动作。
这里有一个时间,就是闪烁周期,这个周期可以自己定义,并进行调节,以达到合适的效果。 闪烁的实现就是在数码管正常的显示过程中要判断是否需要闪烁,需要闪烁的是哪一位数码管,当前需要进行的是显示需要闪烁的数码管,还是要关闭需要闪烁的数码管。 至于闪烁动作的移动,也就是更改需要闪烁的数码管的位号即可。 |
|
|
|
楼上各位回答都很棒
|
|
|
|
意思表达清晰,思路也就出来了~~~~~
|
|
|
|
你正在撰写答案
如果你是对答案或其他答案精选点评或询问,请使用“评论”功能。
嵌入式学习-飞凌嵌入式ElfBoard ELF 1板卡-本地仓库管理之分支间的操作
561 浏览 0 评论
【RA-Eco-RA4E2-64PIN-V1.0开发板试用】3D 图形显示
498 浏览 0 评论
630 浏览 1 评论
【RA-Eco-RA4E2-64PIN-V1.0开发板试用】SPI点亮16级灰阶OLED显示屏
503 浏览 0 评论
《DNESP32S3使用指南-IDF版_V1.6》第四十二章 录音机实验
1122 浏览 0 评论
【youyeetoo X1 windows 开发板体验】少儿AI智能STEAM积木平台
12206 浏览 31 评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2025-1-23 13:44 , Processed in 0.534292 second(s), Total 49, Slave 44 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号