<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          新聞中心

          EEPW首頁 > 嵌入式系統(tǒng) > 設計應用 > 集溫度與時間在液晶上的顯示設計

          集溫度與時間在液晶上的顯示設計

          作者: 時間:2016-11-27 來源:網(wǎng)絡 收藏
          集溫度與時間在液晶上顯示的智能電子體溫計設計是我大二時自學51單片機又看完郭天祥大俠的新概念單片機后自己動手搭板子,自己寫
          程序調(diào)試的電路簡單得很,沒有用到74HC573,剛從硬盤里找到了這個設計,幸存已久。今朝終于得見天日,特此紀念一下過往的大學實驗室生活!
          本作品是基于現(xiàn)在的水銀體溫計測溫時間長,難讀或者讀數(shù)不精確的現(xiàn)狀下而研發(fā)的。我們知道去醫(yī)院看病或自己在家中感冒發(fā)燒要測體溫來查看。而此款體溫計是數(shù)字顯示,只要上過學就能讀體溫,相對于水銀體溫計,不會摔碎也不用擔心如何處理。只要將探測頭放入咯吱窩里,溫度變化,一旦穩(wěn)定便讀出數(shù)值來,當?shù)蜔蛘吒邿霈F(xiàn)時便會報警提示。除此之外,還有時間顯示,此功能讓電子體溫計更加人性化。
          此體溫計是基于51單片機+18B20+lcd1602等必要的外圍設備實現(xiàn)。
          電子體溫計體積小,易讀,報警。老少兒童皆能使用。
          本設計軟硬件相結(jié)合并不只是用硬件實現(xiàn)。性能更加穩(wěn)定。傳感器+mcu+輸出顯示+輸入控制+報警的設計。
          并且此設計可以用于“家庭醫(yī)生”的系統(tǒng)設計,比如可以加上測脈搏、觀心跳、量血壓等一體的系統(tǒng)設計。方便家人足不出戶便可以知道自己的身體狀況。
          使用時只要將黃豆粒大的探測頭代替水銀體溫計放到胳肢窩。然后觀察示數(shù)變化,待穩(wěn)定不再變化后便是體溫數(shù)值。
          本設計軟硬件相結(jié)合并不只是用硬件實現(xiàn)。性能更加穩(wěn)定。傳感器+mcu+輸出顯示+輸入控制+報警的設計。
          此設計可以用于“家庭醫(yī)生”的系統(tǒng)設計,比如可以加上測脈搏、觀心跳、量血壓等一體的系統(tǒng)設計。方便家人足不出戶便可以知道自己的身體狀況。
          如果只是單獨測量體溫可以用更小的單片機來替換,小巧靈活,精美。

          此設計完全可以投入市場,效益可觀。

          本文引用地址:http://www.ex-cimer.com/article/201611/322302.htm

          直接貼程序

          #include
          #include
          #define uint unsigned int
          #define uchar unsigned char
          uchar code table1[]={"Cur Temp: . "};
          uchar code table2[]={"Cur Tim: :00: "};
          uint temp=0;
          uint a,b;
          uchar miao,shi,fen,s1num;
          float ftemp=0;
          sbit dq=P2^0;
          sbit bee=P2^1;
          sbit k1=P3^3;
          sbit k2=P3^6;
          sbit k3=P3^7;
          sbit rs=P3^4;
          sbit en=P3^5;
          //***********經(jīng)典的延時程序6us*****************//
          void delay(uint t) //6 us
          {
          while(--t);
          }
          void delays(uint t)
          {
          uchar i;
          while(t--)for(i=110;i>0;i--);
          }
          //關于lcd1602的系列chengxu***********//
          void writecomm(uchar com)
          {
          rs=0;
          P1=com;
          en=0;
          delay(5);
          en=1;
          delay(5);
          en=0;
          }
          void writedat(uchar dat)
          {
          rs=1;
          P1=dat;
          en=0;
          delays(5);
          en=1;
          delays(15);
          en=0;
          }
          void lcd1602init()
          {
          en=0;
          fen=0;
          shi=0; //初始值 在這里設
          miao=0;
          s1num=0;
          P2=0xff;
          writecomm(0x38);
          writecomm(0x0c);
          writecomm(0x06);
          writecomm(0x01);
          }
          ////////*******溫度的系列函數(shù)*********8//
          bit ds18inti()
          {
          dq=1;_nop_();_nop_(); //延時2微妙
          dq=0;
          delay(85);//510us
          dq=1;
          delay(6); //15-60us
          if(dq) //沒應答
          {
          return 0;
          }
          while(dq); //等待變0則有應答
          {
          while(!dq); //等待應答信號完畢
          }
          return 1; //完畢?
          }
          void writeonebyte(uchar val)
          {

          uchar i;
          for(i=8;i>0;i--)
          {
          dq=1;_nop_();_nop_(); //從高拉倒低
          dq=0;_nop_();_nop_();_nop_();_nop_(); //5 us
          dq=val&0x01; //最低位移出
          delay(6); //66 us
          val=val/2; //右移1位
          }
          dq=1;
          delay(1);
          }
          //讀數(shù)據(jù)時,數(shù)據(jù)以字節(jié)的最低有效位先從總線移出
          uchar readonebyte()
          {
          uchar i;
          uchar value=0;
          for(i=8;i>0;i--)
          {
          dq=1;_nop_();_nop_();
          value>>=1;
          dq=0;_nop_();_nop_();_nop_();_nop_(); //4 us
          dq=1;_nop_();_nop_();_nop_();_nop_();_nop_(); //4 us
          if(dq)value|=0x80;
          delay(6); //66 us
          }
          dq=1;
          return(value);

          }
          //****************溫度轉(zhuǎn)換***//
          get_temp(void)
          {
          uchar a=0;
          uchar b=0;
          ds18inti();
          delay(200);
          writeonebyte(0xcc); //跳過讀序列號的操作
          writeonebyte(0x44); //啟動溫度轉(zhuǎn)換
          delay(220); //出在這 難題
          ds18inti();
          writeonebyte(0xcc); //跳過讀序列號的操作
          writeonebyte(0xbe); //讀取溫度寄存器
          a=readonebyte();//先讀低8位
          b=readonebyte();//在讀高8位
          temp=b*256+a;
          return temp;
          }
          //***********蜂鳴函數(shù)***///
          void beep()
          {
          bee=~bee;
          delays(50);
          }
          //*******在液晶上顯示溫度函數(shù)***//
          void wendu(uchar add,int dat) //int dat必須為整型 才能保證出現(xiàn)25.5以上的值
          {
          uchar shi,ge,shifen;
          if(dat<0)
          {
          writecomm(0x80+9);
          writedat(-);
          dat=0-dat;
          }
          else
          {
          writecomm(0x80+9);
          writedat(+);
          }
          // bai=(dat>>4)/100+0x30;
          shi=(dat>>4)%100/10;
          ge=(dat>>4)%10;
          shifen=((dat&0x000f)*62.5 )/100+0x30;
          writecomm(0x80+add);
          // writedat(bai+0x30);
          writedat(shi+0x30);
          writedat(ge+0x30);
          writecomm(0x80+13);
          writedat(shifen);


          }
          //*******在液晶上顯示時間函數(shù)***//
          void sfm(uchar add,uchar dat) //寫時分秒的子函數(shù)
          {
          uchar shi,ge;
          ge=dat%10;
          shi=dat/10;
          writecomm(0x80+0x40+add) ;
          writedat(0x30+shi) ;
          writedat(0x30+ge) ;
          }
          //*******定時器0的初始化***********、//
          void timerinti()
          {
          TMOD=0x01;
          EA=1;
          ET0=1;
          TR0=1;
          TH0=(65536-50000)/256;
          TL0=(65536-50000)%256;
          }

          //*********顯示時間和溫度的初始化函數(shù)**********8//
          void displaytime()
          {
          uchar num;
          writecomm(0x80);
          for(num=0;num<16;num++)
          {
          writedat(table1[num]);
          delays(5);
          }
          a=get_temp(); //yanhi
          delays(40);
          writecomm(0x80+14);
          writedat(0xdf);
          writecomm(0x80+15);
          writedat(0x43);
          delay(200);

          writecomm(0x80+0x40);
          for(num=0;num<16;num++)
          {
          writedat(table2[num]);
          delays(5);
          }
          }
          //********調(diào)用溫度和報警函數(shù)************//
          void displaywendu()
          {
          int dat;
          uchar shi,ge;
          delays(200);
          a=get_temp();
          wendu(10,a);
          dat=get_temp();
          shi=(dat>>4)%100/10;
          ge=(dat>>4)%10;
          if((shi<3)|(shi>3))beep();
          }
          //********鍵盤掃描程序***********8//
          void keyscan()
          {
          if(k1==0)
          {
          delays(5);
          if(k1==0)
          {
          s1num+=1;
          while(!k1);
          }
          switch(s1num) //從頭閃到尾 原因何在 只要有數(shù)據(jù)更新就會閃所以不能把
          { //所有的顯示函數(shù)放大循環(huán)里
          case 1:TR0=0;writecomm(0x80+0x40+14);writecomm(0x0f);break;
          case 2:writecomm(0x80+0x40+11);break;
          case 3:writecomm(0x80+0x40+8);break;
          case 4:s1num=0;writecomm(0x0c);TR0=1;break;
          default:break;
          }
          }
          //.....*****...........//
          if(s1num==1) //增加程序
          {
          if(k2==0)
          {
          delays(5);
          if(k2==0)
          {
          while(!k2);
          miao++;
          if(miao==60)
          miao=0;
          sfm(14,miao);
          }
          }

          }
          if(s1num==2)
          {
          if(k2==0)
          {
          delays(5);
          if(k2==0)
          {
          while(!k2);
          fen++;
          if(fen==60)
          fen=0;
          sfm(11,fen);
          }
          }
          }
          if(s1num==3)
          {
          if(k2==0)
          {
          delays(5);
          if(k2==0)
          {
          while(!k2);
          shi++;
          if(shi==24)
          shi=0;
          sfm(8,shi);
          }
          }
          }
          //......................//減少程序
          if(s1num==1)
          {
          if(k3==0)
          {
          delays(5);
          if(k3==0)
          {
          while(!k3);
          miao--;
          if(miao==0)
          miao=59;
          sfm(14,miao);
          }
          }

          }
          if(s1num==2)
          {
          if(k3==0)
          {
          delays(5);
          if(k3==0)
          {
          while(!k3);
          fen--;
          if(fen==0)
          fen=59;
          sfm(11,fen);
          }
          }
          }
          if(s1num==3)
          {
          if(k3==0)
          {
          delays(5);
          if(k3==0)
          {
          while(!k2);
          shi--;
          if(shi==0)
          shi=24;
          sfm(8,shi);
          }
          }
          }
          }

          void main()
          {

          lcd1602init();
          ds18inti();
          timerinti();
          displaytime();
          sfm(8,shi); // 初始顯示00:00
          sfm(11,fen);
          sfm(14,miao);
          while(1)
          {
          keyscan();

          displaywendu();
          }
          }
          void timer0() interrupt 1
          {
          uchar count;

          TH0=(65536-50000)/256;
          TL0=(65536-50000)%256;
          count++;

          if(count==17)
          {
          count=0;
          miao++;
          if(miao==60)
          {
          miao=0;
          fen++;
          if(fen==60)
          {
          fen=0;
          shi++;
          if(shi==24)shi=0;
          sfm(8,shi);
          }
          sfm(11,fen);
          }
          sfm(14,miao);
          }

          }



          關鍵詞: 液晶顯示設

          評論


          技術專區(qū)

          關閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();