51单片机课程设计 - 智能电风扇(4)

2019-01-07 14:32

{

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{

14

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\//数据区

#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 //人体感应延时时间

15

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; //两个定时器同等优先级

16

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; while(1) {

wendu=Real_Tem(); } }

/***********************************************************************************

定时器0中断服务子程序 功能:进行键盘处理

说明:键盘输入为P1.0到P1.4

***********************************************************************************/

void time0(void) interrupt 1 {

byte jianpan; TH0=0xd8;TL0=0xf0; jianpan = P1 & wujian;

if(jianpan != wujian) //如果还有键盘值提取键盘值 {

delay(500);//延时消抖

jianpan = P1 & wujian;

if(jianpan==wujian)goto time_out; switch(state) {

case dingshi: if(KEY1==0)//状态转换时做些相应的处理

17

{

state=shoudong; LED_shoudong=0; flag_dingshi_delay=0;dingshi_delay=100;

time_stor=100;wendu_stor=100;//触发 mingjiao(); while(KEY1==0); }

{

if(dingshi_time<90) {dingshi_time+=10;} dingshi_delay=100;// mingjiao(); while(KEY2==0); }

else if(KEY3==0)//减分 {

if(dingshi_time>10) {dingshi_time-=10;} dingshi_delay=100;// mingjiao(); while(KEY3==0); }

else if(KEY4==0)//定时与否

{

flag_dingshi=~flag_dingshi; if(flag_dingshi==1){LED_dingshi=0;} else {LED_dingshi=1;dingshi_jishu3=1000;} dingshi_delay=100;// // mingjiao(); while(KEY4==0); }

else if(KEY5==0) {

weak_default(); mingjiao();

18

else if(KEY2==0)//加分


51单片机课程设计 - 智能电风扇(4).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:人教版初一英语下册知识点总结

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: