找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2691|回复: 20
收起左侧

单片机数码管闪烁怎么解决 附程序电路图

[复制链接]
ID:992677 发表于 2022-12-13 17:56 | 显示全部楼层 |阅读模式

数码管闪烁

数码管闪烁

两个这种类型的显示函数

两个这种类型的显示函数

主函数

主函数
回复

使用道具 举报

ID:992677 发表于 2022-12-13 18:02 | 显示全部楼层
程序仿真后显示两个DS18B20的温度,一直在切换,该怎么保持一段时间后再显示下一个?主函数那里用了延时函数也没用
回复

使用道具 举报

ID:992677 发表于 2022-12-13 18:06 | 显示全部楼层
就是这样
1670925090421.gif
回复

使用道具 举报

ID:161164 发表于 2022-12-13 23:15 | 显示全部楼层
2022-12-13_230744.png
回复

使用道具 举报

ID:213173 发表于 2022-12-14 09:53 | 显示全部楼层
动态扫描数码管显示发生闪烁现象是因为扫描频率过低,扫描频率过低的原因是读取DS18B20数据耗时过长和显示函数编写缺陷所致。4位数码管扫描周期不得大于20ms。使用长时间的阻滞型延时会大大降低CPU工作效率。给你一个示例参考。 4位数码管时钟温度表仿真.rar (332.16 KB, 下载次数: 17)
回复

使用道具 举报

ID:68189 发表于 2022-12-14 10:16 | 显示全部楼层
这个方法试一下::
双击数码管,打开数码管的属性,把触发时间改一下.
ArSnag_20221214101246.jpg

回复

使用道具 举报

ID:77589 发表于 2022-12-14 11:35 | 显示全部楼层
动态扫描应该调快一点。
回复

使用道具 举报

ID:77589 发表于 2022-12-14 11:36 | 显示全部楼层
毕竟这是仿真,PC机的性能也会影响的。还是以实物为准。
回复

使用道具 举报

ID:992677 发表于 2022-12-14 15:15 | 显示全部楼层

我是在主函数加for循环,也解决了
回复

使用道具 举报

ID:992677 发表于 2022-12-14 15:21 | 显示全部楼层
解决了,我是在主函数加了个for循环
NRW`Y$P@57VH_S1I7{8Z$2M.png
51hei录屏20221214151953.gif
回复

使用道具 举报

ID:158391 发表于 2022-12-17 03:31 | 显示全部楼层
wulin 发表于 2022-12-14 09:53
动态扫描数码管显示发生闪烁现象是因为扫描频率过低,扫描频率过低的原因是读取DS18B20数据耗时过长和显示 ...

大佬,下来后解压不了呢,能重新发一下吗
回复

使用道具 举报

ID:513507 发表于 2022-12-27 18:15 | 显示全部楼层
显示和功能处理分开,不要混淆一起,这样比较好处理问题
回复

使用道具 举报

ID:1003276 发表于 2023-1-1 18:30 | 显示全部楼层
调整一下显示时间,显示与数据运行区分开来
                                                   
回复

使用道具 举报

ID:992677 发表于 2023-2-24 15:42 | 显示全部楼层

大佬,为什么我用了你这个会报错?DS18B20.C(51): error C183: unmodifiable lvalue
  1. void Delay(int count)
  2. {
  3.         int i;
  4.         for(i=1;i<=count;i++);
  5. }
复制代码
回复

使用道具 举报

ID:161164 发表于 2023-2-24 20:56 | 显示全部楼层
小灰灰、 发表于 2023-2-24 15:42
大佬,为什么我用了你这个会报错?DS18B20.C(51): error C183: unmodifiable lvalue

完全不一样好不好
回复

使用道具 举报

ID:1061331 发表于 2023-2-24 22:22 | 显示全部楼层
控制好程序执行每一步的时间,一步步调DELAY也行,调到时序对的时候一般就行
回复

使用道具 举报

ID:992677 发表于 2023-2-25 20:26 | 显示全部楼层
lkc8210 发表于 2023-2-24 20:56
完全不一样好不好

这是 全部程序仿,就 照着大佬  你发的图片修的  ,哪不对 了  ?

多路温度报警 (2).zip

107.49 KB, 下载次数: 5

回复

使用道具 举报

ID:161164 发表于 2023-2-26 11:04 | 显示全部楼层
小灰灰、 发表于 2023-2-25 20:26
这是 全部程序仿,就 照着大佬  你发的图片修的  ,哪不对 了  ?

你的"Delay"是函数
我的"Delay"是变量
当然不一样
回复

使用道具 举报

ID:992677 发表于 2023-2-26 11:40 | 显示全部楼层
lkc8210 发表于 2023-2-26 11:04
你的"Delay"是函数
我的"Delay"是变量
当然不一样

那我该怎么写?请大佬教教我
回复

使用道具 举报

ID:155507 发表于 2023-2-26 11:56 | 显示全部楼层
小灰灰、 发表于 2023-2-26 11:40
那我该怎么写?请大佬教教我

给你改了

  1. /********************************************************************
  2. * 程序名;  基于DS18B20的测温系统
  3. * 功  能: 实时测量温度,超过上下限报警,报警温度可手动调整。K1是用来
  4. * 进入上下限调节模式的,当按一下K1进入上限调节模式,再按一下进入下限
  5. * 调节模式。在正常模式下,按一下K2进入查看上限温度模式,显示1s左右自动
  6. * 退出;按一下K3进入查看下限温度模式,显示1s左右自动退出;按一下K4消除
  7. * 按键音,再按一下启动按键音。在调节上下限温度模式下,K2是实现加1功能,
  8. * K1是实现减1功能,K3是用来设定上下限温度正负的。         
  9.                   
  10. *********************************************************************/
  11. #include<reg52.h>                                   //将AT89X52.h头文件包含到主程序
  12. #include<intrins.h>                                   //将intrins.h头文件包含到主程序(调用其中的_nop_()空操作函数延时)
  13. #define uint unsigned int                      //变量类型宏定义,用uint表示无符号整形(16位)
  14. #define uchar unsigned char                   //变量类型宏定义,用uchar表示无符号字符型(8位)

  15. uchar max=0x00,min=0x00;                   //max是上限报警温度,min是下限报警温度

  16. bit   s=0;                                                   //s是调整上下限温度时温度闪烁的标志位,s=0不显示200ms,s=1显示1s左右
  17. bit   s1=0;                                                   //s1标志位用于上下限查看时的显示
  18. void display1(uint z);                            //声明display1()函数(display.h头文件中的函数,ds18b20.h要用应先声明)
  19. #include"ds18b20.h"                                   //将ds18b20.h头文件包含到主程序
  20. #include"keyscan.h"                                   //将keyscan.h头文件包含到主程序
  21. #include"display.h"                                   //将display.h头文件包含到主程序


  22. /***********************主函数************************/
  23. void main()
  24. {
  25.          unsigned char z;
  26.          unsigned int Delay=0;
  27.          beer=1;                                           //关闭蜂鸣器
  28.          led=1;                                                   //关闭LED灯
  29.          timer1_init(0);                           //初始化定时器1(未启动定时器1)
  30.          get_temperature(1);                    //首次启动DS18B20获取温度(DS18B20上点后自动将EEPROM中的上下限温度复制到TH和TL寄存器)
  31.          get_temperature_1(1);
  32.          while(1)                                           //主循环
  33.          {         
  34.                                     //按键扫面函数
  35.                  
  36.                  keyscan();                                   //按键扫面函数
  37.                  if(Delay==0)
  38.                  {
  39.                  get_temperature(0);            //获取温度函数
  40.                  alarm();       
  41.                  }
  42.                  if(Delay==1000)
  43.                  {
  44.                  get_temperature_1(0);
  45.                  alarm_1();       
  46.                  }                  
  47.                  
  48.                  if(Delay++>=2000)Delay=0;
  49.                    display(temp,temp_d*0.625);//显示函数
  50.          }
  51. }   
复制代码
回复

使用道具 举报

ID:992677 发表于 2023-2-26 20:27 | 显示全部楼层

您好,我照您这样改了之后确实可以连续报警了,但是一旦报警就停不下来了,温度降下来了也还在报警是怎么回事?
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表