STC15F204EA單片機旋轉(zhuǎn)編碼器版白光T12控制器代碼(開發(fā)固件)(by金向維_第1頁
STC15F204EA單片機旋轉(zhuǎn)編碼器版白光T12控制器代碼(開發(fā)固件)(by金向維_第2頁
STC15F204EA單片機旋轉(zhuǎn)編碼器版白光T12控制器代碼(開發(fā)固件)(by金向維_第3頁
STC15F204EA單片機旋轉(zhuǎn)編碼器版白光T12控制器代碼(開發(fā)固件)(by金向維_第4頁
STC15F204EA單片機旋轉(zhuǎn)編碼器版白光T12控制器代碼(開發(fā)固件)(by金向維_第5頁
已閱讀5頁,還剩4頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認(rèn)領(lǐng)

文檔簡介

1、/*STC15F204EA單片機旋轉(zhuǎn)編碼器版白光T12控制器代碼(開發(fā)固件)(by金向維)*/#include /單片機頭文件,24MHz時鐘頻率#include INTRINS.h/頭文件unsigned char code duanma12=0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x40,0x73;/共陰數(shù)碼管段碼數(shù)據(jù)(0,1,2,3,4,5,6,7,8,9),倒 數(shù)第二個是顯示負(fù)號-的數(shù)據(jù),倒數(shù)第一個是顯示字母P的數(shù)據(jù)unsigned int code wendubiao62=924,959,996,1033,1071,111

2、0,1150,1190,1232,1273,1315,1358,1401,1443,1487,1501,1574,1619,1663,1706,1751,1756,1776,1810,1853,1903,1958,2017,2078,2141,2204,2266,2327,2387,2444,2500,2554,2607,2657,2706,2738,2800,2844,2889,2931,2974,3016,3056,3098,3139,3179,3218,3257,3296,3333,3372,3408,3446,3484,3519,3554,3590;/根據(jù)NTC電阻隨溫度變化進而引起電

3、壓變化得出的數(shù)據(jù),用來查表計算室溫(進而對熱電偶冷端補償)sbit t12=P20;/T12通過P2.0控制sbit bw=P34;/數(shù)碼管百位位選為P3.4sbit sw=P35;/數(shù)碼管十位位選為P3.5sbit gw=P36;/數(shù)碼管個位位選為P3.6sbit tihuan=P37;/數(shù)碼管的a段本應(yīng)該用P1.0控制,由于P1.0被用來控制T12,所以要用P3.7替代P1.0sbit encoderb=P14;/編碼器的b腳接P1.4sbit encodera=P32;/編碼器的a腳接P3.2sbit zhendongkaiguan=P01;/震動開關(guān)接P0.1sbit bianmaan

4、niu=P33;/編碼器的按鍵接P3.3sbit a7=P27;/數(shù)碼管小數(shù)點sbit a6=P26;/數(shù)碼管g段sbit a5=P25;/數(shù)碼管f段sbit a4=P24;/數(shù)碼管e段sbit a3=P23;/數(shù)碼管d段sbit a2=P22;/數(shù)碼管c段sbit a1=P21;/數(shù)碼管d段bit e=1, f=1;/e f 用來保存編碼器上一次的狀態(tài)bit huancunkaiguan=0;/用于改變設(shè)定溫度后延時顯示設(shè)定溫度(而不是立刻顯示t12溫度)signed int huancun;/顯示函數(shù)直接顯示huancun,要顯示一個數(shù)據(jù)將必須這個數(shù)據(jù)賦值給緩存(由于數(shù)碼管只有三位,為了在

5、顯示三位數(shù)同時保持四位數(shù)的精度,所以實際顯示的是數(shù)據(jù)除以10,并支持顯示負(fù)數(shù))signed int shiwen;/10倍實際室溫,即實際室溫乘以10(為了精確)(允許的室溫范圍為-11度至50度)signed int t12wendu;/T12烙鐵頭的實際溫度(非熱電偶的溫差)(同樣為10倍溫度)signed int shedingwendu;/設(shè)定溫度(范圍200450度)signed int wencha;/T12兩個周期間的溫差signed int jiareshu;/每200ms加熱周期內(nèi)需要加熱的次數(shù)(一次等于1ms,相當(dāng)于加熱占空比)unsigned char zhouqijis

6、hu;/加熱周期200ms計數(shù)unsigned int huancunjishu;/用于改變設(shè)定溫度后延時顯示設(shè)定溫度(而不是立刻顯示t12溫度)unsigned long cankaodianya0, t12dianya, ntcdianya, dianyuandianya;/*1ms延時函數(shù)*/void delay_ms (unsigned int a)/24MHz時鐘時的1毫秒延時函數(shù) unsigned int b; while(a-) for(b=0;b1200;b+); /*10us延時函數(shù)*/void delay_10us (unsigned int a)/24MHz時鐘時的10微

7、秒延時函數(shù) unsigned int b; while(a-) for(b=0;b12;b+); /*數(shù)碼管延時關(guān)斷函數(shù)*/void guanduan (void)/用于關(guān)斷數(shù)碼管的位選 delay_ms(1);/延時 bw=1;/關(guān)斷百位 sw=1;/關(guān)斷十位 gw=1;/關(guān)斷個位/*公共函數(shù)10(顯示)*/void gonggonghanshu10(unsigned char a) a7=a&0x80;/小數(shù)點 a6=a&0x40;/g a5=a&0x20;/f a4=a&0x10;/e a3=a&0x08;/d a2=a&0x04;/c a1=a&0x02;/b tihuan=a&0x0

8、1;/a/*顯示函數(shù)*/void display(signed int a)/顯示函數(shù)(顯示實際數(shù)據(jù)除以10,支持顯示負(fù)數(shù)) unsigned char baiwei,shiwei,gewei,d;/定義百位,十位,個位,每次顯示幀數(shù) signed int c;/用于處理數(shù)字a if(a0)/如果a是負(fù)數(shù) c=-a;/取a的相反數(shù) else/否則 c=a;/就直接取a c=c/10; baiwei=c/100;/計算百位 c=c%100; shiwei=c/10;/計算十位 c=c%10; gewei=c;/計算個位 for(d=0;d20;d+)/顯示部分,每次顯示20個循環(huán)(20幀) if

9、(a0)/如果a是負(fù)數(shù),則百位顯示負(fù)號gonggonghanshu10(duanma10); else/否則直接顯示百位 gonggonghanshu10(duanmabaiwei);/顯示百位 bw=0;/打開百位 guanduan();/延時關(guān)斷百位 gonggonghanshu10(duanmashiwei);/顯示十位 sw=0;/打開十位 guanduan();/延時關(guān)斷十位 gonggonghanshu10(duanmagewei);/顯示個位 gw=0;/打開個位 guanduan();/延時關(guān)斷個位 /*ADC公共函數(shù)*/void gonggonghanshu2(void)/此

10、函數(shù)測量單片機電源電壓 ADC_CONTR=0x88;/ADC_POWER, SPEED1, SPEED0, ADC_FLAG-ADC_START, CHS2, CHS1, CHS0 delay_10us(2);/延時等待轉(zhuǎn)換結(jié)束 ADC_RESL=ADC_RESL&0x03;/取轉(zhuǎn)換結(jié)果低八位中的低二位 cankaodianya0=(ADC_RES*4+ADC_RESL);/把結(jié)果轉(zhuǎn)換成十進制數(shù)據(jù)(10位ADC,最大值1024) dianyuandianya=/cankaodianya0;/計算電源電壓,單位mV/*ADC測電壓函數(shù)*/void adc (void)/ADC函數(shù),用于測量和計

11、算各種電壓 signed char a;/查NTC表用 gonggonghanshu2();/公共函數(shù)2(此函數(shù)功能是測量電源電壓,單位mV) ADC_CONTR=0x89;/ADC控制寄存器設(shè)置,轉(zhuǎn)換采用最低速度速,低速更精確(測量t12電壓務(wù)必使用最低速度AD轉(zhuǎn)換,實測高速誤差大) delay_10us(2); ADC_RESL=ADC_RESL&0x03; t12dianya=(ADC_RES*4+ADC_RESL); t12dianya=2490*t12dianya/cankaodianya0;/計算t12電壓,單位mV ADC_CONTR=0x8a;/ADC控制寄存器設(shè)置 delay

12、_10us(2); ADC_RESL=ADC_RESL&0x03; ntcdianya=(ADC_RES*4+ADC_RESL); ntcdianya=2490*ntcdianya/cankaodianya0;/計算ntc電壓,單位mV for(a=0;wendubiaoa=61)/如果超出表的范圍就取允許的最高溫度(50度) break;/并且退出查表 shiwen=(a-11)*10;/得出室溫(實際室溫乘以10) t12wendu=(t12dianya-100)*43*10/260+shiwen;/計算t12的實際溫度,其中260為運放增益 if(t12wendu5000)/如果得出的溫

13、度超過500度,說明沒有插入烙鐵頭或參數(shù)錯誤(因為烙鐵頭的溫度不可能超過500度) t12wendu=5000;/顯示500作為錯誤指示(注意顯示函數(shù)顯示的是1/10,所以要顯示500,需要賦值5000) if(huancunkaiguan=1)/如果緩存開關(guān)開,說明剛剛改變了設(shè)定溫度 huancun=shedingwendu;/于是顯示設(shè)定溫度(而不是t12溫度) else huancun=t12wendu;/否則直接顯示t12溫度/*定時器0初始化函數(shù)*/void timer0init (void)/定時器0初始化程序,24MHz頻率下,每1ms中斷一次 TMOD=0x00;/定時模式,1

14、6位自動重裝 TH0=0xf8; /計時1ms TL0=0x2f; ET0=1;/開啟定時器0中斷 TR0=1;/啟動定時器0/*公共函數(shù)6(記錄編碼器狀態(tài))*/void gonggonghanshu6(void) e=encodera;/記錄編碼器a腳此次狀態(tài) f=encoderb;/記錄編碼器b腳此次狀態(tài)/*編碼器函數(shù)(正常加熱模式調(diào)用)*/void bianmaqi(void) if(e=1&f=1&encodera=1&encoderb=0)/和前一次狀態(tài)比較確定為右旋 shedingwendu=shedingwendu+100;/步進 if(shedingwendu4500)/最高允

15、許450度shedingwendu=4500; huancun=shedingwendu;/顯示改變后的設(shè)定溫度 huancunkaiguan=1;/打開緩存開關(guān)(用于延時顯示設(shè)定溫度1.5秒) huancunjishu=0;/重新開始緩存計數(shù) if(e=1&f=1&encodera=0&encoderb=1)/和前一次狀態(tài)比較確定為左旋 shedingwendu=shedingwendu-100;/步進 if(shedingwendu190)/最多加熱190ms jiareshu=190; if(zhouqijishushedingwendu) if(t12wendu-shedingwend

16、u=20) jiareshu=(shedingwendu-1500)/160; else jiareshu=0; if(t12wendu20) buchang+; if(buchang150) buchang=150; else buchang=0; if(shedingwendu-t12wendu=300) jiareshu=198; else if(shedingwendu-t12wendu=200) jiareshu=160; else if(shedingwendu-t12wendu=150) jiareshu=130; else if(shedingwendu-t12wendu=100) jiareshu=90+wencha/2+buchang; else if(shedingwendu-t12wendu=50) jiareshu=50+buchang*2; else jiareshu=(shedingwendu-1000)/80+wencha*2/3+buchang; /*主函數(shù)*/void main (void)/主函數(shù) P1M0=0x00;/P1除P1.0,P1.1,P1.2為輸入模式外均為正常模式 P1M1=0x07; P1ASF=0x

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論