第十三届 蓝桥杯 单片机设计与开发项目 省赛
生活随笔
收集整理的這篇文章主要介紹了
第十三届 蓝桥杯 单片机设计与开发项目 省赛
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
目錄
題目分析
代碼分析
代碼鏈接
題目分析
????????就在前不久第十三屆藍橋杯比賽結束,我就把單片機的題目拿過來看了看,下面是我對題目的分析和本次題目的代碼。項目工程在文章的末尾,歡迎大家參考和指正。
?
?
?
?????????在看到這道題的時候,看到了題目說按鍵動作不影響數碼管顯示和數據采集過程。說明數碼管和采集過程需要在中斷完成。本道題由于有單總線的存在,造成了數碼管掃描時間加長,會造成最后一位數碼管格外亮或者視覺暫留效果消失。為解決這一問題,我的方法是修改了DS18B20底層驅動代碼,在讀取溫度的同時也進行了數碼管的掃描操作。還得注意的是,由于定時器中斷的打開,如果DS1302和DS18B20不放到中斷函數里面的話,會造成讀取的數據錯誤,這個原因是,在讀取數據的過程中產生了中斷,破壞了讀取數據的時序。廢話不多說了,看源代碼吧。
代碼分析
主函數
void main(void) {//ds1302初始化DS1302_Init(Init_Time);Timer0Init();while(1){//keyif(Key_Flag==1){KeyValue = KeyScan();switch(KeyValue){case 12:SegShow_Flag++;if(SegShow_Flag>2){SegShow_Flag=0;}break;case 13:Mode_Flag = !Mode_Flag; //顯示界面break;case 16:temp = ParameterChang(SegShow_Flag,temp,0);break;case 17:temp = ParameterChang(SegShow_Flag,temp,1);break;}//時間顯示模式標記SegTime_Flag = TimeShow(SegShow_Flag,KeyValue);Key_Flag=0;}} }中斷函數
//定時器中斷服務函數 void Time0Handler(void) interrupt 1 //默認中斷優先級 1 {static u16 tt=0;//數碼管掃描SegScan(tab,SegNum);tt++;if((tt%1000) == 0)//100ms{Key_Flag=1;Timer_Flag=1;SegDispaly(SegShow_Flag,SegTime_Flag,temperature,shijian,temp,SegNum);//ledLedFuction(Mode_Flag,RelaySwitch_Flag,shijian);//繼電器RelaySwitch_Flag = RelayFuction(Mode_Flag,temperature,temp,shijian);}if(tt >= 7000) //700ms{tt=0;//時間DS1302_Get(shijian);//溫度//12位精度,延時不足。第一次數值錯誤,不讀if(Temperature_Flag == 0){Temperature_Flag=1;TemperGet();}else{temperature = TemperGet();}} }數碼管顯示
//顯示函數 void SegScan(unsigned char tab[],unsigned char ptr[]) { static unsigned char dspcom;P0 = 0xff;P2 = ((P2&0x1f)|0xE0);P2 &= 0x1f;P0 = 1<<dspcom; P2 = ((P2&0x1f)|0xC0); P2 &= 0x1f;P0 = tab[ptr[dspcom]]; P2 = ((P2&0x1f)|0xE0); P2 &= 0x1f;if(++dspcom >= 8){dspcom = 0;} }界面切換
//數碼管顯示信息 void SegDispaly(u8 SegShow_Flag,u8 SegTime_Flag,long temperature,u8* time,u8 temp,u8* ptr) {//溫度界面if(SegShow_Flag == 0){ptr[0]=21;ptr[1]=1;ptr[2]=22;ptr[3]=22;ptr[4]=22;ptr[5]=temperature/100000;ptr[6]=temperature%100000/10000+10;ptr[7]=temperature%10000/1000;}//時間界面else if(SegShow_Flag == 1){ptr[0]=21;ptr[1]=2;ptr[2]=22;if(SegTime_Flag == 0){ptr[3]=time[2]/10;ptr[4]=time[2]%10;ptr[5]=20;ptr[6]=time[1]/10;ptr[7]=time[1]%10;}else{ptr[3]=time[1]/10;ptr[4]=time[1]%10;ptr[5]=20;ptr[6]=time[0]/10;ptr[7]=time[0]%10;}}//參數界面else if(SegShow_Flag == 2){ptr[0]=21;ptr[1]=3;ptr[2]=22;ptr[3]=22;ptr[4]=22;ptr[5]=22;ptr[6]=temp/10;ptr[7]=temp%10;} }????????剩下的就是繼電器和led的顯示,這里就不都一一展出啦,需要的伙伴可以在下面鏈接自行下載。
代碼鏈接
鏈接:https://pan.baidu.com/s/1DAbZ5t6LMn_uOdZORoh8HA?
提取碼:mwl6?
--來自百度網盤超級會員V5的分享
總結
以上是生活随笔為你收集整理的第十三届 蓝桥杯 单片机设计与开发项目 省赛的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: cmmi证书
- 下一篇: SDJZ2537LOL如何拯救小学生