補充 單片機應用系統(tǒng)設計實例_第1頁
補充 單片機應用系統(tǒng)設計實例_第2頁
補充 單片機應用系統(tǒng)設計實例_第3頁
補充 單片機應用系統(tǒng)設計實例_第4頁
補充 單片機應用系統(tǒng)設計實例_第5頁
已閱讀5頁,還剩56頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

單片機應用系統(tǒng)設計實例1.

8051系列單片機實現(xiàn)計算器功能2.簡易波形發(fā)生器3.簡易廣告屏設計4.尋跡小車的設計5.無線呼叫系統(tǒng)設計1.8051單片機實現(xiàn)計算器功能一

設計目標和實現(xiàn)方法滿足計算器要求,進行加減乘除運算;打開計數(shù)器時,初始顯示數(shù)字為0123;實現(xiàn)簡單的數(shù)據(jù)運算,不支持連續(xù)運算;仿真和調(diào)試要用到Protues

和Keil

軟件。二方案論證與設計鍵盤包括0到9十個數(shù)字鍵,加減乘除四個符號鍵,清除鍵和等號鍵,共16個按鍵;鍵盤選用4x4行列式鍵盤結(jié)構(gòu)(如下圖);輸入模塊:鍵盤掃描;數(shù)字大小范圍為4位,

選用4個LED數(shù)碼管

顯示數(shù)據(jù)和結(jié)果;三硬件電路設計(1)主要器件:采用8051

單片機,它能夠滿足數(shù)據(jù)的采集、控制和數(shù)據(jù)處理的需求,顯示用輸入采用按鍵方式的4

段LED

數(shù)碼管;(2)功能和操作:加減乘除運算和顯示。步驟如下:①上電后,屏幕初始化,顯示初始數(shù)值0123;②計算。依次數(shù)字鍵,符號鍵,數(shù)字鍵,等號鍵,屏幕上顯示出計算結(jié)果;③如果要再次計算,可以按下“on/c”鍵清0,或者按下單片機的復位鍵,重新初始化。四軟件設計模塊化程序設計是單片機應用中最常用的程序設計方法;模塊化程序設計的中心思想是把一個復雜應用程序按整體功能劃分成若干相對獨立的程序模塊,各模塊可以單獨

設計,編程和調(diào)試,然后組合起來;本系統(tǒng)的程序模塊主要分為主程序,鍵值獲取程序和處理子程序等,其流程圖分別如下圖所示:主程序流程圖定時中斷子程序流程圖按鍵處理子程序流程圖主程序:voidmain(){inint();while(1){if(key)pkey();}}按鍵處理子程序:voidpkey() {switch(key){casezero:modify_LED(0);break;caseone:modify_LED(1);break;casetwo:modify_LED(2);break;casethree:modify_LED(3);break;casefour:modify_LED(4);break;casefive:modify_LED(5);break;casesix:modify_LED(6);break;caseseven:modify_LED(7);break;caseeight:modify_LED(8);break;casenine:modify_LED(9);break;caseclear:key_ptr=3;modify_LED(17);op1=op2=0;break;caseadd:key_ptr=3;modify_LED(10);break;casesub:key_ptr=3;modify_LED(11);break;casemux:key_ptr=3;modify_LED(12);break;casediv:key_ptr=3;modify_LED(13);break;caseequ:key_ptr=3;modify_LED(14);break;default:break;}key=0;}voidmodify_LED(ucharx){if(key_ptr==3){LED[0]=LED[1]=LED[2]=space;}else{LED[0]=LED[1];LED[1]=LED[2];LED[2]=LED[3];}LED[3]=x;key_ptr--;if(x<=9&&x>=0)op1=op1*10+x; elseif(x>=10&&x<=13){LED[0]=LED[1]=LED[2]=LED[3]=space; key_ptr=3;op2=op1;op1=0;switch(x) {case10:op3='+';break;case11:op3='-';break; case12:op3='*';break; case13:op3='/';break; default:break; }}elseif(x==14){switch(op3){case'+':op2=op1+op2;break;case'-':op2=op2-op1;break;case'*':op2=op1*op2;break;case'/':op2=op2/op1;break;default:break;}result_pr();} key_ptr&=0x03;}定時中斷子程序:voidtimer0()interruptTF0_VECTOR//中斷檢測鍵盤鍵值{TH0=(65536-2500)>>8;TL0=(65536-2500)&0xff;if((key_port&0xf0)!=0xf0) //有鍵按下

{if(key_port==xkey){ckey++; //去抖動

if(ckey>10) {key=xkey; ckey=0;}}else{xkey=key_port; ckey=0;}} wx_port=0xff; dm_port=dm[LED[wx_ptr]];//更新段碼wx_port^=(1<<wx_ptr); //更新位選

wx_ptr++;wx_ptr&=3; //指向下一位}2.簡易波形發(fā)生器設計

波形發(fā)生器是一種在測量、控制領域經(jīng)常要使用到的信號發(fā)生裝置,可以按照要求輸出相應波形。其主要功能如下:①輸出波形可調(diào);②輸出復制和頻率可調(diào)。設計思路:以正弦波為例,一條正弦波曲線可以看做是一個個點的集合,我們可以按照一定的時間間隔輸出這些點的電壓值,在輸出端就可以得到一個正弦波,時間間隔越小,輸出的波形就越接近一個正弦波。一

硬件設計這個實現(xiàn)方案使用了以下元器件:①主控單元:AT89s52單片機;②顯示界面:液晶屏幕lcd1602;③功能電路:8分辨率D/A轉(zhuǎn)換芯片DAC0832,運算放大器,與非門,按鍵等。簡易波形發(fā)生器原理圖在上原理圖中:P1口作為LCD1602的數(shù)據(jù)輸入總線;P2.2~2.4作為LCD1602的讀/寫,使能控制線;P2.0~2.1作為DAC0832的控制線;P0口作為DAC0832的數(shù)據(jù)輸入總線;4個按鍵分別控制波形選擇,頻率+,頻率-,

在DAC0832的輸出端外接TL082集成運算放大

器,控制輸出波形的幅值。DAC0832是8分辨率的D/A轉(zhuǎn)換集成芯片,由8位輸入鎖存器,8位DAC寄存器,8位D/A轉(zhuǎn)換電路及轉(zhuǎn)換控制電路構(gòu)成。其引腳功能如下:D0~D7:8位數(shù)據(jù)輸入線,TTL電平,有效時間>90ns;ILE:數(shù)據(jù)鎖存允許控制信號輸入線,高電平有效;CS:片選信號輸入線,低電平有效;WR1:數(shù)據(jù)鎖存器寫選通輸入線,負脈沖有效;XFER:數(shù)據(jù)傳輸控制信號輸入線,低電平有效;WR2:DAC寄存器選通輸入線,負脈沖有效;IOUT1:電流輸出端1,其值隨DAC寄存器的內(nèi)容線性變化;IOUT2:電流輸出端2,其值與IOUT1值之和為一常數(shù);

Rfb:反饋信號輸入線,改變

Rfb端外接電阻值可調(diào)

整轉(zhuǎn)換滿量程精度;Vcc:電源輸入端,Vcc的范圍

為+5V~+15V;

VREF:基準電壓輸入線,VREF

的范圍-10V~+10V;AGND:模擬信號地DGND:數(shù)字信號地DAC0832管腳圖二

軟件設計主程序流程圖外部中斷子程序流程圖定時器中斷子程序流程圖主要程序舉例正弦波離散輸出表:ucharcodesine_tab[256]={ //輸出電壓從0到最大值(正弦波1/4部分) 0x80,0x83,0x86,0x89,0x8d,0x90,0x93,0x96,0x99,0x9c,0x9f,0xa2,0xa5,0xa8,0xab,0xae,0xb1,0xb4,0xb7,0xba,0xbc, 0xbf,0xc2,0xc5,0xc7,0xca,0xcc,0xcf,0xd1,0xd4,0xd6,0xd8,0xda,0xdd,0xdf,0xe1,0xe3,0xe5,0xe7,0xe9,0xea,0xec, 0xee,0xef,0xf1,0xf2,0xf4,0xf5,0xf6,0xf7,0xf8,0xf9,0xfa,0xfb,0xfc,0xfd,0xfd,0xfe,0xff,0xff,0xff,0xff,0xff,0xff, //輸出電壓從最大值到0(正弦波1/4部分) 0xff,0xff,0xff,0xff,0xff,0xff,0xfe,0xfd,0xfd,0xfc,0xfb,0xfa,0xf9,0xf8,0xf7,0xf6,0xf5,0xf4,0xf2,0xf1,0xef,0xee,0xec,0xea,0xe9,0xe7,0xe5,0xe3,0xe1,0xde,0xdd,0xda,0xd8,0xd6,0xd4,0xd1,0xcf,0xcc,0xca,0xc7,0xc5,0xc2, 0xbf,0xbc,0xba,0xb7,0xb4,0xb1,0xae,0xab,0xa8,0xa5,0xa2,0x9f,0x9c,0x99,0x96,0x93,0x90,0x8d,0x89,0x86,0x83,0x80, //輸出電壓從0到最小值(正弦波1/4部分) 0x80,0x7c,0x79,0x76,0x72,0x6f,0x6c,0x69,0x66,0x63,0x60,0x5d,0x5a,0x57,0x55,0x51,0x4e,0x4c,0x48,0x45,0x43, 0x40,0x3d,0x3a,0x38,0x35,0x33,0x30,0x2e,0x2b,0x29,0x27,0x25,0x22,0x20,0x1e,0x1c,0x1a,0x18,0x16,0x15,0x13, 0x11,0x10,0x0e,0x0d,0x0b,0x0a,0x09,0x08,0x07,0x06,0x05,0x04,0x03,0x02,0x02,0x01,0x00,0x00,0x00,0x00,0x00,0x00,//輸出電壓從最小值到0(正弦波1/4部分) 0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x02,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0a,0x0b,0x0d,0x0e,0x10, 0x11,0x13,0x15,0x16,0x18,0x1a,0x1c,0x1e,0x20,0x22,0x25,0x27,0x29,0x2b,0x2e,0x30,0x33,0x35,0x38,0x3a,0x3d, 0x40,0x43,0x45,0x48,0x4c,0x4e,0x51,0x55,0x57,0x5a,0x5d,0x60,0x63,0x66,0x69,0x6c,0x6f,0x72,0x76,0x79,0x7c,0x80};正弦波輸出程序:#defineDAdataP0 //DA數(shù)據(jù)端口voidsine_out() //正弦波輸出{ DAdata=sine_tab[wavecount++]; DA_S1=0;//打開8位輸入寄存器 DA_S1=1;//關(guān)閉8位輸入寄存器}主程序:voidmain(){uchari=0;DA_S2=0;//使DAC寄存器處于直通狀態(tài)

DAdata=0;DA_S1=1;//關(guān)閉8位輸入寄存器

init_lcd();waveform=0; TMOD=0x01;//設置定時器0為16位工作方式

IT0=1;//設置外部中斷0為下降沿觸發(fā)

ET0=1;//開定時器中斷

EX0=1;EA=1;while(1){}} 定時中斷子程序:voidtimer0()interrupt1{ TH0=THtemp; TL0=TLtemp; if(waveform==0)sine_out(); elseif(waveform==1)triangle_out(); elseif(waveform==2)square_out();}外部中斷子程序:voidkey_int0()interrupt0{ucharkeytemp;uinttotal_freq;//總頻率

EA=0;TR0=0;//關(guān)總中斷與定時器

delay(5);//延時

if(key==0)//有按鍵按下而引發(fā)中斷

{keytemp=P3&0xf0;//檢測按鍵狀態(tài)switch(keytemp){case0xe0: //選擇波形waveform++;if(waveform>2)waveform=0; break;case0xd0:wavefreq[waveform]++;if(wavefreq[waveform]>10)wavefreq[waveform]=1; break;

case0xb0:wavefreq[waveform]--;if(wavefreq[waveform]<1)wavefreq[waveform]=10;break;case0x70:DA_S2=1;break;}THtemp=waveTH[waveform*10+(wavefreq[waveform]-1)];//方括號中選取第幾個數(shù)后,并把該值賦給T_tempTLtemp=waveTL[waveform*10+(wavefreq[waveform]-1)];total_freq=wavefreq[waveform]*freq_unit[waveform];lcd_hang2[5]=total_freq%10+0x30;total_freq/=10;lcd_hang2[4]=total_freq%10+0x30;total_freq/=10;lcd_hang2[3]=total_freq%10+0x30;total_freq/=10;lcd_hang2[2]=total_freq%10+0x30;disp_lcd(0x80,&lcd_hang1[waveform*16]);//在第一行顯示disp_lcd(0xc0,lcd_hang2);//在第二行顯示

} wavecount=0;//計數(shù)清零

while(!key); EA=1;TR0=1;//開啟中斷與定時器}3.簡易廣告屏設計設計要求:基于51單片機設計一個電子廣告牌,其功能是滾動顯示一串字符。

設計思路:選用了8個LED點陣,組成一個大的

16*64的LED點陣。使用分時控制方法,用同一數(shù)據(jù)總線來控制8個點陣的顯示,減少對IO端口的需求。一

硬件設計右圖是一個8*8的集成LED點陣,該點陣有16個引腳,8個引腳控制點陣每行的選中,另外8個引腳控制點陣每列的選中,通過這16個引腳來控制點陣上每一個LED的亮滅。16X64LED點陣的廣告屏電路在上原理圖中:使用P2.7,P2.6,P2.5通過與非門連接3片74273作為片選引腳。則在某一時刻內(nèi)我們可以只選通其中一片D觸發(fā)器,發(fā)送數(shù)據(jù),圖中的兩片D觸發(fā)器對顯示屏上LED每行的選通進行控制。

D觸發(fā)器上使用了六個端口,其中四根線接到4-16譯碼芯片上控制每列的選通,另外兩根線控制4片譯碼器的選通,則可以實現(xiàn)對4*16=64列LED的選通控制。二

軟件設計要在LED屏上顯示漢字,首先要取得漢字的字模,本方案一個漢字所需要的存儲空間是32個字節(jié)。我們可以定義一個數(shù)組來存儲這個字模,如“武”的字模為:

char

list[]={0x20,0x20,0x20,0x60,0x24,0x3F,0x24,0x20,0x24,0x20,0xE4,0x1F,0x26,0x11,0x24,0x11,0x20,0x10,0xFF,0x03,0x20,0x1C,0x22,0x20,0x2C,0x40,0x20,0x80,0x20,0xE0,0x00,0x00}

我們使用軟件生成了所需漢字的字模之后,將這些字模存入程序的數(shù)組,運行程序,調(diào)用這些數(shù)組,這些漢字就顯示在屏幕上了。程序流程圖如右圖所示:主要程序:#definehang0XBYTE[0X7FFF]//定義端口#definehang1XBYTE[0XbFFF]#definelieXBYTE[0XDFFF]voidmain(){uchari,j,k;uintb=0;uchara;//控制移動間隔時間while(1){j=0;if(a>1)//移動間隔時間;取值0--255{a=0;b+=2;if(b>=512){b=0;for(i=0;i<64;i++){lie=i;hang0=0x00;hang1=0x00;} }for(i=0;i<64;i++){lie=i;for(k=0;k<5;k++){hang0=table[j+b];hang1=table[j+b+1];delay(2);hang0=0x00;hang1=0x00;}//清屏j+=2;}a++;}}4.尋跡小車的設計一

功能介紹本循跡小車將實現(xiàn)自動尋跡并沿黑線走向行進的功能。

小車由前后兩個電機分別控制前輪轉(zhuǎn)彎及后輪前進驅(qū)動,其中前輪由小型舵機帶動,使得系統(tǒng)減少了機械部分設計,使小車的轉(zhuǎn)向控制數(shù)字化,易于單片機進行控制。后輪使用普通直流電機,通過PWM信號調(diào)節(jié)小車前進車速。系統(tǒng)原理圖二

硬件介紹(1)

舵機簡介

舵機是一種位置伺服的驅(qū)動器,適用于角度不斷變化并可以保持的控制系統(tǒng)。小型舵機的工作電壓一般為4.8V或6V,轉(zhuǎn)速一般為0.22/60度或0.18/60度。工作原理:控制信號進入信號調(diào)制芯片,獲得直流偏置電壓;基準電路產(chǎn)生周期20ms,寬度1.5ms的基準信號;將直流偏置電壓與電位器的電壓比較獲得電壓差輸出;最后,電壓差的正負輸出到電機驅(qū)動芯片決定電機的正反轉(zhuǎn);以180度角度伺服為例,對應的控制關(guān)系是:

0.5ms--------------0度;

2.0ms-----------135度;

1.0ms------------45度;

2.5ms-----------180度;

1.5ms------------90度;(2)

黑線檢測傳感器的介紹

小車黑線檢測用紅外發(fā)射對管作為傳感器。其工作原理為:發(fā)射端發(fā)射紅外光,接收端接收物體反射信號,因為各種顏色對光的吸收和反射程度不同,黑色吸收紅外光,使得反射信號很弱,而白色反射紅外光使得反射信號相對發(fā)射信號損耗不大,接收端再將反射信號轉(zhuǎn)換為相應的電壓信號。傳感器的接收信號再經(jīng)過信號處理電路(如下頁圖)輸送給單片機。黑線信號檢測電路(3)

電機驅(qū)動原理簡介

溫馨提示

  • 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. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論