紅外點滴輸液報警器-程序_第1頁
紅外點滴輸液報警器-程序_第2頁
紅外點滴輸液報警器-程序_第3頁
紅外點滴輸液報警器-程序_第4頁
紅外點滴輸液報警器-程序_第5頁
已閱讀5頁,還剩7頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領

文檔簡介

1、#include <REG52.H>#include <ABSACC.H>/* 宏定義 8255地址*/#define c8255 XBYTE0xB000 /* 1 0 1 1 */#define c8255a XBYTE0x8000 /* 1 0 0 0 */#define c8255b XBYTE0x9000 /* 1 0 0 1 */#define c8255c XBYTE0xA000 /* 1 0 1 0 */#define uchar unsigned char#define uint unsigned int/*18B20*/ sbit DQ=P20; /*

2、 定義全局變量*/uchar fw; /0表示正溫 1表示負溫 sbit y1=P10;sbit y2=P11;sbit y3=P12;sbit y4=P13;sbit y5=P14;sbit y6=P15;sbit y7=P16;sbit y8=P17;uchar code ac="0123456789"uchar code ac1="液滴"uchar code ac2="點滴輸液報警器"/uchar code ac3="斷滴四秒報警"uchar code ac4="用時"uchar code

3、 AC_TABLE=0x80,0x81,0x82,0x83,0x84,0x85,0x86,0x87, /*第一行漢字位置*/0x90,0x91,0x92,0x93,0x94,0x95,0x96,0x97, /*第二行漢字位置*/0x88,0x89,0x8a,0x8b,0x8c,0x8d,0x8e,0x8f, /*第三行漢字位置*/0x98,0x99,0x9a,0x9b,0x9c,0x9d,0x9e,0x9f, /*第四行漢字位置*/;/*1302*/ sbit RST=P23; sbit IO=P22; sbit SCLK=P21; uchar bdata AB; uchar bdata AD

4、; sbit AB0=AB0; sbit AB7=AB7; sbit AD0=AD0; sbit AD7=AD7;/* 定義1302時間數(shù)據(jù)部分*/uchar data time7=0x00,0x00,0x00,0x27,0x04,0x07,0x08; /用于保存從1302中取得的時間數(shù)據(jù)uchar code shuzi=0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x20,0x2e,0x2b,0x2d,0x3a; /空格 . + - :uchar code timeshuzi11=0xb0,0xb1,0xb2,0xb3,0xb4,0xb

5、5,0xb6,0xb7,0xb8,0xb9,0xba;/調時間用大寫的數(shù)字uchar code dz1302=0x8c,0x88,0x86,0x84,0x82; / 內(nèi)部地址年 月 日 時 秒uchar code youbiaodizi=0x90,0x91,0x93,0x94,0x96,0x97,0x8a,0x8b,0x8d,0x8e; /調時間的 游標動態(tài)/* 模塊數(shù)據(jù)定義部分*/void delay(uint b) /延時函數(shù),延時時間為bmsuchar j;while(b-) for(j=0;j<125;j+) /延時1ms ; /*- 8255與液晶接口程序 -*/void KZ

6、(unsigned char i) unsigned char xdata *addr; addr=&c8255; *addr=i; void PA(unsigned char i) unsigned char xdata *addr1; addr1=&c8255a; *addr1=i; void PB(unsigned char i) unsigned char xdata *addr2; addr2=&c8255b; *addr2=i; /*數(shù)據(jù)轉換* BCD轉換為十進制 */turnbcd(unsigned char bcd) unsigned char n_n;

7、 n_n=(bcd&0xf0)/16*10+(bcd&0x0f); return(n_n); /* 十進制轉BCD碼 */turnsjz(unsigned char dd) unsigned char b_c; b_c=(dd/10)*16+(dd-(dd/10)*10); return(b_c); void write_com(unsigned char com) /寫命令到LCD0000 RST E RW RS / 1 1 0 0 delay(5); PB(0xFC); /1100 PA(com); PB(0xFC); /1100 delay(1); PB(0xF8); /

8、1000void write_data(unsigned char dat) /寫數(shù)據(jù)到LCD 0000 / 1 1 0 1 delay(5); PB(0xFD); /1101 PA(dat); PB(0xFD); /1101delay(1);PB(0xF9); /1001 /* a寫數(shù)據(jù)的地址 b 、c為要寫的數(shù)據(jù)數(shù)字(0-9) 顯示0-9功能*/void xianshi(unsigned char a,unsigned char b,unsigned char c) write_com(AC_TABLEa); write_data(shuzib); write_data(shuzic);/

9、*-18B20程序-*/void FW_DS18B20(void) unsigned char x=0; DQ = 1; delay(2); DQ = 0; delay(15); DQ = 1; delay(2); x=DQ; delay(1); /* 讀一個字節(jié)*/ReadOneChar(void)unsigned char i=0;unsigned char dat = 0;for (i=8;i>0;i-) DQ = 0; dat>>=1; DQ = 1; if(DQ) dat|=0x80; delay(4); return(dat);/* 寫一個字節(jié)*/void Wri

10、teOneChar(unsigned char dat) unsigned char i=0; for (i=8; i>0; i-) DQ = 0; DQ = dat&0x01; delay(5); DQ = 1; dat>>=1; /* 該函數(shù)的返回值為得到溫度的 真實值000.0000 */unsigned int read_temperature() unsigned int g; unsigned char l,h; FW_DS18B20(); /初始化復位18B20 WriteOneChar(0xCC); /跳過讀序號列號的操作(書上提供) WriteOne

11、Char(0x44); /開始溫度轉換 delay(1); FW_DS18B20(); /初始化復位18B20 WriteOneChar(0xCC); /跳過讀序號列號的操作(書上提供) WriteOneChar(0xBE); /讀取溫度寄存器等(共可讀9個寄存器) 前兩個就是溫度 l=ReadOneChar(); /讀低字節(jié) h=ReadOneChar(); /讀高字節(jié)(前四個是零表示正溫度 是一表示負溫度) fw=h&0x80; /取出高字節(jié) 該數(shù)據(jù)為符號位 (0表示 正數(shù) 1表示負數(shù)) g=turnbcd(0x0f&h)*256+l;return(g); /*讀出溫度加顯

12、示精確到小數(shù)點后一位溫度值小于99度進行溫度的正負判斷*/void wendu(void) unsigned int y; uchar h; uchar n; uchar v; h=0; n=0; v=0; y=read_temperature(); y=y*0.625; /40959.375 y=y%10000; /0959 y=y%1000; /959 h=y/100; /9 y=y%100; /59 n=y/10; /5 v=y%10; /9 if(fw=0) xianshi(12,10,12); /表示溫度的 正 負 植 else xianshi(12,10,13); xianshi(

13、13,h,n); /溫度高兩位 xianshi(14,11,v);/溫度小數(shù)點 和 后一位 write_com(0x97); /溫度 標號 write_data(0xa1); write_data(0xe6); /* 寫數(shù)據(jù) 低位開始 */ void inputbyte(unsigned char a_a) unsigned char b_b; AB=a_a; for(b_b=8; b_b>0; b_b-) IO = AB0; SCLK = 1; SCLK = 0; AB = AB >> 1; /* 讀取字節(jié)有返回值*/outputbyte() unsigned char b

14、_b; for(b_b=7; b_b>0; b_b-) AD7=IO; SCLK = 1; SCLK = 0; AD = AD>>1; return(AD); /*往1302里寫數(shù)據(jù)參數(shù)分別為 地址 和 數(shù)據(jù)*/void w1302(unsigned char add,unsigned char dat) RST=0; SCLK=0; RST=1; inputbyte(add); inputbyte(dat); SCLK = 1; RST = 0; /*設置初始時間 秒 分 時 日 月 星期 年*/void set1302() unsigned char q_q=0;unsi

15、gned char b_b; unsigned char add = 0x80; w1302(0x8e,0x00); for(b_b =7; b_b>0; b_b-) w1302(add,timeq_q); add +=2; q_q+; /*讀取1302某地址的數(shù)據(jù) 返回值為該地址的數(shù)據(jù)*/unsigned char r1302(unsigned char add) unsigned char ucdata; RST=0; SCLK=0; RST=1; inputbyte(add); ucdata = outputbyte(); SCLK = 1; RST = 0; return(ucd

16、ata);/*保存當前時間格式為: 秒 分 時 日 月 星期 年 */void get1302() unsigned char b_b; unsigned char ducaddr = 0x81; for (b_b=0; b_b<7; b_b+) /讀數(shù)據(jù) 連續(xù)讀數(shù) 放到數(shù)組里 timeb_b=turnbcd(r1302(ducaddr); /格式為: 秒 分 時 日 月 星期 年 ducaddr += 2; /*-調時間部分-*/* 寫全寬數(shù)字字體*/void xianshishuzi(unsigned char a,unsigned char b) /顯示功能 a寫數(shù)據(jù)的地址 b為要

17、寫的數(shù)據(jù)數(shù)字(0-9) write_com(AC_TABLEa); /給一個地址寫 write_data(0xa3); write_data(shuzib);/* 時間顯示功能*/void timexianshi(void) /顯示時間 為固定 get1302();xianshi(20,time2/10,time2%10);/時xianshi(21,14,time1/10); /分xianshi(22,time1%10,14); /分xianshi(23,time0/10,time0%10);/秒/*寫漢字功能a地址和要寫第c個數(shù)字就可以連續(xù)寫完 b個數(shù)*/void Inhanzi(uchar

18、 *str,uchar z,uchar d,uchar w) write_com(0x30); while(w!=0) write_com(AC_TABLEz); write_data(strd); d+; write_data(strd); d+; z+; w-; /*t0中斷*/ uchar counter;void time0() interrupt 1 using 1 /定時器中斷0,采用第一組通用工作寄存器 counter=counter+1; /中斷次數(shù)寄存器加1TH0=(65535-50000)/256; /定時100ms,裝入計數(shù)初值TL0=(65535-50000)%256;

19、INT1=0; if(counter=80) INT1=1; while(1); counter=0; INT1=0; /*-初始化部分-*/void main(void) uchar i=0,k=0,a,b,c,d,e,f; delay(100); INT1=0; TMOD=0x01; /定時器0為工作方式1 /啟動定時器0 ET0=1; /開中斷 PT0=1; /設置高優(yōu)先級 TH0=(65535-50000)/256; /定時100ms,裝入計數(shù)初值 TL0=(65535-50000)%256; IT0=1; EX0=0; KZ(0x88); /8255初始化 delay(1); PB(0x07); delay(6); PB(0x0f); delay(1); write_com(0x30); /8BitMCU,基本指令集合 write_com(0x03); /AC歸0,不改變DDRAM內(nèi)容 write_com(0x0c); /顯示ON,游標OFF,游標位反白OFF write_com(0x01); /清屏,AC歸0 write_com(0x06); /寫入時,游標右移動 /Inhanzi(ac3,9,0,6); I

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論