stc15單片機(jī)實(shí)戰(zhàn)指南光盤語言版ct107d_第1頁
stc15單片機(jī)實(shí)戰(zhàn)指南光盤語言版ct107d_第2頁
stc15單片機(jī)實(shí)戰(zhàn)指南光盤語言版ct107d_第3頁
stc15單片機(jī)實(shí)戰(zhàn)指南光盤語言版ct107d_第4頁
stc15單片機(jī)實(shí)戰(zhàn)指南光盤語言版ct107d_第5頁
已閱讀5頁,還剩32頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

程序說明led1S隔閃軟件環(huán)境KeiluVision硬件環(huán)境:CT107單片機(jī)綜合實(shí)訓(xùn)平臺(tái)#defineuintunsigned#defineucharunsignedsbituintvoid{}//顯示函voiddis{}void{ //初始化LED,如果無此句,L2-L8會(huì)一直TH0=(8192- //定時(shí)器0方式0是13,TL0位溢出后向TH0TL0=(8192-{ //計(jì)滿200次為{count=0;//計(jì)數(shù)器dis}}}voidT0_timer()interrupt{TH0=(8192-TL0=(8192-}45、unsignedcharcode 6、unsignedcharcodeBit_code[]={0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80};//分別對(duì)應(yīng)相應(yīng)的數(shù)碼管點(diǎn)亮,7、unsignedcharDspbuf8、unsignedint910、voidDelay_50us(unsignedchar 12 unsignedchari,13 14 18、void20 21 22 25、voidTimer0_Init(void) //50微秒@12MHz AUXR|=0x80; //定時(shí)器時(shí)鐘1T模式 TMOD=0x03; TL0=0x06; 30 TH0= //設(shè)置定時(shí)初31 32 ET0= TR0=1; //定時(shí)器0開始計(jì)時(shí)37、void y(unsignedchar unsignedchari=0; 42 //取位 P0=Seg_code[*(point+i)];//取顯示數(shù)據(jù),段碼 47 //掃描間隙延時(shí),時(shí)間太長會(huì)閃爍,太短不亮 54、void 56 57 58 5960 61 62 6364 65 67、voidmain() 72 73 74 77、voidISR_time0()interrupt798081{82838485{868788}89}void{unsignedchari,i=j={while(--}while(--}voidDelay_ms(unsignedchar{while(x--{}}unsignedchar{unsignedcharkey_value;{{case0xfe:return1;break;case0xfd:return2;break;case0xfb:return3;break;case0xf7:return4;break;default:return0xff;}}return}#includesbitC1=P4^4;sbitC2=P4^2;sbitC3=P3^5;sbitunsignedcharcodeSeg_code[16]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e};unsignedcharcodeBit_code[9]={0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80,0xff};unsignedcharkey_press; //通過key_press++,判斷是否按下,若是抖動(dòng),key_press==0unsignedcharkey_value; bit //按鍵標(biāo)bitkey_leave;//松手檢測標(biāo)志unsignedchar //計(jì)//函數(shù)申unsignedcharread_keyboard( //鍵值函voidkey_proc(unsignedchar //鍵值處理void //關(guān)閉外{}void{TMOD|0x01;//配置定時(shí)器0模式模式116位計(jì)數(shù)TH0=(65536-TL0=(65536- EA1;//打開總中ET01打開定時(shí)器0TR01啟動(dòng)定}voidmain{unsignedcharkey_temp0xff;//清除舊鍵值{{key_flag=0;//key_tempread_keyboard();//20ms進(jìn)來掃描}key_temp=0xff;//清除舊鍵值}}//定時(shí)器中斷服務(wù)函voidT0_timer()interrupt1//默認(rèn)中斷優(yōu)先級(jí){TH0=(65536-TL0=(65536-2000)%256;//定時(shí)器重if(count10)//20ms行一{count=0;}}

key_flag1;//20ms掃描標(biāo)志位置//矩陣鍵盤鍵值返回的就是按鍵的對(duì)應(yīng)值0-15unsignedcharread_keyboard(){unsignedcharP3=0x0f; key_temp=if(key_temp0x0f)有按鍵按下key_press0;//抖if(key_press==3)//延時(shí)確定為有按鍵按{key_press=0; //{casekey_value0;//第一行按鍵按下casekey_value4;//第二行按鍵按下casekey_value=8;//第三行按鍵按下casekey_value=12;//第四行按鍵按下}P3=0xf0; //第一//第二//第三//第四} P3=0xf0; C1=1;C2=if((C1==1)&&(C2==1)&&(C3==1)&&(C4=={key_flag=key_leave=} }//按鍵處理函voidkey_proc(unsignedchar{if(key_temp!=P2&=0x1f;//送位數(shù)據(jù)和位鎖}}voidkey_proc(unsignedchar{if(key_temp!={P2&=0x1f;//送位數(shù)據(jù)和位鎖}} void{}Void{} void{}Void{}九、1、2、程序說明:IIC線驅(qū)動(dòng)程3、軟件環(huán)境:KeiluVision4、硬件環(huán)境:CT107單片機(jī)綜合實(shí)訓(xùn)平臺(tái)5、*/somenop包含32_nop_可實(shí)現(xiàn)AD連67、#includeiiC.h"9、//總線啟動(dòng)條10、voidIIC_Start(void)//啟動(dòng)信號(hào):當(dāng)scl為高電平時(shí),sda出現(xiàn)下1112、SDA=13、SCL=14、15、SDA=16、17、SCL=181920、//總線停止條21、voidIIC_Stop(void)//停止信號(hào):當(dāng)scl為高電平時(shí),sda現(xiàn)上2223、SDA=24、SCL25、26、SDA=272829、//應(yīng)答位30、voidIIC_Ack(unsignedchar3132、if(ackbit)33、{34 SDA=35、}36、else37、{38 SDA=39、}40、41、SCL=42、43、SCL=44、SDA=45、464748、//等待應(yīng)49、bitIIC_WaitAck(void)51、SDA=52、53、SCL54、55、56、{57 SCL=58 return0;60、}61、else62、{63 SCL= return1;65、}666768、//通過I2C線發(fā)送69、voidIIC_SendByte(unsignedcharbyt)71、unsignedchari;72、for(i=0;i<8;i++)73、{74 if(byt&0x80)//先發(fā)送75{76SDA=77}7879{80SDA=81}8283SCL=84byt1;//向左移動(dòng)8586SCL=87}888990I2C上接收91、unsignedcharIIC_RecByte(void)93、unsignedchardat;94、unsignedchari;96、for(i=0;i<8;i++)97、{98 SCL=99 100dat1;//先接受一101、102dat|=103SCL104105106returndat;108、voidDelay_50us(unsignedchart)109109、unsignedchari,j;110、for(i=t;i>0;i--)111、for(j=19;j>0;j--);112113114、unsignedcharRead_AT24C02(unsignedcharadd)116、unsignedchar117118、119IIC_SendByte(0xa0);120、IIC_WaitAck();121IIC_SendByte(add);122、IIC_WaitAck();123、124IIC_SendByte(0xa1);125、IIC_WaitAck();126、dat=127、128、129130、return131132133、voidWrite_AT24C02(unsignedcharadd,unsignedcharval)135 142 145146、voidInit_PCF8591(unsignedcharchannel)148、149、IIC_SendByte(0x90);150、if(IIC_WaitAck()==0) 152、IIC_SendByte(channel);153、if(IIC_WaitAck()==0) 155、156157158、unsignedcharADC_PCF8591(void)160、unsignedchartemp;162、163、IIC_SendByte(0x91);//總線尋址,進(jìn)入讀164、IIC_WaitAck(); 165、temp=IIC_RecByte();166、 //等待從機(jī)應(yīng)答響167、168169、returntemp;171172173、voidDAC_PCF8591(unsignedchardat)175、176、IIC_SendByte(0x90);//寫讀地177、178、IIC_SendByte(0x40);//DAC輸出模179、IIC_WaitAck();180IIC_SendByte(dat);181、IIC_WaitAck();182、183文件名稱:計(jì)數(shù)掉電不丟實(shí)驗(yàn)?zāi)康模?.掌握I2C總線通訊基本特點(diǎn)和工作時(shí)2.掌握51片機(jī)模擬I2C線時(shí)序的程序設(shè)計(jì)方3.掌握EEPROM器的特性及AT24C02的讀寫操作方程序說明#include"stc15f2k60s2.h"#include //I2C線驅(qū)動(dòng)codeunsignedcharSeg_code[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xbf,0xff};codeunsignedcharBit_code[]={0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80};unsignedcharDspbuf[811,11,11,11,11,11,11,11};//顯示緩沖區(qū)unsignedcharcount=0;unsignedcharnumber;bitwrite;void{}voidDisy(unsignedchar*point{unsignedchari;{P0=Bit_code[i];P0Seg_code[*(point+i段碼P0=0xff;//消隱}}void{}void{{number=Read_AT24C02(0x00);//從AT24C02地址0x00中數(shù){Write_AT24C02(0x00,number);AT24C02址0x00寫入數(shù)}Dspbuf[6]=number/10;Dspbuf[7]=number%10;Disy(Dspbuf);}}voidISR_timer()interrupt{TL0=(65536-{}}3文件名稱:開機(jī)次數(shù)實(shí)驗(yàn),按下復(fù)位按鍵,或重新上電,數(shù)碼管顯示實(shí)驗(yàn)?zāi)康模?.掌握I2C總線通訊基本特點(diǎn)和工作時(shí)2.掌握51片機(jī)模擬I2C線時(shí)序的程序設(shè)計(jì)方3.掌握EEPROM器的特性及AT24C02的讀寫操作方程序說明#include"stc15f2k60s2.h"#include //I2C線驅(qū)動(dòng)codeunsignedcharSeg_code[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xbf,0xff};codeunsignedcharBit_code[]={0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80};unsignedcharDspbuf[811,11,11,11,11,11,11,11};//顯示緩沖區(qū)unsignedcharcount=0;staticunsignedcharnumber=0;bitwrite;void{}voidDisy(unsignedchar*point{unsignedchari;{P0=Bit_code[i];P0Seg_code[*(point+i段碼P0=0xff;//消隱}}void{number=Read_AT24C02(0x00);//從AT24C02地址0x00中數(shù)Write_AT24C02(0x00,number);AT24C02址0x00寫入數(shù){Dspbuf[6]=number/10;Dspbuf[6]Dspbuf[7]=number%10;Disy(Dspbuf);}}十、1、#includeSTC15F2K60S2.H"http://本程序適用于CT107實(shí)現(xiàn)的1s樣1通道的ad//數(shù)碼管第0-2不顯示3示通道號(hào)45~7位顯示AD采樣#definechannel_00x00 //外接插針#definechannel_10x01 //光敏檢測#definechannel_20x02//放大器輸出#definechannel_30x03//電位器unsignedcharcodeSeg_code[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xbf,0xff};unsignedcharcodeBit_code[]={0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80};unsignedcharDspbuf[8]={11,11,11,0,10,0,0,0};unsignedchartimes=0;bitvoid{}void{TMOD|=0x01;//T016定時(shí)器}voiddelay_50us(unsignedint //50us延{unsignedchari,j;for(j=19;j>0;j--)}void //段碼鎖存子程{P2|=0xe0;P2&=}voidBIT_Latch(void)//位碼鎖存子{P2|=P2&=}voidDisy(unsignedchar{unsignedchari=0;{ P0=Seg_code[*(point+i)];//取顯示數(shù)據(jù),段碼 //掃描間隙延時(shí),時(shí)間太長會(huì)閃爍,太短 }}void{unsignedcharADC_Value;unsignedcharchannel=0;{if(AD_Flag1)//1秒到了采{AD_Flag0;//1s標(biāo)志if(channel>3)ADC_Value=ADC_PCF8591();//前一次的數(shù)據(jù),拋//啟動(dòng)ad轉(zhuǎn)換的時(shí)候,緊接著讀出來的數(shù)據(jù)不是當(dāng)前的數(shù)據(jù)而是前一次保存的數(shù)據(jù),所以這里讀到的數(shù)據(jù)ADC_Value //這是本次的數(shù)}Disy(Dspbuf);}}voidISR_Timer0(void)interrupt{TL0=(65536-iftimes20)//20次為{}}2、加入平均值濾波的AD(電壓實(shí)時(shí)顯示,兩位小數(shù)// 消unsignedcharcodeSeg_code[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xbf,0xff};unsignedcharcodeBit_code[]={0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80};unsignedcharDspbuf[8]={10,0,10,11,11,11,11,11};unsignedchartimes=0;bitAD_Flag;voidClose_BE(){}voiddelay_50us(unsignedint //50us延{unsignedchari,j;for(j=20;j>0;j--)}void //段碼鎖存子程{P2|=0xe0;P2&=}voidBIT_Latch(void)//位碼鎖存子{P2|=P2&=}voidDisy(unsignedchar{unsignedchari=0;{ P0=Seg_code[*(point+i)];//取顯示數(shù)據(jù),段碼 //掃描間隙延時(shí),時(shí)間太長會(huì)閃爍,太短 }}voidDisy_Decimal(unsignedcharinteger小數(shù)顯{P0=Seg_code[integer]&0x7f;//取顯示數(shù)據(jù),段碼 //掃描間隙延時(shí),時(shí)間太長會(huì)閃爍,太短不 }void{TMOD|=0x01;//T016定時(shí)器}void{unsignedcharADC_Value;unsignedchar unsignedintresult,integer;{if(AD_Flag1)//1秒到了采{AD_Flag0;//1s標(biāo)志ADC_Value=ADC_PCF8591();//前一次的數(shù)據(jù),拋//啟動(dòng)ad轉(zhuǎn)換的時(shí)候,緊接著讀出來的數(shù)據(jù)不是當(dāng)前的數(shù)據(jù)而是前一次保存的數(shù)據(jù),所以這里讀到的數(shù)據(jù)result=0;{ADC_Value=ADC_PCF8591(); result+=ADC_Value;}result3;//相當(dāng)于除以8,平均值}Disy(Dspbuf);Dis}}voidISR_Timer0(void)interrupt{TL0=(65536-iftimes20)//20次為{}}1、DS18B20動(dòng)文2、#3、sbitDQ=5、voidDelay_OneWire(unsignedchar67{unsignedchar8while(t--910{10}11}1213//DS18B20初始14bit15{16bitInit_flag=1718DQ=19DQ=20Delay_OneWire(30);//延時(shí)大于21DQ=22Delay_OneWire(5);//23Init_flag initflag于1始化24 2526return27} //通過單總線向DS18B20寫一個(gè)字節(jié) voidWrite_DS18B20(unsignedchardat) 31 unsignedchar32 33 34 DQ= //總線拉35 DQ=36 Delay_OneWire(5);37 DQ=38 dat>>=39 40 41 42 //從DS18B20一個(gè)字43 unsignedchar44 45 unsignedchar46 unsignedchar4748 49 50 DQ= //總線拉51 dat>>=52 DQ=53 54 55 dat|=56 57 Delay_OneWire(5);58 59 return60 61 高8位 低八位為DS18B20中例如:+125°為 01111101↓ |↓符號(hào)||最低四0為+|中間8|是小數(shù)1為 |是整數(shù)部 62 //DS18B20溫度程序:整數(shù) unsignedcharRead_Temperature(void) 66 unsignedchar67 char6869 Write_DS18B20(0xCC);//跳過讀序號(hào)列號(hào)的操作 Write_DS18B20(0x44);//啟動(dòng)溫度轉(zhuǎn)換72 7374 Write_DS18B20(0xCC);//跳過讀序號(hào)列號(hào)的操作 Write_DS18B20(0xBE);//寄存器77 low=Read_DS18B20();//低字節(jié) high=Read_DS18B20();//高字節(jié) temp=high<<4;//左移4位,舍棄符號(hào)位 temp|=(low>>4);//低位右移4位,舍棄小數(shù)部分84 return85 2、溫度(整數(shù)文件名稱:DS18B20溫度傳感器實(shí)實(shí)驗(yàn)?zāi)康模?.掌握單總線通訊基本特點(diǎn)和工作時(shí)2.掌握51單片機(jī)模擬單總線時(shí)序的程序設(shè)計(jì)方3.掌握DS18B20溫度傳感器的操作方程序說明:1.通過數(shù)碼管顯示實(shí)時(shí)溫度2.DS18B20據(jù)線引腳DQ單片機(jī)P1.4腳連3.測量精度為1氏4.數(shù)碼管驅(qū)動(dòng)函數(shù)采用IO式編寫,將跳線J13整為IO模#includeSTC15.h"http://定義51片機(jī)特殊功能寄存#includeonewire.h"http://單總線函數(shù)codeunsignedchartab[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xbf,0xff};unsignedcharshi,ge;voiddisy(charshi,charge);voiddelay1(unsignedchar//主函void{unsignedchartemperature;{temperaturerd_temperature();//讀溫//顯示數(shù)據(jù)更shi=temperature/10;ge=temperature%10;disy(shi,ge);}}voiddelay1(unsignedchar{unsignedcharx,y;for(y=110;y>0;y--}voiddisy(charshi,charge)//數(shù)碼管顯示調(diào)用函 低三{}2、溫度顯示(整數(shù)#includeSTC15.h"http://定義51片機(jī)特殊功能寄存#includeonewire.h"http://單總線函數(shù)codeunsignedchartab[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xbf,0xff};codeunsignedcharBit_code[]={0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80};unsignedchardspbuf[8]={11,11,11,11,11,11,0,0};//顯示緩沖unsignedchar =0;unsignedcharintr;bittemper_flag=0;//溫度標(biāo)voidDisy(unsignedchar*point);voidDelay_50us(unsignedchart);//主函void{unsignedchartemperature;{temperaturerd_temperature();//讀溫//顯示數(shù)據(jù)更dspbuf[6]=temperature/10;dspbuf[7]=temperature%10;Disy(dspbuf);}}voidDelay_50us(unsignedchar{unsignedcharx,y;for(y=19;y>0;y--}voidDisy(unsignedchar{unsignedchari;{}}1、DS1302驅(qū)動(dòng)程1、#ifndef2、#define3、#include4、#include5、/********************************************************************/5、sbitSCK=P1^7;6、sbit7、sbit8、/********************************************************************/自寫部9 unsignedchar10 unsignedcharcode10 unsignedcharcodeNow_Time_Init[]={0x45,0x59,0x23,0x02,0x03,0x16};//初值以11、unsignedchar12 13 /*復(fù)位腳 #defineRST_CLRRST=0/*電平置低*/ #defineRST_SETRST=1 #defineSDA_CLRSD=0/*電平置低*/ #defineSDA_SETSD=1/*電平置高*/ #defineSDA_RSD/*電平*/ 21 #defineSCK_CLR /*時(shí)鐘信號(hào)22 #defineSCK_SET /*電平置高23 #defineds1302_sec_addr #defineds1302_min_addr #defineds1302_hr_addr #defineds1302_date_addr #defineds1302_month_addr #defineds1302_day_addr #defineds1302_year_addr #defineds1302_control_addr 33 #define //涓電流充電命令字地 #defineds1302_clkburst_addr0xBE 37 38 /*單字節(jié)寫入一字節(jié)數(shù)據(jù)39 voidWrite_Ds1302_Byte(unsignedchar40 41 /*單字節(jié)讀出一字節(jié)數(shù)據(jù)42 unsignedchar /*向DS1302單字節(jié)寫入一字節(jié)數(shù)據(jù)*/ voidDs1302_Single_Byte_Write(unsignedcharaddr,unsignedchardat); /*從DS1302單字節(jié)讀出一字節(jié)數(shù)據(jù)*/49 unsignedcharDs1302_Single_Byte_Read(unsignedchar50 /*寫入當(dāng)前時(shí)間51 void5252 /*獲取實(shí)時(shí)時(shí)間53 void54 5556 57 /*單字節(jié)寫入一字節(jié)數(shù)據(jù) voidWrite_Ds1302_Byte(unsignedchardat)//從低字節(jié)開始寫入 60 unsignedchar61 SCK=62 for63 64 if(dat& //等價(jià)于if((addr&0x01)65 66 //#defineSDA_SE

溫馨提示

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

評(píng)論

0/150

提交評(píng)論