智能控制风扇源程序(c语⾔)
/*********************************************************************** touwenjian.h
***********************************************************************/ typedef unsigned char byte; typedef unsigned int word;
//以下管脚配置
//ds18b20部分
sbit DQ =P3^4;
//显⽰部分
sbit DB=P2^0;
sbit CP=P2^1;
//发光显⽰部分
sbit LED_dingshi=P0^0;
sbit LED_shoudong =P0^1;
sbit LED_zidong=P0^2;
sbit LED_kuai =P0^3;
sbit LED_zhong =P0^4;
sbit LED_man =P0^5;
//键盘定义部分
#define wujian 0x3f
sbit KEY1=P1^0 ; //状态转换/启动
sbit KEY2=P1^1 ; //+10 / 1
sbit KEY3=P1^2 ; //-10 / 2
sbit KEY4=P1^3 ; // 3
sbit KEY5=P1^4 ; // 0 确定
//继电器控制部分
sbit JDQ1=P2^4; //0表⽰开通,1表⽰关断
sbit JDQ2=P2^5;
sbit JDQ3=P2^6;
//蜂鸣器部分
sbit call=P2^7; //低电平鸣叫
/*********************************************************************** ds18b20.c
***********************************************************************/
#include
#include"touwenjian.h"
/
***************************************************** 延时⼦程序
*****************************************************/ extern void delay(word useconds)
{
for(;useconds>0;useconds--);
}
/*****************************************************
复位⼦程序
******************************************************/ static byte ow_reset(void)
{
byte presence;
EA=0;
DQ = 0; // pull DQ line low
delay(45); // leave it low for 480us //551us
DQ = 1; // allow line to return high
delay(4);// wait for presence //61us
presence = DQ; // get presence signal
delay(40); // wait for end of timeslot //491us
EA=1;
return(presence); // presence signal returned
} // 0=presence, 1 = no part
/******************************************************* 从1-wire 总线上读取⼀个字节⼦程序********************************************************/ static byte read_byte(void)
{
byte i;
byte value = 0;
EA=0;
for (i=8;i>0;i--)
{
value>>=1;
DQ = 0; // pull DQ low to start timeslot
DQ = 1; // then return high
{unsigned char i;
for(i=0;i<2;i++);}//11us
if(DQ)value|=0x80;
delay(6);// wait for rest of timeslot
}
EA=1;
return(value);
}
/******************************************************** 向1-WIRE 总线上写⼀个字节*********************************************************/ static void write_byte(char val) {
byte i;
EA=0;
for (i=8; i>0; i--) // writes byte, one bit at a time
{
DQ = 0; // pull DQ low to start timeslot
DQ=0;
DQ = val&0x01; //6US
delay(5);// hold value for remainder of timeslot //74us
身份证制作DQ = 1;
val=val>>1;
}
EA=1;
delay(5);
}
/******************************************************* 读取温度
*******************************************************/ word Read_Temperature(void) {
union{
byte c[2];
word x;
}temp;
ow_reset();
write_byte(0xCC); // Skip ROM
write_byte(0xBE); // Read Scratch Pad
temp.c[1]=read_byte();
公司取消年终奖请员工去新疆temp.c[0]=read_byte();
陈丹婷ow_reset();
write_byte(0xCC); //Skip ROM
write_byte(0x44); // Start Conversion
return temp.x;
}
/***************************************************************
求解温度
***************************************************************/
extern byte Real_Tem(void)
{
word wen;
wen=Read_Temperature();
return((wen>>4)&0x00ff);
}
/*********************************************************************** Main.c ***********************************************************************/ #include #include"touwenjian.h"
//数据区
#define time_default 41
byte dingshi_time=time_default;//存放定时时间''''''
bit flag_dingshi=0; //0表⽰没有定时
word dingshi_jishu3=1000;//1000*60=1分钟
//
bit flag_dingshi_delay=0;//1表⽰有
byte dingshi_delay=100;
//
#define hwx_delay_const 3 //⼈体感应延时时间
byte hwx_delay=hwx_delay_const;//⽤于保存红外线触发延长时间word hwx_jishu1=0;
//
byte wendu=0;//⽤于存放温度值''''''
//
#define low_wen 18
#define mid_wen 20
#define hig_wen 24
#define vhi_wen 28
//
byte time_stor=100; //存储主观时间//触发显⽰
byte wendu_stor=low_wen;//存储主观温度//触发显⽰
西班牙商务签证//
enum station0{zidong,dingshi,shoudong,weak}state;
//函数说明区
extern byte Real_Tem(void );
extern void delay(word useconds);
void mingjiao(void);
void display(byte input,bit kkl);
void auto_speed(void);
void weak_default(void);
/******************************************************************* 主程序*******************************************************************/
void main()
{
//定时器0⽤于键盘扫描
TMOD=0x01|TMOD;//定时器0的1⽅式
TH0=0xd8;TL0=0xf0; //定时器0初始化10ms扫描⼀次
//定时器1⽤于显⽰
TMOD=0x10|TMOD;//定时器1的1⽅式
TH1=0x15;TL1=0xA0; //定时器1初始化60ms中断⼀次
//外部中断
TCON=TCON|0x01;//外部中断0都下降沿触发
//以下为开启部分
争奇斗艳IP=0X01; //两个定时器同等优先级
汉灵帝IE=0x8b; //开启定时器0,1,外部中断0中断
//
while(Real_Tem()==85);
auto_speed();
LED_zidong=0; //刚开始为⾃动⽅式
P1=P1|0X7C; //拉⾼五个键盘
wendu_stor=100; //两个不可能值//⽤于启动显⽰
time_stor=100; //两个不可能值//⽤于启动显⽰
//
TR0=1; //开启定时器0
TR1=1;
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论