久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 3063|回復: 0
打印 上一主題 下一主題
收起左側

單片機+ST188脈搏體溫測量源程序

[復制鏈接]
跳轉到指定樓層
樓主
電路原理圖如下:


元件清單
1、萬用板
2、單片機
3、Lcd1602液晶屏
4、16p排針
5、16p排針母座
6、LM358芯片
7、40腳IC座
8、8腳IC座
9、ST188反射光電開關
10、防水型DS18B20
11、200歐電位器
12、220歐電阻*2
13、1k電阻*5
14、2k電阻
15、10k電阻*6
16、20k電阻
17、100k電阻
18、1uf電容*2
19、10uf電容*2
20、12m晶振
21、30pf電容*2
22、紅色led燈*3
23、綠色led燈
24、黃色led燈
25、8550三極管
26、蜂鳴器
27、按鍵*4
28、自鎖開關
29、DC3.5mm電源座
30、焊錫若干
31、導線若干
32、usb電源線

單片機源程序如下:
  1. #include<reg52.h>
  2. #include <intrins.h>
  3. #include <string.h>
  4. #include "lcd1602.h"
  5. #include "ds18b20.h"        
  6. #include "eeprom.h"        

  7. #define uchar unsigned char
  8. #define uint  unsigned int

  9. sbit rled = P1^0;
  10. sbit gled = P1^1;
  11. sbit trled = P1^2;
  12. sbit yled = P1^3;

  13. sbit beep = P1^4;

  14. sbit key1 = P1^5;
  15. sbit key2 = P1^6;
  16. sbit key3 = P1^7;


  17. sbit P32=P3^2;


  18. unsigned char i=0,timecount=0,displayOK=0,rate=0,aa=0;
  19. unsigned int time[6]={0};
  20. uint temp;
  21. uchar flag;
  22. uchar xl_h,xl_l,temp_h,temp_l;
  23. uint alt;
  24. bit S_flag;

  25. void delay(uint j)
  26. {
  27.         uint x,y;
  28.         for(x=0;x<j;x++)
  29.         for(y=0;y<110;y++);
  30. }


  31. /******************把數據保存到單片機內部eeprom中******************/
  32. void write_eeprom()
  33. {
  34.         SectorErase(0x2000);
  35.         byte_write(0x2000, xl_h);
  36.         byte_write(0x2001, xl_l);
  37.         byte_write(0x2002, temp_h);
  38.         byte_write(0x2003, temp_l);

  39.         byte_write(0x2058, a_a);        
  40. }

  41. /******************把數據從單片機內部eeprom中讀出來*****************/
  42. void read_eeprom()
  43. {
  44.         xl_h = byte_read(0x2000);
  45.         xl_l = byte_read(0x2001);
  46.         temp_h = byte_read(0x2002);
  47.         temp_l = byte_read(0x2003);
  48.         a_a    = byte_read(0x2058);
  49. }

  50. /**************開機自檢eeprom初始化*****************/
  51. void init_eeprom()
  52. {
  53.         read_eeprom();                //先讀
  54.         if(a_a != 1||key2==0)                //新的單片機初始單片機內問eeprom
  55.         {
  56.                 xl_h = 90;
  57.                 xl_l = 50;
  58.                 temp_h =37;
  59.                 temp_l =15;
  60.                 a_a = 1;
  61.                 write_eeprom();           //保存數據
  62.         }        
  63. }

  64.          
  65. void display()
  66. {
  67.         if(flag==0)
  68.         {
  69.                 lcd1602_write(0,0x80);
  70.                 lcd1602_writebyte(" Temp:");
  71.                 lcd1602_write(1,0x30 + temp/100);
  72.                 lcd1602_write(1,0x30 + temp%100/10);
  73.                 lcd1602_write(1,'.');
  74.                 lcd1602_write(1,0x30 + temp%10);
  75.                 lcd1602_write(1,0xdf);
  76.                 lcd1602_writebyte("C    ");

  77.                
  78.                 lcd1602_write(0,0xc0);
  79.                 lcd1602_writebyte("Heart:");
  80.                 if(displayOK==1)
  81.                 {
  82.                         rate=60000/(time[1]/5+time[2]/5+time[3]/5+time[4]/5+time[5]/5);
  83.                         lcd1602_write(1,0x30 + rate/100);
  84.                         lcd1602_write(1,0x30 + rate%100/10);
  85.                         lcd1602_write(1,0x30 + rate%10);
  86.                 }
  87.                 else
  88.                 {
  89.                         lcd1602_writebyte("---");
  90.                 }
  91.                 lcd1602_writebyte("/min   ");
  92.   }
  93.         else
  94.         {
  95.                 lcd1602_write(0,0x80);
  96.                 lcd1602_writebyte(" XH:");
  97.                 if(S_flag==1&&flag==1)
  98.                   lcd1602_writebyte("   ");
  99.                 else
  100.                 {
  101.                 lcd1602_write(1,0x30 + xl_h/100);
  102.                 lcd1602_write(1,0x30 + xl_h%100/10);
  103.                 lcd1602_write(1,0x30 + xl_h%10);
  104.                 }
  105.                
  106.                 lcd1602_writebyte("  XL:");
  107.                 if(S_flag==1&&flag==2)
  108.                   lcd1602_writebyte("   ");
  109.                 else
  110.                 {
  111.                 lcd1602_write(1,0x30 + xl_l/100);
  112.                 lcd1602_write(1,0x30 + xl_l%100/10);
  113.                 lcd1602_write(1,0x30 + xl_l%10);
  114.                 }
  115.                
  116.                
  117.                
  118.                 lcd1602_write(0,0xc0);
  119.                 lcd1602_writebyte(" TH:");
  120.                 if(S_flag==1&&flag==3)
  121.                   lcd1602_writebyte("  ");
  122.                 else
  123.                 {
  124.                
  125.                 lcd1602_write(1,0x30 + temp_h/10);
  126.                 lcd1602_write(1,0x30 + temp_h%10);
  127.                 }
  128.                 lcd1602_writebyte("C ");
  129.                
  130.                 lcd1602_writebyte(" TL:");
  131.                 if(S_flag==1&&flag==4)
  132.                   lcd1602_writebyte("  ");
  133.                 else
  134.                 {
  135.                 lcd1602_write(1,0x30 + temp_l/10);
  136.                 lcd1602_write(1,0x30 + temp_l%10);
  137.                 }
  138.                 lcd1602_writebyte("C ");
  139.                
  140.                
  141.                
  142.                
  143.         }


  144. }

  145. void keyrc()
  146. {
  147.         if(key1==0)
  148.         {
  149.                 delay(10);
  150.                 if(key1==0)
  151.           {
  152.                         flag++;
  153.                         if(flag>4) flag=0;
  154.                 }
  155.                 while(!key1);
  156.         }
  157.         
  158.         if(key2==0)
  159.         {
  160.                 delay(10);
  161.                 if(key2==0)
  162.           {
  163.                         switch(flag)
  164.                         {
  165.                                 case 1: if(xl_h<160)          xl_h++;   break;         
  166.                                 case 2: if(xl_h>xl_l+1)       xl_l++;   break;        
  167.                                 case 3: if(temp_h<99)         temp_h++; break;  
  168.                                 case 4: if(temp_h>temp_l+1)   temp_l++; break;
  169.                         }
  170.                         write_eeprom();
  171.                 }
  172.                 while(!key2);
  173.         }
  174.         
  175.         if(key3==0)
  176.         {
  177.                 delay(10);
  178.                 if(key3==0)
  179.           {
  180.                         switch(flag)
  181.                         {
  182.                                 case 1: if(xl_h>xl_l+1)        xl_h--;   break;         
  183.                                 case 2: if(xl_l>0)             xl_l--;   break;        
  184.                                 case 3: if(temp_h>temp_l+1)    temp_h--; break;  
  185.                                 case 4: if(temp_l>0)           temp_l--; break;
  186.                         }
  187.                         write_eeprom();
  188.                 }
  189.                 while(!key3);
  190.         }
  191. }

  192. void clsp()
  193. {
  194.         alt++;
  195.         if(alt>15)
  196.         {
  197.                 alt=0;
  198.                 if(displayOK==1)
  199.                 {
  200.                         if(rate>xl_h) {rled=~rled;gled=1;}
  201.                         else if(rate<xl_l) {rled=1;gled=~gled;}
  202.                         else {rled=1;gled=1;}
  203.                 }
  204.                 else {rled=1;gled=1;}
  205.                
  206.                 if(temp>temp_h*10) {trled=~trled;yled=1;}
  207.                 else if(temp<temp_l*10) {trled=1;yled=~yled;}
  208.                 else {trled=1;yled=1;}
  209.                
  210.                 if(((rate>xl_h || rate<xl_l) && displayOK==1) || temp>temp_h*10 || temp<temp_l*10)
  211.                         beep=~beep;
  212.                 else
  213.                         beep=1;
  214.                 S_flag=~S_flag;
  215.         }
  216. }



  217. void main()
  218. {
  219.         P32=1;
  220.         lcd_init();//lcd初始化
  221.         init_eeprom();
  222.         TCON=0x01;//設置外部中斷0
  223.         EX0=1;
  224.         
  225.         TMOD=0x01;//定時器0初始化

  226.         TL0 = 0xB0;                //設置定時初值
  227.         TH0 = 0x3C;                //設置定時初值
  228.         ET0=1;//開定時器中斷
  229.         //顯示基本文字
  230.         
  231.         temp=ReadTemperature();
  232.         
  233.         GoToXY_string(0,0," Welcome to use ");
  234.         GoToXY_string(1,0,"   Heart rate   ");
  235.         TR0=0;//定時器停止
  236.         EA=1;//開總中斷
  237.         delay(2000);
  238.         temp=ReadTemperature();
  239.         while(1)
  240.         {
  241.                 temp=ReadTemperature();
  242.                 display();        
  243.                 keyrc();
  244.                 clsp();
  245.         }
  246. }
  247. ……………………

  248. …………限于本文篇幅 余下代碼請從51黑下載附件…………
復制代碼

所有代碼51hei下載:
1-程序.rar (63.35 KB, 下載次數: 29)

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 亚洲精品www久久久久久广东 | 免费毛片在线 | 中文字幕亚洲一区二区三区 | 国产不卡一区 | 国产国产精品久久久久 | 欧美日韩亚洲国产 | 在线观看视频亚洲 | 99国产精品视频免费观看一公开 | 成人三级视频 | 国产视频1区2区 | 久久久久久久久久久久久久av | 欧美男人天堂 | 欧美一区二区大片 | 欧美视频三区 | 欧美一区二区在线观看 | 国产精品久久久久久久久久久久 | 羞羞视频免费在线观看 | 91精品国产综合久久香蕉麻豆 | 性欧美hd | 激情视频网站 | www.4hu影院 | 成人免费影院 | 亚洲精品中文字幕在线观看 | 一区二区高清 | 国产一区二区精品在线 | 日韩欧美国产成人一区二区 | 国产精品美女久久久久久免费 | 鸳鸯谱在线观看高清 | 一级毛片视频在线观看 | 自拍偷拍亚洲视频 | 欧美在线精品一区 | 国产伦一区二区三区 | 午夜影院视频在线观看 | 中文字幕在线观看一区二区 | 欧美日韩专区 | 国产精品视频久久 | 日韩精品一区二区三区中文在线 | 日本一区视频在线观看 | 成人二区三区 | 日韩精品视频一区二区三区 | 91久色 |