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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

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

[復制鏈接]
跳轉到指定樓層
樓主
ID:274459 發表于 2021-1-9 20:02 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
內含完整原理圖設計、文檔等


元件清單:

元件型號    元件名稱    元件標號
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 共享資料的黑幣獎勵!

查看全部評分

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

使用道具 舉報

沙發
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 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 天天干天天爱天天爽 | 亚洲性综合网 | 黄色一级在线播放 | 成人精品| 密色视频| 成人字幕网zmw | 九九在线视频 | 91av久久久 | 免费国产视频在线观看 | 亚洲欧美视频一区 | www.jizzjizz| 久久久久九九九女人毛片 | 黄色毛片免费看 | 亚洲综合激情 | 午夜在线电影网 | 黄网站免费在线观看 | aaaa一级毛片 | www.中文字幕.com| 高清视频一区二区三区 | 97avcc| 国产亚洲精品久久久优势 | 久久九九网站 | 国产中文字幕av | 四虎影院在线观看av | 欧美日韩在线观看视频 | 久久成人精品 | 国产精品久久久久免费 | 日韩国产欧美 | 国产精品久久7777777 | 国产综合久久 | 午夜精品久久久久久久星辰影院 | 亚洲成网站 | 欧美在线观看一区 | 亚洲精品一区二区三区中文字幕 | 亚洲一区二区免费视频 | av影音资源| 天天拍天天操 | 国产精品久久久久婷婷二区次 | 99爱在线视频 | 精品一区二区三区在线视频 | 亚洲精品免费视频 |