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

 找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開(kāi)始

搜索
查看: 1994|回復(fù): 3
打印 上一主題 下一主題
收起左側(cè)

基于單片機(jī)的脈搏計(jì)程序與電路原理圖設(shè)計(jì)

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:830592 發(fā)表于 2022-11-28 12:18 | 只看該作者 |只看大圖 回帖獎(jiǎng)勵(lì) |倒序?yàn)g覽 |閱讀模式
        本系統(tǒng)由STC89C52、按鍵、LCD1602、光電傳感器、運(yùn)放等構(gòu)成,脈搏測(cè)量的時(shí)候需要人把手輕輕的按在光電傳感器上面,由于人脈搏跳動(dòng)的時(shí)候,血液的透光性不一樣會(huì)導(dǎo)致接收器那邊接收的信號(hào)強(qiáng)弱不一樣,間接的把人脈搏信號(hào)傳回,通過(guò)運(yùn)放對(duì)其進(jìn)行放大、整形后連接到單片機(jī)的IO口,單片機(jī)利用外部中斷對(duì)其進(jìn)行計(jì)數(shù),最終換算成人一分鐘脈搏的跳動(dòng)次數(shù),最終顯示在液晶屏上。
脈搏計(jì)電路原理圖如下:



元件清單:
元件型號(hào)    元件名稱    元件標(biāo)號(hào)    數(shù)量
10uF    電解電容    C1,C4    2
20PF    瓷片電容    C2, C3    2
1uF    電解電容    C5, C6    2
發(fā)光二極管    指示燈    D1    1
LCD1602    液晶    LCD1    1
2K    電阻    R1    1
10K    電阻    R2    1
330歐    電阻    R3, R4, R13    3
20K    電阻    R5, R6    2
10K    電阻    R7, R8    2
56k    電阻    R9    1
6.8K    電阻    R10    1
24K    電阻    R11    1
100K    電阻    R12    1
SW-PB    按鍵    S1    1
STC89C52    單片機(jī)    U1    1
ST188    光電開(kāi)關(guān)    U2    1
LM358    放大器    U3    1
12M    晶振    Y1    1

制作出來(lái)的脈搏計(jì)實(shí)物圖如下:

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

  4. sbit rs=P1^0;         //寄存器選擇信號(hào) H:數(shù)據(jù)寄存器          L:指令寄存器
  5. sbit rw=P1^1;         //寄存器選擇信號(hào) H:數(shù)據(jù)寄存器          L:指令寄存器
  6. sbit e =P1^2;         //片選信號(hào)   下降沿觸發(fā)

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


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


  16. /********************************************************************
  17. * 名稱 : delay_uint()
  18. * 功能 : 小延時(shí)。
  19. * 輸入 : 無(wú)
  20. * 輸出 : 無(wú)
  21. ***********************************************************************/
  22. void delay_uint(uint q)
  23. {
  24.         while(q--);
  25. }

  26. /********************************************************************
  27. * 名稱 : write_com(uchar com)
  28. * 功能 : 1602命令函數(shù)
  29. * 輸入 : 輸入的命令值
  30. * 輸出 : 無(wú)
  31. ***********************************************************************/
  32. void write_com(uchar com)
  33. {
  34.         e=0;
  35.         rs=0;
  36.         rw=0;
  37.         P0=com;
  38.         delay_uint(25);
  39.         e=1;
  40.         delay_uint(100);
  41.         e=0;
  42. }

  43. /********************************************************************
  44. * 名稱 : write_data(uchar dat)
  45. * 功能 : 1602寫數(shù)據(jù)函數(shù)
  46. * 輸入 : 需要寫入1602的數(shù)據(jù)
  47. * 輸出 : 無(wú)
  48. ***********************************************************************/
  49. void write_data(uchar dat)
  50. {
  51.         e=0;
  52.         rs=1;
  53.         rw=0;
  54.         P0=dat;
  55.         delay_uint(25);
  56.         e=1;
  57.         delay_uint(100);
  58.         e=0;       
  59. }

  60. /********************************************************************
  61. * 名稱 : write_string(uchar hang,uchar add,uchar *p)
  62. * 功能 : 改變液晶中某位的值,如果要讓第一行,第五個(gè)字符開(kāi)始顯示"ab cd ef" ,調(diào)用該函數(shù)如下
  63.                   write_string(1,5,"ab cd ef;")
  64. * 輸入 : 行,列,需要輸入1602的數(shù)據(jù)
  65. * 輸出 : 無(wú)
  66. ***********************************************************************/
  67. void write_string(uchar hang,uchar add,uchar *p)
  68. {
  69.         if(hang==1)   
  70.                 write_com(0x80+add);
  71.         else
  72.                 write_com(0x80+0x40+add);
  73.         while(1)
  74.         {
  75.                 if(*p == '\0')  break;
  76.                 write_data(*p);
  77.                 p++;
  78.         }       
  79. }

  80. /***********************lcd1602上顯示兩位十進(jìn)制數(shù)************************/
  81. void write_sfm3(uchar hang,uchar add,uint date)
  82. {
  83.         if(hang==1)   
  84.                 write_com(0x80+add);
  85.         else
  86.                 write_com(0x80+0x40+add);
  87.         write_data(0x30+date/100%10);
  88.         write_data(0x30+date/10%10);
  89.         write_data(0x30+date%10);       
  90. }

  91. /***********************lcd1602初始化設(shè)置************************/
  92. void init_1602()
  93. {
  94.         write_com(0x38);        //
  95.         write_com(0x0c);
  96.         write_com(0x06);
  97.         delay_uint(1000);
  98.         write_string(1,0,"   Heart Rate     ");       
  99.         write_string(2,0,"     000/min       ");
  100. }

  101. /*************定時(shí)器0初始化程序***************/
  102. void time_init()          
  103. {
  104.         EA   = 1;                   //開(kāi)總中斷
  105.         TMOD = 0X01;          //定時(shí)器0、定時(shí)器1工作方式1
  106.         ET0  = 1;                  //開(kāi)定時(shí)器0中斷
  107.         TR0  = 1;                  //允許定時(shí)器0定時(shí)
  108. }


  109. /***********外部中斷0初始化程序****************/
  110. void init_int0()          //外部中斷0初始化程序
  111. {
  112.         EX0=1;                          //允許外部中斷0中斷
  113.         EA=1;                           //開(kāi)總中斷
  114.         IT0 = 1;                   //外部中斷0負(fù)跳變中斷
  115. }

  116. /****************主函數(shù)***************/
  117. void main()
  118. {       
  119.         init_1602();                    //1602初始化
  120.         time_init();                    //初始化定時(shí)器
  121.         init_int0();          //外部中斷0初始化程序
  122.         while(1)
  123.         {                       
  124.                 rate=60000/(time[1]+time[2]+time[3]+time[4]+time[5])/5;
  125.                 write_sfm3(2,5,rate);

  126.                 delay_1ms(300);
  127.         }
  128. }

  129. void int0() interrupt 0
  130. {
  131.         time[i]=timecount*50+TH0+TL0;//算出間隔時(shí)間
  132.         timecount=0;//50ms計(jì)數(shù)清零
  133.         i++;
  134.         if(i==6)//記錄到超過(guò)等于6次時(shí)間
  135.         {
  136.                 i=1;//計(jì)數(shù)從1開(kāi)始
  137.         }                                                               
  138. }

  139. /*************定時(shí)器0中斷服務(wù)程序***************/
  140. void time0_int() interrupt 1
  141. {       
  142.         TH0 = 0x3c;
  143.         TL0 = 0xb0;     // 50ms         12M
  144.         timecount++;//每50ms一次計(jì)數(shù)
  145.         if(timecount>25)     //當(dāng)超過(guò)25*50ms=1.5s沒(méi)有檢測(cè)到信號(hào)停止顯示
  146.         {
  147.                         timecount=0;//50ms計(jì)數(shù)清零
  148.                         TR0=0;//定時(shí)器關(guān)
  149.         }
  150. }

復(fù)制代碼

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

使用道具 舉報(bào)

沙發(fā)
ID:1075720 發(fā)表于 2023-5-12 17:12 | 只看該作者
這個(gè)代碼運(yùn)行后,lcd心率顯示不對(duì)
回復(fù)

使用道具 舉報(bào)

板凳
ID:1075720 發(fā)表于 2023-5-12 17:12 | 只看該作者
這個(gè)代碼燒錄后,lcd顯示的心率有問(wèn)題
回復(fù)

使用道具 舉報(bào)

地板
ID:1074754 發(fā)表于 2023-5-19 15:10 | 只看該作者
cq995 發(fā)表于 2023-5-12 17:12
這個(gè)代碼運(yùn)行后,lcd心率顯示不對(duì)

有沒(méi)有仿真圖
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

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

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 91中文在线观看 | 欧美中文字幕一区二区三区亚洲 | 亚洲成人一级片 | 国产成人在线视频免费观看 | av天天看 | 台湾佬成人网 | 欧美三级视频在线观看 | 日韩久久久久久 | 久久久久久久久99精品 | 免费观看黄 | 欧美精品成人一区二区三区四区 | 黑人巨大精品欧美一区二区免费 | 久久久久se| 久久久久亚洲精品中文字幕 | 97碰碰碰 | 日日骚视频 | 中文字幕蜜臀 | 国产一区二区三区四区五区加勒比 | 日本不卡一区二区三区在线观看 | 欧美性猛交 | av黄色免费 | 羞羞的视频在线看 | 中文字幕 在线观看 | 国内自拍偷拍 | 91国自视频 | 正在播放国产精品 | 99精品视频免费观看 | 国产免费一区 | 91丨九色丨国产在线 | www亚洲一区 | 欧美在线国产精品 | 亚洲欧美在线免费观看 | 亚洲视频在线免费观看 | 国产高清在线视频 | 欧美中文字幕一区二区三区亚洲 | 欧美激情精品久久久久 | 精品久久香蕉国产线看观看亚洲 | 日韩美女一区二区三区在线观看 | 午夜精品久久久久久久久久久久久 | 91一区二区 | 亚洲精品视频在线观看免费 |