日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

第十三届 蓝桥杯 单片机设计与开发项目 省赛

發布時間:2023/12/20 编程问答 42 豆豆
生活随笔 收集整理的這篇文章主要介紹了 第十三届 蓝桥杯 单片机设计与开发项目 省赛 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

目錄

題目分析

代碼分析

代碼鏈接


題目分析

????????就在前不久第十三屆藍橋杯比賽結束,我就把單片機的題目拿過來看了看,下面是我對題目的分析和本次題目的代碼。項目工程在文章的末尾,歡迎大家參考和指正。

?

?

?

?????????在看到這道題的時候,看到了題目說按鍵動作不影響數碼管顯示和數據采集過程。說明數碼管和采集過程需要在中斷完成。本道題由于有單總線的存在,造成了數碼管掃描時間加長,會造成最后一位數碼管格外亮或者視覺暫留效果消失。為解決這一問題,我的方法是修改了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的分享

總結

以上是生活随笔為你收集整理的第十三届 蓝桥杯 单片机设计与开发项目 省赛的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。