版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
第六部分單片機接口電路設計26.1項目一:220V控制電路由于單片機是3.3V~5V供電系統(tǒng),生活中經常要用單片機控制更高電壓(12V、220V、380V等)的器件如:電燈、電機、熱水器等。這時要有相應電路做隔離如:繼電器、可控硅等。6.1.1繼電器控制電路圖6.1.1為繼電器控制電路。當P3.0輸出低電平時,PNP三極管導通,繼電器的繼圈吸合(常開點閉合);當P3.0輸出高電平時,PNP三極管截止,繼電器斷開(常開點斷開)。當繼電器吸合或繼開瞬間,在繼電器線圈兩端會產生高于+5V的感應電壓疊加在PNP的E極,可能會燒壞PNP三極管,在繼電器線圈兩端并一個1N4007續(xù)流二極管(產生的感應電流將會通過1N4007流向+5V電源)用于保護PNP三極管。(Proteus庫中的元件名:繼電器:OZ-SH-105D;電燈:LAMP;二極管:1N4007;220V電源:VSINE(220V,1HZ))。36.1項目一:220V控制電路由于單片機是3.3V~5V供電系統(tǒng),生活中經常要用單片機控制更高電壓(12V、220V、380V等)的器件如:電燈、電機、熱水器等。這時要有相應電路做隔離如:繼電器、可控硅等。6.1.1繼電器控制電路圖6.1.1為繼電器控制電路。當P3.0輸出低電平時,PNP三極管導通,繼電器的繼圈吸合(常開點閉合);當P3.0輸出高電平時,PNP三極管截止,繼電器斷開(常開點斷開)。當繼電器吸合或繼開瞬間,在繼電器線圈兩端會產生高于+5V的感應電壓疊加在PNP的E極,可能會燒壞PNP三極管,在繼電器線圈兩端并一個1N4007續(xù)流二極管(產生的感應電流將會通過1N4007流向+5V電源)用于保護PNP三極管。(Proteus庫中的元件名:繼電器:OZ-SH-105D;電燈:LAMP;二極管:1N4007;220V電源:VSINE(220V,1HZ))?!纠?.1.1】硬件電路如圖6.1.1所示,設計一個220V控制電路,采用單片機控制電燈亮滅。通過P1.0的按鍵控制P3.0的三極管,從而達到控制電燈LAMP的目的。5#include<REGX51.H>sbitkey=P1^0;sbitLamp=P3^0;voiddelay(unsignedinta){while(a--);}voidmain(){while(1){if(!key){delay(10000);if(!key){Lamp=!Lamp;}while(!key);}}}6.1.2可控硅控制電路
圖6.1.2為可控硅控制電路。當P3.0輸出低電平時,光耦MOC3051的4腳和6腳導通,220V電壓經過100歐電阻和光耦流向可控硅L4004L3的G端,可控硅導通;當P3.0輸出低電平時,光耦MOC3051的4腳和6腳不導通,220V電壓無法流向可控硅L4004L3的G端,可控硅不導通。圖6.1.2可以在可控硅兩端并上RC吸收回路,當可控硅導通時電容放電,避免可控硅承受過高電壓。(Proteus庫中的元件名:繼電器:OZ-SH-105D;電燈:LAMP;二極管:1N4007;220V電源:VSINE(220V,1HZ))。86.2項目二:PWM的電機轉速控制
PWM(PulseWidthModulation,脈沖寬度調制)調速系統(tǒng)中,一般可以采用定寬調頻、調寬調頻、定頻調寬3種方法改變控制脈沖的占空比,前兩種方法在調速時改變了控制脈寬的周期,從而引起控制脈沖頻率的改變,當該頻率與系統(tǒng)的固有頻率接近時將會引起振蕩。為避免之,設計采用定頻調寬改變占空比的方法來調節(jié)直流電動機電樞兩端電壓
【例6.2.1】硬件電路如圖6.2.1所示,設計一個電機轉速控制器:5個按鍵分別控制電機的加速、減速、正轉、反轉、停止;電機轉速10級;采用共陰數碼管顯示轉速級別。采用單片機定時計數器0,工作于方式1。10#include<REGX51.H>sbitUP=P1^0;//按鍵加速sbitDOWN=P1^1;//按鍵減速sbitRIGHT=P1^2;//按鍵正轉sbitLEFT=P1^3;//按鍵反轉sbitSTOP=P1^4;//按鍵停止sbitIN1=P2^5;//L298輸入端1sbitIN2=P2^6;//L298輸入端2sbitENA=P2^7;//L298使能端,用于PWM調速;unsignedcharnum[10]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};//數碼管代碼表charPWM=5;//占空比;charMOTO_STATE;//電機狀態(tài);charcounter;11voiddelay(unsignedinta)//延時程序,用于按鍵防抖;{ while(a--);}voidINIT()//初始化定時計數器{TMOD=0x01;//設置定時計數器0工作于方式1;TH0=(65536-1000)>>8;TL0=(65536-1000);//定時1000us,即1ms;TR0=1;//啟動定時計數器0;ET0=1;//使能定時計數器0中斷;EA=1;//中斷總開關;}12voidkey_scan()//按鍵掃描程序;{if(!UP){delay(1000);if(!UP)//加快轉速;{PWM++;if(PWM>9)PWM=9;//轉速10級;}while(!UP);}if(!DOWN)//降低轉速;{delay(1000);if(!DOWN){PWM--;if(PWM<=0)PWM=0;}while(!DOWN);}13if(!RIGHT)//正轉;{delay(1000);if(!RIGHT){MOTO_STATE=1;}while(!RIGHT);}if(!LEFT)//反轉;{delay(1000);if(!LEFT){MOTO_STATE=2;}while(!LEFT);}14if(!STOP)//停止;{delay(1000);if(!STOP){MOTO_STATE=0;}while(!STOP);}}voidmoto_ctrl()//電機狀態(tài)控制;{ switch(MOTO_STATE){case0:IN1=1;IN2=1;break;//電機停止轉動;case1:IN1=1;IN2=0;break;//電機正轉;case2:IN1=0;IN2=1;break;//電機反轉;default:MOTO_STATE=0;break;}}15voidmain(){INIT();//調用初始化函數,設置定時計數器0的工作狀態(tài);while(1){key_scan();//調用鍵盤掃描函數;moto_ctrl();//調用電機狀態(tài)控制函數;P3=num[PWM];//顯示;}}voidTimer0()interrupt1//定時計數器0中斷服務函數;{TH0=(65536-1000)/256;TL0=(65536-1000)%256;counter++;//counter每1ms自加1;if(counter>=10){counter=0;}if(counter<PWM)ENA=1;//占空比調節(jié);if(counter>=PWM)ENA=0;}
【例6.3.1】硬件電路如圖6.3.1所示,設計一個雙機通信程序:A機通過串行口向B機發(fā)送數據,B機接收到數據后在數碼管顯示;當A機的K1按下后B機顯示的數據加1,當A機的K2按下后B機顯示的數據減1;當B機接收到9時,向A機發(fā)送0xaa,A機收到0xaa后讓P1.7對應的LED亮;當B機接收到的數據不是9時,向A機發(fā)送0x55,A機收到數據不是0xaa時,LED滅。6.3項目三:雙機通信17A機程序:#include<REGX51.H>sbitUP=P1^0;//按鍵加sbitDOWN=P1^1;//按鍵減sbitLED=P1^7;charsend_data;unsignedchari;voiddelay(unsignedinta)//延時程序;{while(a--);} voidINIT()//初始化串行口中斷;{TMOD=0X20;//設置定時計數器1工作于方式2;TR1=1;TH1=0Xfd;TL1=0Xfd;//波特率為9600bpsSCON=0X50;//方式1,REN=1;ES=1; //使能串口中斷;EA=1; //中斷總開關開啟。}18voidkey_scan()//按鍵掃描程序;{ if(!UP) { delay(1000); if(!UP)//發(fā)送數字加; {send_data++;if(send_data>9)send_data=9;} while(!UP); } if(!DOWN)//發(fā)送數字減; { delay(1000); if(!DOWN) {send_data--;if(send_data<=0)send_data=0;} while(!DOWN); }}19voidmain(){INIT();while(1){ key_scan();//調用按鍵掃描函數;SBUF=send_data;delay(1000); if(i==0xaa)LED=0;elseLED=1;//A機接收到[誰接收?A機還是B機]0xaa時LED亮;}}voidSerial()interrupt4{if(RI){RI=0;i=SBUF;}//當B機接收到9時,會發(fā)0xaa回A機;elseTI=0;}20A機程序:#include<REGX51.H>sbitUP=P1^0;//按鍵加sbitDOWN=P1^1;//按鍵減sbitLED=P1^7;charsend_data;unsignedchari;voiddelay(unsignedinta)//延時程序;{while(a--);} voidINIT()//初始化串行口中斷;{TMOD=0X20;//設置定時計數器1工作于方式2;TR1=1;TH1=0Xfd;TL1=0Xfd;//波特率為9600bpsSCON=0X50;//方式1,REN=1;ES=1; //使能串口中斷;EA=1; //中斷總開關開啟。}21B機程序:#include<REGX51.H>unsignedcharnum[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};//數碼管代碼表unsignedchari;voiddelay(unsignedinta)//延時程序;{while(a--);}voidINIT(){TMOD=0X20;//設置定時計數器1工作于方式2;TR1=1;TH1=0Xfd;TL1=0Xfd;//波特率為9600bpsSCON=0X50;//方式1,REN=1;ES=1; //使能串口中斷;EA=1; //中斷總開關開啟。}22voidmain(){INIT();while(1){P1=num[i];if(i==9)SBUF=0xaa;//當B機收到[誰收到?A機還是B機]9時,發(fā)送0xaa;A機收到0xaa時LED亮;elseSBUF=0x55;//否則發(fā)送0x55,A機收到0x55時LED滅;delay(1000);}}voidSerial()interrupt4{i=SBUF;//接收數據;if(RI)RI=0;elseTI=0;//清零TIRI;}
液晶顯示器是利用液晶能改變光線傳輸方向的特性來實現顯示信息的器件。由于其體積小、功耗低、顯示內容豐富等優(yōu)點,因此在生活中的運用十分廣泛。LCD1602是2*16的點陣字符型顯示器,可以顯示2行,每行16個字符,如圖6.4.1所示。6.4項目四:液晶顯示器接口指令功能:清除屏幕,將顯示緩沖區(qū)的內容全部寫入字符代碼為20H的“空格”,將光標復位后移到屏幕的左上角。(1)清屏控制信號指令內容RSRWD7D6D5D4D3D2D1D00000000001(2)光標復位控制信號指令內容RSRWD7D6D5D4D3D2D1D0000000001X指令功能:光標復位,移到屏幕的左上角;AC地址計數器清零;DDRAM的內容不變。指令功能:設置當寫入一個字節(jié)后,光標的移動方向和后面的內容是否移動。(3)顯示內容的移動方式控制信號指令內容RSRWD7D6D5D4D3D2D1D000000001I/DSA、當I/D=1時,讀或寫完一個數據操作后,地址指針AC加l,光標右移1格。當I/D=0時,讀或寫完一個數據操作后,地址指針AC減1,光標左移1格。B、當S=1時,寫一個數據操作后,整屏顯示左移(I/D=1)或右移(I/D=0),光標不移動;當S=0時,寫一個數據操作后,整屏顯示不移動。(4)顯示器開/關控制控制信號指令內容RSRWD7D6D5D4D3D2D1D00000001DCB指令內容:0x08~0x0f。指令功能:A、當D=0時,不顯示DDRAM中的內容;當D=1時,顯示DDRAM中的內容。B、C為光標控制開關。C=1,顯示光標;C=0,不顯示光標。C、字符閃爍控制開關。B=1,光標出現的字符會閃爍;B=0,表示字符不閃爍。(5)光標移位命令控制信號指令內容RSRWD7D6D5D4D3D2D1D0000001S/CR/LXX指令內容:0x10~0x1f。指令功能:光標移動或整幕移動。A、當S/C=1時,整屏字幕平移1個字符位;當S/C=0時,僅光標平移1個字符位。B、R/L=1,表示光標右移;R/L=0,表示光標左移。(6)功能設置命令控制信號指令內容RSRWD7D6D5D4D3D2D1D000001DLNFXX指令內容:0x20~0x3f。指令功能:A、當DL=1時,數據接口為8位;當DL=0時,數據接口為4位,使用D7~D4位分兩次送入1個完整的字符數據。B、當N=1時,采用雙行顯示;當N=0時,采用單行顯示。C、當F=1時,采用5×10點陣顯示;當F=0時,采用5×7點陣顯示。(7)字庫CGRAM地址設置命令控制信號指令內容RSRWD7D6D5D4D3D2D1D00001CGRAM的地址指令編碼:0x40~0x7f。指令功能:設置用戶自定義的要讀/寫數據的CGRAM地址;地址使用(D5~D0)送出,可設定0~63共64個地址。(8)顯示緩沖區(qū)DDRAM地址設置命令控制信號指令內容RSRWD7D6D5D4D3D2D1D0001DDRAM的地址指令編碼:0x80~0xff。指令功能:設定當前要讀/寫數據的顯示緩沖區(qū)DDRAM地址,地址使用(D6~D0)送出,可設定0~127共128個地址(9)忙碌標志位BF和地址計數器AC的值控制信號指令內容RSRWD7D6D5D4D3D2D1D000BFAC的值指令功能:A、當BF=1時,不接收單片機送來的指令或數據;當BF=0時,可以接收命令或數據。B、讀取數據的內容,D6~D0的值表示AC值。(10)寫數到CGRAM或DDRAM控制信號指令內容RSRWD7D6D5D4D3D2D1D010寫入數據指令功能:先設定CGRAM或DDRAM的當前地址,再將數據寫入D7~D0中,使液晶顯示出字形或用戶自定義的字符圖形。(11)讀CGRAM或DDRAM命令控制信號指令內容RSRWD7D6D5D4D3D2D1D011讀出數據先設定CGRAM或DDRAM的當前地址中,讀取其中的數據。在使用液晶時須進行初始化,步驟如下:(1)對液晶進行清屏,對DDRAM顯示緩沖區(qū)的內容全寫入空格,光標復位加到顯示器左上角,AC地址計數器清零。(2)功能設置,選擇LCD1602與單片機連接的方式(可選擇8位),設置顯示行數(一般為2行),設置字形大?。?*7點陣)。(3)顯示器開/關控制,控制光標顯示與否,字符閃爍與否。(4)設置顯示內容的移動方式,設定光標移動方向和當前內容是否移動。6.4.2液晶顯示接口電路與編程【例6.4.1】硬件電路如圖6.4.2所示,設計一個LCD1602液晶顯示程序:在第一行從第一個位置開始顯示“GUET”;第二行第5個位置顯示1個數字,該數字從0~9自加;第二行第8個位置顯示光標閃爍。36#include<REGX51.H>unsignedcharnum[10]={'0','1','2','3','4','5','6','7','8','9'};//定義液晶端口#defineLCD_DATAP3sbitRS=P2^5;sbitRW=P2^6;sbitE=P2^7;voiddelay(unsignedinta)//延時函數;{while(a--);}voidlcd_busy()//檢查LCD忙函數;{LCD_DATA=0xff;RS=0;RW=1;E=0;E=1;while(LCD_DATA&0X80){E=0;E=1;};//忙等待;}37voidwrite_com(unsignedcharcommand)//寫命令函數;{lcd_busy();E=0;RS=0;RW=0;E=1;LCD_DATA=command;E=0;}voidwrite_data(unsignedcharlcd_data)//寫數據函數;{lcd_busy();E=0;RS=1;RW=0;E=1;LCD_DATA=lcd_data;E=0;}38voidinit_lcd()//初始化LCD函數;{write_com(0x01);//清屏;write_com(0x38);//5*7點陣;write_com(0x0c);//顯示器開,關標關閉,字符不閃爍。write_com(0x06);//字符不動,光標自動向右移1格。}voidmain(){unsignedchari;bitflag;init_lcd();39while(1){write_com(0x80);//第一行第1個地址;write_data('G');//顯示G;write_data('U');//顯示U;write_data('E');//顯示E;write_data('T');//顯示T;write_com(0xc5);//第二行第5個地址;write_data(num[i++]);//顯示數字自加;if(i>9)i=0;delay(50000);write_com(0xc8);//第二行第8個地址;flag=!flag;if(flag)write_data(0xff); //光標elsewrite_data(0xfe);//反白}}6.5.1LTC1456的介紹
LTC1456是一個單電源供電,軌對軌輸出,12位數字模擬轉換器(DAC)。它包含一個軌對軌輸出緩沖放大器和一個易于使用的線級聯串行接口。LTC1456內部包含一個2.048V參考電壓,可以輸出電壓從0V到4.095V。它的工作電源從4.5V到5.5V,散熱2.2mw。LTC1456的引腳圖如圖6.5.1所示,其各引腳功能如下說明:6.5項目五:基于LTC1456的12位數模轉換41CLK:串行接口的時鐘端。DIN:串行數據輸出端。串行時鐘的上升沿時,DIN的數據鎖存到移位寄存器中。CS/LD:串行接口使能和加載控制端。當CS/LD低電平時,數據被鎖入。當CS/LD拉高時,加載的數據從移位寄存器的傳入到DAC寄存器中并更新DAC輸出。當CS/LD為高電平時,內部時鐘禁用。DOUT:當串行時鐘的上升沿時移位寄存器的輸出有效。GND:電源地。CLR:清除輸入的數據。當引腳拉低時,將異步清零內部移位寄存器和DAC寄存器,當引腳拉高時,芯片正常運行。vout高(引腳7):緩沖DAC輸出。VCC(引腳8):正電源輸入。4.5V≤VCC≤5.5v。【例6.5.1】硬件電路如圖6.5.1所示,使用LTC1456輸出鋸齒波:43#include<REGX51.H>sbitDIN=P1^3;//定義LTC1456的DIN端口sbitCK=P1^5;//定義LTC1456的CLK端口sbitCS=P1^7;//定義LTC1456的CS端口voidDA_out(floatdat,bitflag){ unsignedchari=0; unsignedintdat_buf; if(flag){dat_buf=dat*1000;flag=0;} elsedat_buf=(int)dat; CS=1; CS=0; for(i=0;i<4;i++)dat_buf<<=1;//向左移4位,高4位無用; for(i=0;i<12;i++)//由高到低寫入12位數據; {
DIN=(bit)(dat_buf&0x8000); CK=1; dat_buf<<=1;//向左移位; CK=0;} CS=1; CS=0;}44voidmain(){ unsignedinti=0; CK=0; CS=0; while(1) { // DA_out(1.234,1); DA_out(i,0); i++;if(i>100)i=0; }}6.6.1TLC2543的介紹
TLC2543是TI公司生產的11通道12位開關電容逐次逼近型串行A/D轉換器。在工作溫度范圍內10μs轉換時間;采樣率為66kbps;線性誤差+1LSB(max);有轉換結束(EOC)輸出;具有單、雙極性輸出;可編程的MSB或LSB前導;可編程的輸出數據長度。TLC2543的引腳排列如圖6.6.1所示,其各引腳功能如下說明:46AIN0~AIN10:模擬輸入端。REF+:正基準電壓端。REF-:負基準電壓端。CS:為片選端。SDI:串行數據輸入端。SDO:A/D轉換結果的三態(tài)串行輸出端。EOC:轉換結束端。CLK:I/O時鐘。VCC:正電源4.5V~5.5V。GND:電源地。(1)控制字的格式6.6.2TLC2543的接口電路與編程(2)轉換過程【例6.6.2】硬件電路如圖6.6.3所示,采用TLC2543的通道5對外部電壓進行采集并通過LCD1602進行顯示。根據圖6.6.2時序圖設置TLC2543的輸出端DATAOUT采用12位的輸出格式,輸入端DATAINPUT應設置為01011000。49#include<REGX51.H>#include<LCD1602.H>sbitSDO=P1^3;sbitSDI=P1^4;sbitCS=P1^5;sbitCLK=P1^6;sbitEOC=P1^7;unsignedintad;floatvotage;unsignedintread_ad(unsignedcharchannel){ unsignedchari; unsignedintad=0; unsignedintad_value;unsignedcharCH_PORT;50CS=1;CS=0; CLK=0; CH_PORT=(channel<<4)|0x0c; for(i=0;i<12;i++) { if(SDO)ad|=0x01; SDI=(bit)(CH_PORT&0x80); CLK=1; CLK=0; CH_PORT<<=1; ad<<=1; } CS=1; ad_value=ad>>1; return(ad_value);}51voiddisplay(){write_com(0x80);write_data('A');write_data('D');write_data(num[5]);write_data(':');write_com(0x85);write_data('.');write_com(0x89);write_data('V');write_
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
評論
0/150
提交評論