生活随笔
收集整理的這篇文章主要介紹了
【蓝桥杯单片机的备赛旅行日记系列】之国赛决赛第五届多功能事件记录器
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
目錄
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){mode
=~mode
;}if(Trg
& 0x04){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];}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.完整代碼下載
??
??【點擊這里】下載。
總結
以上是生活随笔為你收集整理的【蓝桥杯单片机的备赛旅行日记系列】之国赛决赛第五届多功能事件记录器的全部內容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。