1004144584課程設(shè)計論文印張計數(shù)器設(shè)計_第1頁
1004144584課程設(shè)計論文印張計數(shù)器設(shè)計_第2頁
1004144584課程設(shè)計論文印張計數(shù)器設(shè)計_第3頁
1004144584課程設(shè)計論文印張計數(shù)器設(shè)計_第4頁
1004144584課程設(shè)計論文印張計數(shù)器設(shè)計_第5頁
已閱讀5頁,還剩13頁未讀 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、印張計數(shù)器設(shè)計一設(shè)計任務要求1能夠進行6位數(shù)碼顯示,顯示當前的印張數(shù);2能夠進行印數(shù)的預置;3能夠進行正/反計數(shù);4能夠模擬機械手取出次品;5當計數(shù)結(jié)束時,可以報警;二硬件設(shè)計總圖80c514個led顯示印張計數(shù)器運作狀態(tài)鍵盤輸入端口6個七段數(shù)碼管顯示數(shù)據(jù)復位監(jiān)控輸入印張計數(shù)中斷信號輸入晶振時鐘輸入電源led指示燈三硬件部分分析說明1)、顯示部分實驗箱提供了6位8段碼led顯示電路,只要按地址輸出相應數(shù)據(jù),就可以實現(xiàn)對顯示器的控制。顯示共有6位,用動態(tài)方式顯示。8位段碼、6位位碼是由兩片74ls374輸出。位碼經(jīng)mc1413或uln2003倒相驅(qū)動后,選擇相應顯示位。在實驗箱中8位段碼輸出地址

2、為0x004h,位碼輸出地址為0x002h。此處x 是由key/led cs決定,參見地址譯碼。做鍵盤和led實驗時,需將key/led cs 接到相應的地址譯碼上。以便用相應的地址來訪問。將key/led cs接到cs0上,則段碼地址為08004h,位碼地址為08002h。2)、鍵盤部分1 預設(shè)初始計數(shù)值:可通過數(shù)字鍵鍵入所需計量的印張數(shù),按下“確定(a)”鍵后開始。2 正向反向計數(shù):可通過鍵盤上的正向(b)反向(c)鍵切換正向計數(shù)或者反向計數(shù)。當選擇正向計數(shù)時,顯示屏顯示從0開始,每印刷一張,數(shù)值加1,直到遇到暫?;蛘叩竭_預設(shè)值時停止計數(shù);當選擇反向計數(shù)時,顯示屏從預設(shè)值開始,每印刷一張,

3、數(shù)值減1,直到遇到暫停或者到達0時停止計數(shù)。3次品報告:當按下鍵盤上次品鍵(d)時,代表出現(xiàn)次品,此時直流電機停止運轉(zhuǎn),步進電機緩慢轉(zhuǎn)動一周,代表機械手取出次品,之后直流電機恢復運轉(zhuǎn)。 4 報警提示:當計數(shù)為0或者到預設(shè)值時,停止計數(shù),發(fā)出報警,此時l2亮。 5 復位鍵(f)78945 6 1 2 3 0feabcd確定正計反計次品 數(shù)字復位顯示屏四源程序#include <reg51.h>#define ledlen 6/用6個八段管xdata unsigned char outbit _at_ 0x8002; / 位碼輸出+列掃描地址xdata unsigned char ou

4、tseg _at_ 0x8004; / 段碼輸出xdata unsigned char in _at_ 0x8001; / 行掃描地址入口xdata unsigned char cs0832 _at_ 0x9000;/產(chǎn)生電壓啟動直流電機xdata unsigned char control _at_ 0xa003;/control=0832-8255內(nèi)部指令xdata unsigned char ctl _at_ 0xa000; /產(chǎn)生電流啟動步進電動機code unsigned char ledmap = /數(shù)碼顯示管段碼 0x3f, 0x06, 0x5b, 0x4f, 0x66, 0x6

5、d, 0x7d, 0x07, 0x7f, 0x6f, 0x77, 0x7c, 0x39, 0x5e, 0x79, 0x71;code unsigned char keytable = /4*6鍵盤定義碼 0x16, 0x15, 0x14, 0xff,0x13, 0x12, 0x11, 0x10,0x0d, 0x0c, 0x0b, 0x0a,0x0e, 0x03, 0x06, 0x09,0x0f, 0x02, 0x05, 0x08,0x00, 0x01, 0x04, 0x07;/code,單片機中的romunsigned char ledbufledlen; / 顯示緩沖unsigned cha

6、r ch; /ch=getkeyint num,num1,num2,i;/num(用戶輸入數(shù))num1(正計)num2(反計)sbit led1 = p10;/正計指示燈sbit led2 = p11;/反計指示燈sbit led3 = p12;/結(jié)束指示燈sbit speaker = p13; /喇叭接口/延時程序void delay(unsigned char cnt) unsigned char i; while (cnt- !=0) for (i=100; i !=0; i-);void delay3() /喇叭延時unsigned char l;for (l=0; l<100;

7、 l+);void delay2()/ unsigned char i,j; j = 30; do for(i=250;i!=0;i-); tmod=0x01; /*定時器0工作在模式1下(16位計數(shù)器)*/ th0=0xfd; tl0=0x65; tr0=1; /*啟動定時器*/ while(tf0=0); tr0=0; while(-j);/數(shù)碼管顯示void displayled() /數(shù)碼管顯示函數(shù) unsigned char i; unsigned char pos; pos = 0x20; / 從左邊開始顯示 for (i = 0; i < ledlen; i+) outbi

8、t = 0; / 關(guān)所有八段管 outseg =ledbufi; outbit = pos; / 顯示一位八段管 delay(1); pos >>= 1; / pos的數(shù)據(jù)右移一位 /鍵盤unsigned char testkey()/鍵盤掃描函數(shù)(本實驗屬行-列掃描方式)4*6矩陣式鍵盤 outbit = 0; / 列設(shè)為低電平0 return (in &0x0f); / 讀入鍵狀態(tài)(高四位不用)得到第幾行unsigned char getkey()/讀取鍵值函數(shù) unsigned char pos; unsigned char i; unsigned char k; i

9、 = 6;/i代表第幾列 pos = 0x20; / 得到第幾列 do outbit = pos;/ pos >>= 1;/向下一列掃描 k = in & 0x0f; while (-i != 0) && (k = 0); / 鍵值 = 列 x 4 + 行 if (k != 0) i *= 4; if (k & 2)i += 1; else if (k & 4)i += 2; else if (k & 8)i += 3; outbit = 0; do delay(10); while (testkey(); / 等鍵釋放 return

10、(keytablei); / 取出鍵碼 else return(0xff);/步進電動機void stepmotor() unsigned char ctl18=0x01,0x03,0x02,0x06,0x04,0x0c,0x08,0x09;/a-ab-b-bc-c-cd-d-da-a/雙八拍,一個周期轉(zhuǎn)60度,8*7.5 unsigned int i,j; ctl = 0;/步進電動機初始化-無電流 while(1) for(j=0;j<6;j+) for (i=0;i<8;i+) displayled(); ctl = ctl1i; delay2(); displayled()

11、; break;/中斷void extint0() interrupt 0 num1+; num2-;/正計void zhengji() tcon = 0x01; / 外部中斷0下降沿觸發(fā),定時/計數(shù)器控制寄存器,int0=p3.2外部中斷0輸入 ie = 0x81; / 打開外部中斷允許位(ex0)及總中斷允許位(ea) cs0832 = 0xff; /直流電動機轉(zhuǎn) while (num1<=num) if(num1<num) ledbuf5 = ledmapnum1%10; ledbuf4 = ledmapnum1/10%10; ledbuf3 = ledmapnum1/100

12、%10; ledbuf2 = ledmapnum1/1000%10; ledbuf1 = ledmapnum1/10000%10; ledbuf0 = ledmapnum1/1000000%10; displayled(); else if(num1=num) cs0832 = 0x80; /直流電動機停 led1 = 1; ledbuf5 = ledmapnum%10; ledbuf4 = ledmap(num/10)%10; ledbuf3 = ledmap(num/100)%10; ledbuf2 = ledmap(num/1000)%10; ledbuf1 = ledmap(num/1

13、0000)%10; ledbuf0 = ledmap(num/1000000)%10; displayled(); break; if (testkey() ch=getkey(); if(ch=0x0d) /按下次品鍵 cs0832 = 0x80; /直流電動機停 displayled(); for(i=0;i<10;i+) speaker = 0; delay3(); speaker = 1; delay3(); displayled(); stepmotor(); cs0832 = 0xff; else if(ch=0x0f) goto then; led3 = 1; led1 =

14、0; led2 =0; while(1) ledbuf5 = ledmapnum%10; ledbuf4 = ledmap(num/10)%10; ledbuf3 = ledmap(num/100)%10; ledbuf2 = ledmap(num/1000)%10; ledbuf1 = ledmap(num/10000)%10; ledbuf0 = ledmap(num/1000000)%10; displayled(); speaker = 0; delay3(); speaker = 1; delay3(); if (testkey()ch=getkey();ch=0x0f;then:b

15、reak; /反計void fanji() unsigned char i; tcon = 0x01; / 外部中斷0下降沿觸發(fā) ie = 0x81; / 打開外部中斷允許位(ex0)及總中斷允許位(ea) cs0832 = 0xff; /直流電動機轉(zhuǎn) do if (num2>0) ledbuf5 = ledmapnum2%10; ledbuf4 = ledmap(num2/10)%10; ledbuf3 = ledmap(num2/100)%10; ledbuf2 = ledmap(num2/1000)%10; ledbuf1 = ledmap(num2/10000)%10; ledb

16、uf0 = ledmap(num2/1000000)%10; displayled(); else if(num2=0) led1 = 1; for(i=0;i<6;i+) ledbufi = ledmap0; displayled(); cs0832 = 0x80; /直流電動機停 break; if (testkey() ch=getkey(); if(ch=0x0f) goto then; else if(ch=0x0d) /按下次品鍵d cs0832 = 0xaf; /直流電動機停 for(i=0;i<10;i+) speaker = 0; delay3(); speake

17、r = 1; delay3(); displayled(); stepmotor(); cs0832 = 0xff; /步進電動機轉(zhuǎn) while(num2>=0); led3 = 1; led1 =0; led2 =0; while(1) ledbuf5 = ledmap0; ledbuf4 = ledmap0; ledbuf3 = ledmap0; ledbuf2 = ledmap0; ledbuf1 = ledmap0; ledbuf0 = ledmap0; displayled(); speaker = 0; delay3(); speaker = 1; delay3(); if

18、(testkey()ch=getkey();ch=0x0f; then: break; /主函數(shù)void main() unsigned char i=0xff,j; unsigned char no6;/每按一個數(shù)字鍵的緩沖 unsigned char ch;/ ledbuf1 = 0; control = 0x82;/8255內(nèi)部指令 cs0832 = 0x80; /直流電動機停 led1 =0; led2 =0; led3 =0; for(j=0;j<6;j+) ledbufj = 0x00;/- noj=0xff; displayled();/顯示- while (1) displayled(); if (testkey() ch=getkey(); if(ch<0x0a) /輸入數(shù)據(jù) i+; ledbuf

溫馨提示

  • 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

提交評論