18b20和ds1302在5110屏幕显示问题

2019-03-24 17:32发布

同时使用18b20和ds1302在5110屏幕上显示时,为什么显示不出实时的温度,只有不变的一个00.05。
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
13条回答
wyf1101
1楼-- · 2019-03-25 22:01
maychang 发表于 2016-8-19 17:19
“函数中没有中断”
你好像还没有弄清楚“中断”是怎么回事。
打个比方:你正在看书,朋友来了,你记住 ...

是不是18b20的读写时序被ds1302冲突了,但是该怎样解决呢,需要看程序吗
wyf1101
2楼-- · 2019-03-26 03:08
本帖最后由 wyf1101 于 2016-8-19 21:23 编辑
kk118a 发表于 2016-8-19 00:19
上图,程序
  1. void main()
  2. {        

  3.         LCD_init(); //初始化液晶   
  4.         LCD_clear();
  5.         Ds1302Init();
  6.         LCD_write_english_string(0,1,"  2016.08.17 ");
  7.         LCD_write_english_string(0,3,"DS:00:00:00  ");
  8.         LCD_write_english_string(0,5,"    crazyer  ");
  9.         LCD_write_english_string(0,1,"   00:00:00  ");
  10.         LCD_write_english_string(0,2,"wendu: 00.00 C");
  11.         LCD_write_english_string(0,4,"DS 00:00:00  ");
  12.         dd=0;
  13.                 while(1)  
  14.                 {        
  15.                         Ds1302ReadTime();
  16.                         temp1 = Ds18b20ReadTemp();
  17.                         temp1=(temp1*0.0625*100+0.5)*10;         
  18.                     q=temp1 / 1000;
  19.                         b=temp1 % 1000 / 100;
  20.                         s=temp1 % 100 / 10;
  21.                            g=temp1%10;
  22.                         xianshi(3,7,q);                delay(1);
  23.                         xianshi(3,8,b);                delay(1);
  24.                         xianshi(3,9,'.'-48);delay(1);
  25.                         xianshi(3,10,s);        delay(1);
  26.                         xianshi(3,11,g);
  27.                         delay(1);
  28.                                  
  29.                         szshi1=TIME[2]/16;
  30.                         szshi2=(TIME[2]&0x0f);
  31.                         szfen1=TIME[1]/16;
  32.                         szfen2=(TIME[1]&0x0f);
  33.                     szmiao1=TIME[0]/16;
  34.                         szmiao2=(TIME[0]&0x0f);
  35.                         sznian1=TIME[6]/16;
  36.                         sznian2=(TIME[6]&0x0f);
  37.                         szyue1=TIME[4]/16;
  38.                         szyue2=(TIME[4]&0x0f);
  39.                         szri1=TIME[3]/16;
  40.                         szri2=(TIME[3]&0x0f);
  41.                         szxq1=TIME[5]/16;
  42.                         szxq2=(TIME[5]&0x0f);
  43.                         xianshi(1,2,2);
  44.                         xianshi(1,3,0);
  45.                         xianshi(1,4,sznian1);  delay(1);
  46.                         xianshi(1,5,sznian2);  delay(1);
  47. //                        LCD_write_english_string(2,7,"-");
  48.                         xianshi(1,7,szyue1);   delay(1);
  49.                         xianshi(1,8,szyue2);   delay(1);
  50. //                        LCD_write_english_string(2,11,"-");
  51.                         xianshi(1,10,szri1); delay(1);
  52.                         xianshi(1,11,szri2); delay(1);
  53.                         
  54.                         xianshi(2,3,szshi1); delay(1);
  55.                         xianshi(2,4,szshi2); delay(1);
  56. //                        LCD_write_english_string(2,5,":");
  57.                         xianshi(2,6,szfen1); delay(1);
  58.                         xianshi(2,7,szfen2); delay(1);
  59. //                        LCD_write_english_string(2,8,":");
  60.                         xianshi(2,9,szmiao1); delay(1);
  61.                         xianshi(2,10,szmiao2);        delay(1);   
  62. //                        wendu();
  63.                         
  64.                         num1=kaig();                        
  65.                         if(num1==7)        dingshi2(kaig());                        
  66.                         if(num1==1)        dingshi1(kaig());
  67.                         if(shi1==szshi1&&shi2==szshi2&&fen1==szfen1&&fen2==szfen2&&miao1==szmiao1&&miao2==szmiao2)        dd=1;
  68.                         if(s1==szshi1&&s2==szshi2&&f1==szfen1&&f2==szfen2&&m1==szm1&&m2==szmiao2)        dd=1;
  69.                 }

  70.                   
  71. }
复制代码
maychang
3楼-- · 2019-03-26 05:59
 精彩回答 2  元偷偷看……
maychang
4楼-- · 2019-03-26 09:28
wyf1101 发表于 2016-8-19 21:20
是不是18b20的读写时序被ds1302冲突了,但是该怎样解决呢,需要看程序吗

“该怎样解决呢”
准备对18B20进行读或写操作之前,关掉中断,读或写18B20之后立即开中断。这样,中断不会破坏读或写18B20的时序。
关中断后,读或写18B20所需要的时间相当短。在此期间内,中断被“挂起”,相当于病人已经挂号,等待医生为前一个病人诊断。读或写18B20完成后开中断,相当于医生已经为前一个病人诊断完毕,允许这个病人陈述病情。
至于18B20转换期间(大约1秒),单片机可以执行很多程序,并无影响。
详细的时序,应该仔细看18B20的datasheet。
maychang
5楼-- · 2019-03-26 13:43
wyf1101 发表于 2016-8-19 21:20
是不是18b20的读写时序被ds1302冲突了,但是该怎样解决呢,需要看程序吗

“该怎样解决呢”
写程序,尤其是底层程序,绝对不是copy一段别人写的可以正常工作的程序,就能够实现你的目标的。
akdkj
6楼-- · 2019-03-26 15:44
 精彩回答 2  元偷偷看……

一周热门 更多>