山 东 省 应 用 物 联 网 设 计 大 赛
//以下为室内自动照明用到的
#define uint unsigned int #define uchar unsigned char
#define led1 P1_0 #define led2 P1_1 #define led3 P1_2 #define led4 P1_3
int inout=0; int count=0; int num=2750;
int ru=0,chu=0,churu=0; //进入室内、出去;
int yx=0; //有效,出入计数有效(防止手臂摆动等多次计数) int ii=0; int js=0;
unsigned char send_buf[2]; unsigned char light=17;
void getGuangM(void) {
P0DIR &= 0x7f; ADCIF = 0; //清EOC标志 ADCH &= 0X00;
37
山 东 省 应 用 物 联 网 设 计 大 赛
//P0.7做ad口 APCFG |= 0X80;
//单次转换,参考电压为电源电压,对P07进行采样 ADCCON3 = 0xb7; //等待转化是否完成
while(!(ADCCON1&0x80)); //送数据的第5个字节AD转换的高位 send_buf[0] = ADCH;
//送数据的第6个字节AD转换的低位 send_buf[1] = ADCL; }
//io--P0及外部中断初始化 void io_init(void) {
//P0中断标志清0 //P0IFG |= 0x00; P0IFG = 0x00;
P0DIR &= ~0x30; //将P0.4 P0.5 设置为输入
//P0.4有上拉、下拉能力 P0INP &= ~0x30; //P0.4和P0.5中断使能 P0IEN |= 0x30;
//P0.4和P0.5,改为上升沿触发 下降沿触发 PICTL &= ~0x01;
38
山 东 省 应 用 物 联 网 设 计 大 赛
//开中断 EA = 1;
//端口P0中断使能 IEN1 |= 0X20;
P0DIR &= ~0x40; //将P0.6 设置为输入 PICTL &= ~0x01; //P0.6 设置为上升沿触发 P0IEN |= 0x40; //P0.6中断使能
P0DIR &= ~0x08; //将P0.3 设置为输入
PICTL &= ~0x01; //P0.3 设置为上升沿触发(实际是整个P0口都设置为上升触发) P0IEN |= 0x08; //P0.3中断使能
P0DIR &= ~0x01; //将P0.0 设置为输入
PICTL &= ~0x01; //P0.0 设置为上升沿触发(实际是整个P0口都设置为上升触发) P0IEN |= 0x01; //P0.0中断使能
P0DIR &= ~0x02; //将P0.1 设置为输入
PICTL &= ~0x01; //P0.1 设置为上升沿触发(实际是整个P0口都设置为上升触发) P0IEN |= 0x02; //P0.1中断使能 }
//io--P1及外部中断初始化-----P1.4-7设置为外部中断 void io_P1_init(void) {
39
山 东 省 应 用 物 联 网 设 计 大 赛
P1SEL &= ~0Xf0; //设置P1.4-7为普通IO口 P1DIR &= ~0Xf0; // 在P1.4-7口,设置为输入模式 P1INP &= ~0xf0; //打开P1.4-7上拉电阻,不影响
//设为输入
//P1DIR|=0x0f; //P1口低4位设置为输出 //P1DIR&=0x0f; //在上面的基础上,高4位设置为输入
//P1中断标志清0 P1IFG &= 0x00; //P1.4--P1.7中断使能 P1IEN |= 0xf0;
//上升沿触发 下降沿触发 PICTL &= ~0x04; //开中断 EA = 1;
//端口P1中断使能 IEN2 |= 0X10; }
/**************************** 延时函数
*****************************/
void Delayms(unsigned int xms) //i=xms 即延时i毫秒 {
40
山 东 省 应 用 物 联 网 设 计 大 赛
unsigned int i,j; for(i=xms;i>0;i--) for(j=587;j>0;j--); }
void Delay(unsigned int m) //unsigned char m {
int i=0,j=0; for(i=0;i<1000;i++) {
for(j=0;j < m; j++); } }
//LED灯初始化 void led_init(void) {
//P1为普通 I/O 口 //P1SEL &=~0x0f; P1SEL =0;
// P1.0 P1.1 P1.2 P1.3 设置为输出 P1DIR |= 0x0F; //关闭LED1 LED1=1; //关闭LED2 LED2=1;
41