【蓝桥杯单片机的备赛旅行日记系列】之国赛决赛第五届多功能事件记录器

Bena ·
更新时间:2024-11-13
· 883 次阅读

目录 1.注意事项 2.部分代码展示 3.完整代码下载 1.注意事项   这是目前为止做到的最难的一套了,三个驱动都用上了,而且还增加了串口通信,最无奈的是光敏电阻和Rb2同时用上了。

  ADC读取的时候读的是上一个值,也就是说,你以为你读的是Rb2,其实是光敏电阻,网上说的有两种解决方法

(1).每个值读两次,我是采用这种方法的,
(2).二者的地址反着取,

但是两种方法都会有问题,目前还没有找到完美解决方法,找到了我会放上来,大家注意一下就好了。

  
  

2.部分代码展示 主函数: void main() { uchar last_sec,k,m,index; bit light_start=0; uchar temp,shidu,light; uchar hour,min,sec; uchar stay_hour,stay_min,stay_sec; uint stay_time; AllInit(); rd_temperature(); Delay750ms(); set_time(23,59,55); light_InitVal=read_adc(0x01)-20; Delay20ms(); Timer0Init(); UartInit(); while(1) { //获取温、湿、亮度 temp=rd_temperature(); EA=0; shidu=read_adc(0x03)*0.389 ; EA=1; Delay20ms(); EA=0; shidu=read_adc(0x03)*0.389 ; EA=1; Delay20ms(); EA=0; sec=Read_Ds1302_Byte(0x81); min=Read_Ds1302_Byte(0x83); hour=Read_Ds1302_Byte(0x85); EA=1; Delay20ms(); EA=0; light=read_adc(0x01); EA=1; Delay20ms(); EA=0; light=read_adc(0x01); EA=1; Delay20ms(); if(light < light_InitVal) { close=1; light_start=1; if(stay_flag==0) { stay_sec=sec; stay_min=min; stay_hour=hour; stay_flag=1; } } else { close=0; } if(close==0 && stay_flag==1) { stay_flag=0; stay_time=( (hour-stay_hour)*3600+(min-stay_min)*60+(sec-stay_sec) ); rom_dat[0]=temp;rom_dat[1]=shidu;rom_dat[2]=hour; rom_dat[3]=min;rom_dat[4]=sec;rom_dat[5]=stay_time; for(k=0;k<6;k++) { write_rom(k+addr,rom_dat[k]); Delay20ms(); } addr+=6; if(addr==30)addr=0; } if(light_start==0)stay_time=0; //按键单元 if(key_flag) { key_flag=0; BTN(); if(Trg & 0x08)//s4 { mode=~mode; } if(Trg & 0x04)//s5 { menu_index++; if(menu_index==4)menu_index=1; } } //发送数据 if(send_en) { if(mode==0) { if(last_sec!=sec) { last_sec=sec; send_buf[0]='{';send_buf[1]=temp/10+'0';send_buf[2]=temp%10+'0';send_buf[3]='-'; send_buf[4]=shidu/10+'0';send_buf[5]=shidu%10+'0';send_buf[6]='%';send_buf[7]='}'; send_buf[8]='{';send_buf[9]=hour/10+'0';send_buf[10]=hour%10+'0';send_buf[11]='-'; send_buf[12]=min/10+'0';send_buf[13]=min%10+'0';send_buf[14]='-'; send_buf[15]=sec/10+'0';send_buf[16]=sec%10+'0';send_buf[17]='}'; send_buf[18]='{';send_buf[20]='}'; if(close)send_buf[19]='1'; else send_buf[19]='0'; send_buf[21]='\r';send_buf[22]='\n'; for(k=0;k<23;k++)SendData(send_buf[k]); } }else if(mode==1) { send_en=0; for(m=0;m<5;m++) { for(k=0;k<6;k++) { rom_dat[k]=read_rom(k+m*6); } send_buf[0]='{';send_buf[1]=rom_dat[0]/10+'0';send_buf[2]=rom_dat[0]%10+'0';send_buf[3]='-'; send_buf[4]=rom_dat[1]/10+'0';send_buf[5]=rom_dat[1]%10+'0';send_buf[6]='%';send_buf[7]='}'; send_buf[8]='{';send_buf[9]=rom_dat[2]/10+'0';send_buf[10]=rom_dat[2]%10+'0';send_buf[11]='-'; send_buf[12]=rom_dat[3]/10+'0';send_buf[13]=rom_dat[3]%10+'0';send_buf[14]='-'; send_buf[15]=rom_dat[4]/10+'0';send_buf[16]=rom_dat[4]%10+'0';send_buf[17]='}'; send_buf[18]='{'; if(rom_dat[5]<10) { send_buf[19]=rom_dat[5]+'0';send_buf[20]='}'; send_buf[21]='\r';send_buf[22]='\n'; for(index=0;index<23;index++)SendData(send_buf[index]); }else { send_buf[19]=rom_dat[5]/10+'0'; send_buf[20]=rom_dat[5]%10+'0'; send_buf[21]='}'; send_buf[22]='\r';send_buf[23]='\n'; for(index=0;index<24;index++)SendData(send_buf[index]); } } } } //数码管单元 if(menu_index==1) { menu1[0]=tab[temp/10]; menu1[1]=tab[temp%10]; menu1[2]=0xc6; menu1[3]=0xff;menu1[4]=0xff; menu1[5]=tab[shidu/10]; menu1[6]=tab[shidu%10]; menu1[7]=0x89; }else if(menu_index==2) { menu2[0]=tab[hour/10]; menu2[1]=tab[hour%10]; menu2[3]=tab[min/10]; menu2[4]=tab[min%10]; menu2[6]=tab[sec/10]; menu2[7]=tab[sec%10]; if(sec%2==0){menu2[2]=0xff;menu2[5]=0xff;} else {menu2[2]=0xbf;menu2[5]=0xbf;} }else if(menu_index==3) { menu3[0]=0xff;menu3[1]=0xff; menu3[2]=0xff;menu3[3]=0xbf; menu3[4]=tab[stay_time/1000]; menu3[5]=tab[stay_time%1000/100]; menu3[6]=tab[stay_time%100/10]; menu3[7]=tab[stay_time%10]; } //LED if(mode==0 && close==0) { P0=~0x01; P2=0x80;P0=~0x01;P2=0; }else if(mode==0 && close==1) { P0=~0x05; P2=0x80;P0=~0x05;P2=0; }else if(mode==1 && close==0) { P0=~0x02; P2=0x80;P0=~0x02;P2=0; }else if(mode==1 && close==1) { P0=~0x06; P2=0x80;P0=~0x06;P2=0; } } }

我是采用初始光敏电阻模拟值-20来作为是否遮光的起始值,因为官方也没给明确的值,而且如果不-20的话变化就很敏感了。

  
  

3.完整代码下载

  【点击这里】下载。


作者:菜小涛



蓝桥杯 旅行 事件 事件记录 单片机

需要 登录 后方可回复, 如果你还没有账号请 注册新账号