当前位置:首页 > 基于单片机火灾报警器程序文件
Scl=1; _nop_(); Scl=0; _nop_(); }
/*------------------------------------------------ 非应答IIC总线 ------------------------------------------------*/ void NoAck(void) { Sda=1; _nop_(); Scl=1; _nop_(); Scl=0; _nop_(); }
/*------------------------------------------------ 发送一个字节
------------------------------------------------*/ void Send(unsigned char Data) { uchar BitCounter=8; uchar temp; do { temp=Data; Scl=0; _nop_(); if((temp&0x80)==0x80) Sda=1; else Sda=0; Scl=1; temp=Data<<1; Data=temp; BitCounter--; }
while(BitCounter); Scl=0; }
/*------------------------------------------------ 读入一个字节并返回 ------------------------------------------------*/ unsigned char Read(void) { uchar temp=0; uchar temp1=0; uchar BitCounter=8; Sda=1; do { Scl=0; _nop_(); Scl=1; _nop_(); if(Sda) temp=temp|0x01; else temp=temp&0xfe; if(BitCounter-1) { temp1=temp<<1; temp=temp1; } BitCounter--; } while(BitCounter); return(temp); }
/*------------------------------------------------
写入DA数模转换值 ------------------------------------------------*/ void DAC(unsigned char Data) { Start(); Send(AddWr); //写入芯片地址
Ack();
Send(0x40); //写入控制位,使能DAC输出 Ack(); Send(Data); //写数据 Ack(); Stop(); }
/*------------------------------------------------
读取AD模数转换的值,有返回值 ------------------------------------------------*/ unsigned char ReadADC(unsigned char Chl) {
uchar Data; Start(); //写入芯片地址 Send(AddWr); Ack(); Send(0x40|Chl);//写入选择的通道,本程序只用单端输入,差分部分需要自行添加 //Chl的值分别为0、1、2、3,分别代表1-4通道 Ack(); Start(); Send(AddRd); //读入地址 Ack(); Data=Read(); //读数据 Scl=0; NoAck(); Stop(); return Data; //返回值 }
void yanwuget() //获得烟雾值 {
if(ADFlag) //定时采集输入模拟量 { ADFlag=0; }
ADtemp=ReadADC(3); }
/*DS18B20数据采集*/
void delay(uint count) //延时函数 {
uint i;
while(count) {
i=200; while(i>0) i--;
count--; } }
void Init_Com(void) //串口初始化,波特率9600,方式1 {
TMOD = 0x20; PCON = 0x00; SCON = 0x50; TH1 = 0xFd; TL1 = 0xFd; TR1 = 1; PT1=1; }
void dsreset(void)//发送复位和初始化命令 {
uint i; DS=0; i=103;
while(i>0)i--; DS=1; i=4;
while(i>0)i--; }
bit tmpreadbit(void) //read a bit {
uint i; bit dat;
DS=0;i++; //i++ for delay DS=1;i++;i++; dat=DS;
i=8;while(i>0)i--; return (dat); }
uchar tmpread(void) //read a byte date {
uchar i,j,dat;
共分享92篇相关文档