完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
扫一扫,分享给好友
本帖最后由 yds0706ygw 于 2012-5-26 01:00 编辑
这是个LED小灯控制的程序 硬件使用的是人体红外感应模块、光敏电阻、ADC0832 求大虾帮忙写出来 这是我的毕业设计 谢了 啊............... #include #define uchar unsigned char #define uint unsigned int #define NUM_tiMER 60 //超时时间 #include"ADC0832.H" 调试的时候出错了 ***it SENSOR_IN=P1^0; /*******************按键端口定义******************/ ***it key1=P3^5; // 手动/自动切换 ***it key2=P3^7; // 手动状态下“开” ***it key3=P3^6; // 手动状态下“关” /*******************指示灯端口定义*****************/ ***it LED1=P1^1; //环境光强 ***it LED2=P1^2; //环境较弱 ***it LED3=P1^3; //环境弱 ***it LED4=P1^4; // 自动 ***it LED5=P1^5; // 手动 /*******************蜂鸣器端口定义*****************/ ***it beep=P0^0; /******************标示位定义**********************/ bit HOLD_SET=0; // 自动/手动控制标示位 “0”自动 “1”手动 ucharNO_NUM_FLOG=0; // 亮灯个数标示位 “0” 全灭 “1”亮两组(即四个) “2” 全亮 ucharnum=0,num1=0,num2=0; bit BEEP_FLOG=0; //蜂鸣器报警标示位 uchar Light_Ray_Flog=0; //光线强弱标示位 bit Light_Flog=1; /******************A/D转换模块**********************/ ***it ADC0832_CS=P0^7; ***it ADC0832_CLK=P0^6; ***it ADC0832_DIO=P0^5; unsigned int A_D() { unsigned char i,dat; ADC0832_CS=1; //一个转换周期开始 ADC0832_CLK=0; //为第一个脉冲作准备 ADC0832_CS=0; //CS置0,片选有效 ADC0832_DIO=1; //DIO置1,规定的起始信号 ADC0832_CLK=1; //第一个脉冲 ADC0832_CLK=0; //第一个脉冲的下降沿,此前DIO必须是高电平 ADC0832_DIO=1; //DIO置1,通道选择信号 ADC0832_CLK=1; //第二个脉冲,第2、3个脉冲下沉之前,DI必须跟别输入两位数据用于选择通道,这里选通道CH0 ADC0832_CLK=0; //第二个脉冲下降沿 ADC0832_DIO=0; //DI置0,选择通道0 ADC0832_CLK=1; //第三个脉冲 ADC0832_CLK=0; //第三个脉冲下降沿 ADC0832_DIO=1; //第三个脉冲下沉之后,输入端DIO失去作用,应置1 ADC0832_CLK=1; //第四个脉冲 for(i=0;i<8;i++) //高位在前 { ADC0832_CLK=1; //第四个脉冲 ADC0832_CLK=0; dat<<=1; //将下面储存的低位数据向右移 dat|=(unsigned char)ADC0832_DIO; //将输出数据DIO通过或运算储存在dat最低位 } ADC0832_CS=1; //片选无效 return dat; //将读书的数据返回 } /**********************延时子程序********************/ void Delay_1ms(uintxms) { uint i,j; for(i=xms;i>0;i--) for(j=122;j>0;j--); } #include"KEY.H" 调试的时候出错了 /********************人体红外检测子程序*****************/ void INFRARED_DETE() { if(SENSOR_IN==1) { Delay_1ms(5); if(SENSOR_IN==1) { num1=0; Light_Flog=0; BEEP_FLOG=0; } } } /********************按键控制程序*****************/ void key() { if(key1==0) // 手动/自动切换按键 { Delay_1ms(5); if(key1==0) { HOLD_SET=~HOLD_SET; while(!key1); } } if(HOLD_SET==1) // 满足手动设置条件时起作用 { if(key2==0) // “开” 按键 { Delay_1ms(5); if(key2==0) { NO_NUM_FLOG++; num1=0; if(NO_NUM_FLOG==3) NO_NUM_FLOG=1; while(!key2); } } if(key3==0) // “关” 按键 { Delay_1ms(5); if(key3==0) { NO_NUM_FLOG=0; while(!key3); } } } } /******************指示灯子程序*************/ voidLED() { if(HOLD_SET) //手动控制 {LED4=1;LED5=0;} else //自动控制 {LED4=0;LED5=1;} if(Light_Ray_Flog==0) //强 { LED1=0; LED2=1; LED3=1; } if(Light_Ray_Flog==1) //较弱 { LED1=1; LED2=0; LED3=1; } if(Light_Ray_Flog==2) //弱 { LED1=1; LED2=1; LED3=0; } } /******************亮灯子程序*************/ void LIGHT() { if(HOLD_SET) //手动模式 { if(NO_NUM_FLOG==1) //亮一半的灯 P2=0x33; if(NO_NUM_FLOG==2) //全亮 P2=0x00; if(NO_NUM_FLOG==0) //全灭 P2=0xff; num2=0; } else //自动模式 { if(!Light_Flog) { if(num2==60) { if(Light_Ray_Flog==1) //亮一半的灯 P2=0x33; if(Light_Ray_Flog==2) //全亮 P2=0x00; if(Light_Ray_Flog==0) //全灭 P2=0xff; } } else { P2=0xff; num2=0; } } } /*******************报警子程序**************/ void BEEP() { if(HOLD_SET&&NO_NUM_FLOG) //手动控制 { if(BEEP_FLOG) { beep=0; Delay_1ms(500); beep=1; Delay_1ms(500); } else beep=1; } } /************************光线检测子程序*************/ void Light_Ray() { uint AD_val; AD_val=A_D(); if(AD_val>230) //弱 { Light_Ray_Flog=2; } else if(AD_val<80) //强 { Light_Ray_Flog=0; } else //较弱 Light_Ray_Flog=1; } /*******************主程序****************/ void main() { SENSOR_IN=1; key1=1; key2=1; key3=1; LED1=1; LED2=1; LED3=1; LED4=1; LED5=1; beep=1; TMOD=0x01; TH0=(65536-50000)/256; TL0=(65536-50000)%256; EA=1; ET0=1; TR0=1; while(1) { INFRARED_DETE(); key(); LED(); BEEP(); LIGHT(); Light_Ray(); } } void T0_time()interrupt 1 { TH0=(65536-50000)/256; TL0=(65536-50000)%256; num++; if(SENSOR_IN==1&&num2<60) num2++; if(num==20) { num=0; num1++; if(num1==NUM_TIMER/2) BEEP_FLOG=1; if(num1>=NUM_TIMER) { num1=0; NO_NUM_FLOG=0; BEEP_FLOG=0; Light_Flog=1; } } }
|
|
相关推荐
|
|
只有小组成员才能发言,加入小组>>
请问一个迭代法图形二值化的程序代码把宽改成240之后整个屏幕不显示是什么原因?
2644 浏览 0 评论
2632 浏览 1 评论
1869 浏览 1 评论
2026 浏览 2 评论
2587 浏览 2 评论
679浏览 0评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-25 01:07 , Processed in 0.553873 second(s), Total 75, Slave 59 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号