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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 6860|回復: 2
收起左側

基于51單片機'ST188心率脈搏檢測程序與原理圖分享

[復制鏈接]
ID:274459 發表于 2021-1-9 20:02 | 顯示全部樓層 |閱讀模式
內含完整原理圖設計、文檔等

原理圖

原理圖
傳感器的引腳圖.png

元件清單:
51hei.png
元件型號    元件名稱    元件標號
10uF    電容    C1
20PF    電容    C2, C3
10uF    電容    C4
1uF    電容    C5, C6
LED-R-3mm    指示燈    D1
LCD12864    液晶    LCD1
10K    可調電阻    RV1
10K    電阻    R2
330歐    電阻    R3, R4, R13
20K    電阻    R5, R6
10K    電阻    R7, R8
56k    電阻    R9
6.8K    電阻    R10
24K    電阻    R11
100K    電阻    R12
SW-PB    按鍵    S1
STC89C52    單片機    U1
ST188    光電開關    U2
LM358    放大器    U3
12M    晶振    Y1


單片機源程序如下:
  1. #include <reg52.h>                 //調用單片機頭文件
  2. #define uchar unsigned char  //無符號字符型 宏定義        變量范圍0~255
  3. #define uint  unsigned int         //無符號整型 宏定義        變量范圍0~65535



  4. sbit rs=P2^5;         //寄存器選擇信號 H:數據寄存器          L:指令寄存器
  5. sbit rw=P2^6;         //寄存器選擇信號 H:數據寄存器          L:指令寄存器
  6. sbit e =P2^7;         //片選信號   下降沿觸發

  7. unsigned char i=0,timecount=0,displayOK=0,rate=0,aa=0;
  8. unsigned int time[6]={0};


  9. /***********************1ms延時函數*****************************/
  10. void delay_1ms(uint q)
  11. {
  12.         uint i,j;
  13.         for(i=0;i<q;i++)
  14.                 for(j=0;j<120;j++);
  15. }

  16.                                           
  17. /************ 延時函數  *****************/
  18. void delay_uint(uint z)
  19. {
  20.    while(z--);
  21. }


  22. /************ 寫命令函數  *****************/
  23. void write_com(uchar com)
  24. {

  25.    P0=com;
  26.    rw=0;
  27.    rs=0;
  28.    delay_uint(25);
  29.    e=1;
  30.    delay_uint(50);
  31.    e=0;
  32. }
  33. /************ 寫數據函數  *****************/
  34. void write_data(uchar dat)
  35. {

  36.    P0=dat;;
  37.    rw=0;
  38.    rs=1;
  39.    delay_uint(25);
  40.    e=1;
  41.    delay_uint(50);
  42.    e=0;
  43. }

  44. /**********************************************************
  45. *函數名: addr_12864
  46. *功能:寫地址
  47. *說明:寫漢字時要寫個地址
  48. *輸入:無
  49. *返回:無
  50. **********************************************************/
  51. void addr_12864(uchar hang,uchar lie)          //地址轉換
  52. {
  53.         uchar address;
  54.         switch(hang)
  55.         {
  56.                 case 1: address=0x80 + lie ;
  57.                                 break;
  58.                 case 2: address=0x90 + lie ;
  59.                                 break;
  60.                 case 3: address=0x88 + lie ;
  61.                                 break;
  62.                 case 4: address=0x98 + lie ;
  63.                                 break;
  64.                 default :
  65.                                 break;
  66.         }        
  67.         write_com(address);
  68. }

  69. /***********************lcd1602上顯示兩位十進制數************************/
  70. void write_sfm3(uchar hang,uchar add,uint date)
  71. {
  72.         addr_12864(hang,add);         
  73.         write_data(':');
  74.         write_data(0x30+date/100%10);
  75.         write_data(0x30+date/10%10);
  76.         write_data(0x30+date%10);        
  77. }


  78. /**********************************************************
  79. *函數名: write_string
  80. *功能:在12864上顯示字符數據
  81. *說明:
  82. *輸入:無
  83. *返回:無
  84. **********************************************************/

  85. void write_string(uchar hang,uchar lie,uchar *p)
  86. {
  87.         addr_12864(hang,lie);          //地址轉換
  88.         while(*p != '\0')
  89.         {
  90.                 write_data(*p);
  91.                 p++;
  92.                 delay_uint(50);
  93.         }
  94. }

  95. /********************************************************************
  96. * 名稱 : init_12864()
  97. * 功能 : 初始化函數
  98. * 輸入 : cmdcode
  99. * 輸出 : 無
  100. ***********************************************************************/
  101. void init_12864()
  102. {  
  103.     write_com(0x30);
  104.     write_com(0x0c);
  105.     write_com(0x01);
  106.     delay_uint(5000);
  107.         write_string(1,0,"               ");
  108.         write_string(2,0," 心率:000/min  ");
  109.         write_string(3,0,"               ");
  110.         write_string(4,0,"               ");
  111. }

  112. /*************定時器0初始化程序***************/
  113. void time_init()         
  114. {
  115.         EA   = 1;                   //開總中斷
  116.         TMOD = 0X01;          //定時器0、定時器1工作方式1
  117.         ET0  = 1;                  //開定時器0中斷
  118.         TR0  = 1;                  //允許定時器0定時
  119. }


  120. /***********外部中斷0初始化程序****************/
  121. void init_int0()          //外部中斷0初始化程序
  122. {
  123.         EX0=1;                          //允許外部中斷0中斷
  124.         EA=1;                           //開總中斷
  125.         IT0 = 1;                   //外部中斷0負跳變中斷
  126. }

  127. /****************主函數***************/
  128. void main()
  129. {        
  130.         init_12864();     //12864初始化        
  131.         time_init();      //初始化定時器
  132.         init_int0();          //外部中斷0初始化程序
  133.         while(1)
  134.         {                        
  135.                 if(displayOK==0)//如果顯示關
  136.                 {
  137.                          rate = 0;
  138.                 }
  139.                 else//如果顯示開
  140.                 {
  141.                         rate=60000/(time[1]/5+time[2]/5+time[3]/5+time[4]/5+time[5]/5);
  142.                 }
  143.                 write_sfm3(2,5,rate);

  144.                 delay_1ms(300);
  145.         }
  146. }

  147. void int0() interrupt 0
  148. {
  149.         if(timecount<8)   //當連續兩次檢測時間間隔小于8*50ms=400ms不處理
  150.         {
  151.                         TR0=1;//開定時器
  152.         }
  153.         else
  154.         {
  155.                 time[i]=timecount*50+TH0+TL0;//算出間隔時間
  156.                 TH0 = 0x3c;
  157.                 TL0 = 0xb0;     // 50ms         12M
  158.                 timecount=0;//50ms計數清零
  159.                 i++;
  160.                 if(i==6)//記錄到超過等于6次時間
  161.                 {
  162.                         i=1;//計數從1開始
  163.                         displayOK=1;    //測得5次開始顯示?
  164.                 }                                                               
  165.         }
  166. }

  167. /*************定時器0中斷服務程序***************/
  168. void time0_int() interrupt 1
  169. {        
  170.         TH0 = 0x3c;
  171.         TL0 = 0xb0;     // 50ms         12M
  172.         timecount++;//每50ms一次計數
  173.         if(timecount>25)     //當超過25*50ms=1.5s沒有檢測到信號停止顯示
  174.         {
  175.                         i=0;//數據個數清零
  176.                         timecount=0;//50ms計數清零
  177.                         displayOK=0;//顯示關
  178.                         TR0=0;//定時器關
  179.                         TH0 = 0x3c;
  180.                         TL0 = 0xb0;     // 50ms         12M
  181.         }
  182. }
復制代碼

所有資料51hei提供下載:
單片機脈搏計 12864.7z (1.45 MB, 下載次數: 81)

評分

參與人數 1黑幣 +50 收起 理由
admin + 50 共享資料的黑幣獎勵!

查看全部評分

回復

使用道具 舉報

ID:1144925 發表于 2025-3-6 16:07 | 顯示全部樓層
電源模塊的p1是什么元件啊
回復

使用道具 舉報

ID:136013 發表于 2025-3-7 12:15 | 顯示全部樓層
safoji 發表于 2025-3-6 16:07
電源模塊的p1是什么元件啊

DC座唄
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 精品一区二区三区av | 91精品国产乱码久久久久久久久 | 欧美精品成人一区二区三区四区 | 国产精品一区二区精品 | 久久综合久久久 | 粉嫩一区二区三区四区公司1 | 福利社午夜影院 | 亚洲国产精品一区二区第一页 | 人人看人人爽 | 围产精品久久久久久久 | av影音在线 | 国产精品久久毛片av大全日韩 | www.成人免费视频 | 欧美精品一区二区在线观看 | 亚洲第一成人av | 国产高清久久 | 日本免费在线 | 亚洲综合色网站 | 久久久123 | 91精品国产综合久久久久久漫画 | 成人久久久久久久久 | 一区二区三区亚洲 | 国产在线观看一区二区 | 国产精品福利久久久 | 亚洲激情综合网 | 日韩不卡在线 | 成人黄色电影免费 | 91免费观看在线 | 丁香久久 | 在线资源视频 | 精品在线一区 | 日韩精品成人网 | 欧美精品久久久久 | 久久久精品一区二区三区四季av | 羞羞视频在线观免费观看 | 粉嫩一区二区三区国产精品 | 日韩欧美国产精品 | 久久成人免费视频 | 欧美激情亚洲 | 久草视频在 | 国产乱码高清区二区三区在线 |