|
第一次發(fā)帖紀(jì)念一下 作為一個(gè)初學(xué)者,今天查閱了網(wǎng)上的資料,用用傳統(tǒng)20引腳12864屏幕制作了一款心率測試儀。
傳感器用的是檢測血液上的脈搏轉(zhuǎn)換成心率,在資料里面有C語言程序、板子所用的元器件的清單等。非常適合初學(xué)者買回來自己制作和練習(xí)。
運(yùn)用的芯片是89C52單片機(jī)。
資料里面包含了AD教學(xué)、單片機(jī)基本原理教學(xué)、protel基礎(chǔ)教學(xué)等。也可以說是一個(gè)學(xué)習(xí)資料庫。
文檔里面都是網(wǎng)上資料,在完成1602屏幕后,可以運(yùn)用12864去嘗試做。
資料里面是傳統(tǒng)20引腳的12864,作為初學(xué)者的我,首先碰到的是普中開發(fā)板的16個(gè)引腳的12864,里面資料少之又少,僅有例程。。。
不過在其他帖子上也有介紹這塊12864的,可以先在此資料里面學(xué)習(xí)傳統(tǒng)的20引腳的使用,之后再把mini12864屏幕運(yùn)用起來!!
希望這份資料能幫助到大家!!!!
使用時(shí)把右手食指指肚放在st188反射式紅外傳感器上,放置合適時(shí)會(huì)看到指示燈隨心跳同時(shí)閃動(dòng),如果沒有閃爍請適當(dāng)調(diào)節(jié)手指壓力,調(diào)節(jié)完后在測試過程中手指壓力不要變,保持穩(wěn)定,當(dāng)指示燈有規(guī)律閃爍時(shí)表示信號(hào)正確。當(dāng)單片機(jī)檢測到大約第五次信號(hào)時(shí)開始顯示這五次信號(hào)算出的平均心率。當(dāng)超過大約3秒沒有檢測到信號(hào),清除心率。
如果手指抖動(dòng)或者不穩(wěn)定會(huì)看到指示燈亂閃,這樣測得的數(shù)據(jù)不準(zhǔn),在測試過程中保持穩(wěn)定!
st188傳感器引腳圖:
0.png (38.62 KB, 下載次數(shù): 129)
下載附件
2018-5-7 23:43 上傳
電路原理圖如下:
截圖格式 雙擊可以打.png (77.35 KB, 下載次數(shù): 113)
下載附件
2018-5-7 23:43 上傳
論文內(nèi)容截圖(附件可下載完整版)
0.png (27.98 KB, 下載次數(shù): 101)
下載附件
2018-5-7 23:44 上傳
單片機(jī)源程序如下:
- #include <reg52.h> //調(diào)用單片機(jī)頭文件
- #define uchar unsigned char //無符號(hào)字符型 宏定義 變量范圍0~255
- #define uint unsigned int //無符號(hào)整型 宏定義 變量范圍0~65535
- sbit rs=P2^5; //寄存器選擇信號(hào) H:數(shù)據(jù)寄存器 L:指令寄存器
- sbit rw=P2^6; //寄存器選擇信號(hào) H:數(shù)據(jù)寄存器 L:指令寄存器
- sbit e =P2^7; //片選信號(hào) 下降沿觸發(fā)
- unsigned char i=0,timecount=0,displayOK=0,rate=0,aa=0;
- unsigned int time[6]={0};
- /***********************1ms延時(shí)函數(shù)*****************************/
- void delay_1ms(uint q)
- {
- uint i,j;
- for(i=0;i<q;i++)
- for(j=0;j<120;j++);
- }
-
- /************ 延時(shí)函數(shù) *****************/
- void delay_uint(uint z)
- {
- while(z--);
- }
- /************ 寫命令函數(shù) *****************/
- void write_com(uchar com)
- {
-
- P0=com;
- rw=0;
- rs=0;
- delay_uint(25);
- e=1;
- delay_uint(50);
- e=0;
- }
- /************ 寫數(shù)據(jù)函數(shù) *****************/
- void write_data(uchar dat)
- {
- P0=dat;;
- rw=0;
- rs=1;
- delay_uint(25);
- e=1;
- delay_uint(50);
- e=0;
- }
- /**********************************************************
- *函數(shù)名: addr_12864
- *功能:寫地址
- *說明:寫漢字時(shí)要寫個(gè)地址
- *輸入:無
- *返回:無
- **********************************************************/
- void addr_12864(uchar hang,uchar lie) //地址轉(zhuǎn)換
- {
- uchar address;
- switch(hang)
- {
- case 1: address=0x80 + lie ;
- break;
- case 2: address=0x90 + lie ;
- break;
- case 3: address=0x88 + lie ;
- break;
- case 4: address=0x98 + lie ;
- break;
- default :
- break;
- }
- write_com(address);
- }
- /***********************lcd1602上顯示兩位十進(jìn)制數(shù)************************/
- void write_sfm3(uchar hang,uchar add,uint date)
- {
- addr_12864(hang,add);
- write_data(':');
- write_data(0x30+date/100%10);
- write_data(0x30+date/10%10);
- write_data(0x30+date%10);
- }
- /**********************************************************
- *函數(shù)名: write_string
- *功能:在12864上顯示字符數(shù)據(jù)
- *說明:
- *輸入:無
- *返回:無
- **********************************************************/
- void write_string(uchar hang,uchar lie,uchar *p)
- {
- addr_12864(hang,lie); //地址轉(zhuǎn)換
- while(*p != '\0')
- {
- write_data(*p);
- p++;
- delay_uint(50);
- }
- }
- /********************************************************************
- * 名稱 : init_12864()
- * 功能 : 初始化函數(shù)
- * 輸入 : cmdcode
- * 輸出 : 無
- ***********************************************************************/
- void init_12864()
- {
- write_com(0x30);
- write_com(0x0c);
- write_com(0x01);
- delay_uint(5000);
- write_string(1,0," ");
- write_string(2,0," 心率:000/min ");
- write_string(3,0," ");
- write_string(4,0," ");
- }
- /*************定時(shí)器0初始化程序***************/
- void time_init()
- {
- EA = 1; //開總中斷
- TMOD = 0X01; //定時(shí)器0、定時(shí)器1工作方式1
- ET0 = 1; //開定時(shí)器0中斷
- TR0 = 1; //允許定時(shí)器0定時(shí)
- }
- /***********外部中斷0初始化程序****************/
- void init_int0() //外部中斷0初始化程序
- {
- EX0=1; //允許外部中斷0中斷
- EA=1; //開總中斷
- IT0 = 1; //外部中斷0負(fù)跳變中斷
- }
- /****************主函數(shù)***************/
- void main()
- {
- init_12864(); //12864初始化
- time_init(); //初始化定時(shí)器
- init_int0(); //外部中斷0初始化程序
- while(1)
- {
- if(displayOK==0)//如果顯示關(guān)
- {
- rate = 0;
- }
- else//如果顯示開
- {
- rate=60000/(time[1]/5+time[2]/5+time[3]/5+time[4]/5+time[5]/5);
- }
- write_sfm3(2,5,rate);
- delay_1ms(300);
- }
- }
- void int0() interrupt 0
- {
- if(timecount<8) //當(dāng)連續(xù)兩次檢測時(shí)間間隔小于8*50ms=400ms不處理
- {
- TR0=1;//開定時(shí)器
- }
- else
- {
- time[i]=timecount*50+TH0+TL0;//算出間隔時(shí)間
- TH0 = 0x3c;
- TL0 = 0xb0; // 50ms 12M
- timecount=0;//50ms計(jì)數(shù)清零
- i++;
- if(i==6)//記錄到超過等于6次時(shí)間
- {
- i=1;//計(jì)數(shù)從1開始
- displayOK=1; //測得5次開始顯示?
- }
- }
- }
- /*************定時(shí)器0中斷服務(wù)程序***************/
- void time0_int() interrupt 1
- {
- TH0 = 0x3c;
- TL0 = 0xb0; // 50ms 12M
- timecount++;//每50ms一次計(jì)數(shù)
- if(timecount>25) //當(dāng)超過25*50ms=1.5s沒有檢測到信號(hào)停止顯示
- {
- i=0;//數(shù)據(jù)個(gè)數(shù)清零
- timecount=0;//50ms計(jì)數(shù)清零
- displayOK=0;//顯示關(guān)
- TR0=0;//定時(shí)器關(guān)
- TH0 = 0x3c;
- TL0 = 0xb0; // 50ms 12M
- }
- }
- ……………………
- …………限于本文篇幅 余下代碼請從51黑下載附件…………
復(fù)制代碼
0.png (65.53 KB, 下載次數(shù): 127)
下載附件
2018-5-7 23:42 上傳
所有資料51hei提供下載:
##單片機(jī)脈搏計(jì) 12864.zip
(5.9 MB, 下載次數(shù): 686)
2018-5-7 21:29 上傳
點(diǎn)擊文件名下載附件
資料全在里面 下載積分: 黑幣 -5
|
評(píng)分
-
查看全部評(píng)分
|