![單片機C語言模塊化編程數(shù)碼管顯示電子萬年歷篇_第1頁](http://file4.renrendoc.com/view/0a924940a5ad1cc86ff31ba879f2b2e3/0a924940a5ad1cc86ff31ba879f2b2e31.gif)
![單片機C語言模塊化編程數(shù)碼管顯示電子萬年歷篇_第2頁](http://file4.renrendoc.com/view/0a924940a5ad1cc86ff31ba879f2b2e3/0a924940a5ad1cc86ff31ba879f2b2e32.gif)
![單片機C語言模塊化編程數(shù)碼管顯示電子萬年歷篇_第3頁](http://file4.renrendoc.com/view/0a924940a5ad1cc86ff31ba879f2b2e3/0a924940a5ad1cc86ff31ba879f2b2e33.gif)
![單片機C語言模塊化編程數(shù)碼管顯示電子萬年歷篇_第4頁](http://file4.renrendoc.com/view/0a924940a5ad1cc86ff31ba879f2b2e3/0a924940a5ad1cc86ff31ba879f2b2e34.gif)
![單片機C語言模塊化編程數(shù)碼管顯示電子萬年歷篇_第5頁](http://file4.renrendoc.com/view/0a924940a5ad1cc86ff31ba879f2b2e3/0a924940a5ad1cc86ff31ba879f2b2e35.gif)
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
單片機C語言模塊化編程之數(shù)碼管顯示電子萬年歷篇單片機C語言模塊化編程之數(shù)碼管顯示電子萬年歷篇單片機C語言模塊化編程之數(shù)碼管顯示電子萬年歷篇數(shù)碼管顯示模塊化顯示電子萬年歷數(shù)碼管共陽極7407驅(qū)動共陰極max7221/7419驅(qū)動Ds1302實不時間顯示Ds18b20溫度顯示芯片/**/#ifndef_DELAY_H#define_DELAY_H_#defineuintunsignedint#defineucharunsignedcharvoiddelay(uintxms);0fCSB..CLK..sbitCSB=P2^1;sbitCLK=P2^2;sbitDIN1=P2^3;sbitCSB1=P2^4;sbitCLK1=P2^5;externvoidwrite(unsignedcharaddr,unsignedchardat);//max7221寫數(shù)據(jù),變換數(shù)據(jù)函數(shù),num的值為1,或許2,當num為1時,片選的是第一塊Max7221,同理亦然。externvoidwrite1(ucharaddr,uchardat);1externvoidinit();//max7221初始化externvoidinit1();#endif/**/#include""#include<>voidwrite(ucharaddr,uchardat)//寫數(shù)據(jù),寫地點函數(shù){uchari;CSB=0;for(i=0;i<8;i++){CLK=0;addr<<=1;DIN=CY;CLK=1;_nop_();_nop_();CLK=0;}for(i=0;i<8;i++){CLK=0;dat<<=1;DIN=CY;CLK=1;_nop_();_nop_();CLK=0;}CSB=1;}voidwrite1(ucharaddr,uchardat){uchari;CSB1=0;for(i=0;i<8;i++){2CLK1=0;addr<<=1;DIN1=CY;CLK1=1;_nop_();_nop_();CLK1=0;}for(i=0;i<8;i++){CLK1=0;dat<<=1;DIN1=CY;CLK1=1;_nop_();_nop_();CLK1=0;}CSB1=1;}voidinit(){write(0x09,0xff);//編碼模式地點0x09,0x00-0xff,為1的則位選通write(0x0a,0x07);//亮度地點0x0a,0x00-0x0f,0x0f時最亮write(0x0b,0x07);//掃描數(shù)碼管個數(shù)地點0x0c,最多掃描8只數(shù)碼管write(0x0c,0x01);//工作模式地點0x0c0x00:封閉;0x01:正常}voidinit1(){write1(0x09,0xff);write1(0x0a,0x07);write1(0x0b,0x07);write1(0x0c,0x01);}/**/#ifndef_DS18B20_H#define_DS18B20_H3#include<>#include""#include<>#defineNOP(){_nop_(),_nop_(),_nop_(),_nop_()}sbitDQ=P1^3;//DS18B20控制線,單線模式。externbitng;//正負數(shù)標記位,ng=0,為正數(shù),反之為負數(shù),正數(shù)負數(shù)的辦理方法不一樣樣,externbitDS18B20_IS_OK;//為1時表示目前讀取溫度正常,不然讀取失敗。externucharDisplay_Digit[4];//讀取的溫度值變換后存在這個數(shù)組中externvoidRead_Temperature();//讀取目前溫度值externvoidProcess_Temperature();//辦理目前獲取的溫度值,正數(shù),負數(shù)等。#endif/**/#include""http://溫度字符ucharcodeTemperature_Char[8]={0x0c,0x12,0x12,0x0c,0x00,0x00,0x00,0x00};//溫度小數(shù)比較表ucharcodedf_Table[]={0,1,1,2,3,3,4,4,5,6,6,7,8,8,9,9};ucharCurrentT=0;//目前讀取的溫度整數(shù)部分ucharTemp_Value[]={0x00,0x00};//從DS18B20讀取的溫度值bitng=0;//正負數(shù)標記位,ng=0,為正數(shù),反之為負數(shù),正數(shù)負數(shù)的辦理方法不一樣樣,bitDS18B20_IS_OK=1;//為1時表示目前讀取溫度正常,不然讀取失敗。ucharDisplay_Digit[4]={0,0,0,0};//讀取的溫度值變換后存在這個數(shù)組中//-------------------------------------------------------//初始化DS18B20//-------------------------------------------------------ucharInit_DS18B20(){ucharstatus;DQ=1;delayms(8);DQ=0;delayms(90);DQ=1;delayms(8);status=DQ;delayms(100);DQ=1;returnstatus;}4//-------------------------------------------------------//讀一字節(jié)//-------------------------------------------------------ucharReadOneByte(){uchari,dat=0;DQ=1;_nop_();for(i=0;i<8;i++){DQ=0;dat>>=1;DQ=1;_nop_();_nop_();if(DQ)dat|=0x80;delayms(30);DQ=1;}returndat;}//-------------------------------------------------------寫一字節(jié)//-------------------------------------------------------voidWriteOneByte(uchardat){uchari;for(i=0;i<8;i++){DQ=0;DQ=dat&0x01;delayms(5);DQ=1;dat>>=1;}}//----------------------------------------------------------------//讀取溫度值//----------------------------------------------------------------voidRead_Temperature(){if(Init_DS18B20()==1)//DS18B20故障DS18B20_IS_OK=0;else{WriteOneByte(0xCC);//跳過序列號WriteOneByte(0x44);//啟動溫度變換Init_DS18B20();WriteOneByte(0xCC);//跳過序列號WriteOneByte(0xBE);//讀取溫度存放器Temp_Value[0]=ReadOneByte();//溫度低8位Temp_Value[1]=ReadOneByte();//溫度高8位5DS18B20_IS_OK=1;}}//----------------------------------------------------------------//對讀取的溫度值進行判斷,辦理,負數(shù)的狀況,整數(shù)狀況//----------------------------------------------------------------voidProcess_Temperature(){//uchari;//延市價與負數(shù)表記//ucharng=0;//高5位全為1(0)則為負數(shù),為負數(shù)時取反加1,并設(shè)置負數(shù)表記if((Temp_Value[1]&0xF8)==0xF8){Temp_Value[1]=~Temp_Value[1];Temp_Value[0]=~Temp_Value[0]+1;if(Temp_Value[0]==0x00)Temp_Value[1]++;//負數(shù)表記置1ng=1;}elseng=0;查表獲取溫度小數(shù)部分Display_Digit[0]=df_Table[Temp_Value[0]&0x0F];//獲取溫度整數(shù)部分(高字節(jié)中的第三位與低字節(jié)中的高四位,無符號)CurrentT=((Temp_Value[0]&0xF0)>>4)|((Temp_Value[1]&0x07)<<4);將整數(shù)部分分解為3位待顯示數(shù)字Display_Digit[3]=CurrentT/100;Display_Digit[2]=CurrentT%100/10;Display_Digit[1]=CurrentT%10;}/**/#include""#include""#include""ucharcodetable[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};//數(shù)碼管段碼共陽極6uchardisbuff[]={0,0,10,0,0,10,0,0};//第一個max7221顯示緩存uchardisbuff1[]={0,0,10,0,0,10,0,0};//第二個max7221顯示緩存voidinit_T()//準時器初始化{TMOD=0X01;TH0=-5000/256;TL0=-5000%256;TR0=1;ET0=1;EA=1;}voidmain()//主函數(shù){uchari;init();init1();//第一個max7221初始化init_T();//第二個max7221初始化Read_Temperature();//先讀一遍目前溫度delayms(50000);//讀取溫度有一段時間,先讓他等候一段時間不然下一刻顯示的將會是錯誤的溫度delayms(50000);delayms(50000);while(1){gettime();//讀取目前時間值disbuff[0]=datetime[2]/10;//將獲取的時間值分解出來disbuff[1]=datetime[2]%10;disbuff[3]=datetime[1]/10;disbuff[4]=datetime[1]%10;disbuff[6]=datetime[0]/10;disbuff[7]=datetime[0]%10;disbuff1[0]=datetime[6]/10;disbuff1[1]=datetime[6]%10;disbuff1[3]=datetime[4]/10;disbuff1[4]=datetime[4]%10;disbuff1[6]=datetime[3]/10;disbuff1[7]=datetime[3]%10;for(i=0;i<8;i++)//第一個max7221顯示{write(i+1,disbuff1[i]);}7for(i=0;i<8;i++)//第二個max7221顯示{write1(i+1,disbuff[i]);}Read_Temperature();//再次讀取目前溫度if(DS18B20_IS_OK)//假如讀取成功{Process_Temperature();//對溫度進行辦理,特別要考慮的是負數(shù)的狀況delayms(50000);//延時等溫度顯示堅固了再次讀取,這個值要取適合,不然數(shù)碼管顯示會出現(xiàn)閃耀狀況delayms(50000);delayms(50000);}}}voidTimer0_1()interrupt1//為了防范溫度顯示在數(shù)碼管上出現(xiàn)閃屏的狀況,這里使用準時器來顯示目前溫度。{staticnum=0;TH0=-3000/256;//這個數(shù)值要足夠的小,這樣掃描次數(shù)才會更多,顯示才會更堅固TL0=-3000%256;P3=0x00;//每次進來時候要讓位碼清空,也叫做消影switch(num)//經(jīng)過一個Switch語句來實現(xiàn)對數(shù)碼管的掃描{case0://在數(shù)碼管上顯示目前溫度值{P0=table[Display_Digit[0]];//小數(shù)后邊的一位P3=0x20>>0;}break;case1:{P0=table[Display_Digit[1]]&0x7f;//有小數(shù)點的位要&0x7fP3=0x20>>1;//小數(shù)位,個為}break;case2://十位{if(Display_Digit[2]==0)8{if(Display_Digit[3]==0)//若十位為零且百位也為零,則都顯示十位為空P0=0xff;P0=0xff;}elseP0=table[Display_Digit[2]];//不然,正常顯示目前十位的值P3=0x20>>2;}break;case3:{if(Display_Digit[3]==0)//若百位為零,則不顯示,P0=0xff;else//不然正常顯示P0=table[Display_Digit[3]];P3=0x20>>3;}break;case4://顯示口{P0=~0x63;P3=0x80;}break;case5://固定顯示C{P0=~0x39;
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 物聯(lián)網(wǎng)技術(shù)在職教實訓室的應用前景
- 現(xiàn)代物流配送體系的智能化升級路徑
- 2024年學年八年級語文上冊 第一單元 愛在人間 第3課《蘆花蕩》說課稿 滬教版五四制
- 2024年四年級英語下冊 Unit 5 What will you do this weekend Lesson 25說課稿 人教精通版(三起)
- Unit 1 Greetings(說課稿)-2024-2025學年滬教版(五四制)(2024)英語一年級上冊
- 2023二年級數(shù)學下冊 7 萬以內(nèi)數(shù)的認識第2課時 1000以內(nèi)數(shù)的認識(2)說課稿 新人教版
- Unit 3 Food Let's Spell(說課稿)-2024-2025學年人教新起點版英語三年級上冊
- 2024-2025學年高一地理《宇宙中的地球》說課稿
- 2023六年級數(shù)學上冊 八 探索樂園單元概述和課時安排說課稿 冀教版
- 2024-2025學年高中歷史 專題4 雅爾塔體制下的冷戰(zhàn)與和平 3 人類對和平的追求說課稿(含解析)人民版選修3
- GA/T 1133-2014基于視頻圖像的車輛行駛速度技術(shù)鑒定
- GB∕T 41461-2022 自助銀行網(wǎng)點服務(wù)要求
- 學校委托管理協(xié)議書范本
- 重醫(yī)大《護理學導論》期末試卷(兩套)及答案
- 部編新教材人教版七年級上冊歷史重要知識點歸納
- 重點時段及節(jié)假日前安全檢查表
- 建筑樁基技術(shù)規(guī)范2018年
- 物理調(diào)查問卷
- 給排水管道工程分項、分部、單位工程劃分
- 《傻子上學》臺詞
- 高中英語新課程標準解讀 (課堂PPT)
評論
0/150
提交評論