傳送帶產(chǎn)品計數(shù)器的設(shè)計LCD顯示_第1頁
傳送帶產(chǎn)品計數(shù)器的設(shè)計LCD顯示_第2頁
傳送帶產(chǎn)品計數(shù)器的設(shè)計LCD顯示_第3頁
傳送帶產(chǎn)品計數(shù)器的設(shè)計LCD顯示_第4頁
傳送帶產(chǎn)品計數(shù)器的設(shè)計LCD顯示_第5頁
已閱讀5頁,還剩11頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1、目錄摘要21 題目32 電路原理圖的設(shè)計32.1 傳送帶產(chǎn)品計數(shù)器(LED顯示)電路原理圖32.2 LED顯示模塊32.3 置數(shù)模塊43 軟件系統(tǒng)設(shè)計53.1 軟件系統(tǒng)的流程結(jié)構(gòu)53.2 C51程序53.3計數(shù)程序模塊84 仿真及調(diào)試115 總論11參 考 文 獻(xiàn)13致 謝14摘要MCS-51系列單片機(jī) LCD顯示 LCM16021 題目傳送帶產(chǎn)品計數(shù)器的設(shè)計(LCD顯示)功能要求: 用MCS-51系列單片機(jī)作為控制器;采用LCM1602進(jìn)行計數(shù)顯示;采用光電傳感器計數(shù); 用按鍵控制傳送帶電機(jī)的起停; 用撥碼盤預(yù)置計數(shù)值,計數(shù)到預(yù)定值時,傳送帶停止,按鍵后傳送帶繼續(xù)運(yùn)行。2 電路原理圖的設(shè)計2

2、.1 傳送帶產(chǎn)品計數(shù)器(LED顯示)電路原理圖硬件原理圖如下圖所示,包括顯示模塊,按鍵模塊,電機(jī)控制模塊,置數(shù)模塊。2.2 LED顯示模塊使用4位LED數(shù)碼管來顯示數(shù)字,通過NPN管來驅(qū)動數(shù)碼管。2.3 置數(shù)模塊使用8位薄碼盤和5位薄碼盤組合來組成最高13位的二進(jìn)制數(shù),即8191的最大置數(shù)值,很好的利用了4位數(shù)碼管。 3 軟件系統(tǒng)設(shè)計3.1 軟件系統(tǒng)的流程結(jié)構(gòu)3.2 C51程序/*-文件名:lcd1602.h頭文件功能:LCD1602驅(qū)動函數(shù)的聲明-*/#ifndef _LCD1602_H_#define _LCD1602_H_#include <reg52.h>#define u

3、int unsigned int#define uchar unsigned char/接口定義sbit LcdRs= P20;sbit LcdRw= P21;sbit LcdEn = P22;sfr DBPort = 0x80; /P0口為LCD數(shù)據(jù)總線/*-功能:LCD初始化函數(shù)-*/void LCD_Initial();/*-功能:LCD顯示字符(ASIIC碼)函數(shù)參數(shù):x-列015;y-行01;str-要顯示的字符串指針-*/void LCD_Prints(uchar x, uchar y,uchar *str);#endif/*-文件名:lcd1602.c函數(shù)功能:LCD1602的驅(qū)

4、動函數(shù)原理:采用普通IO口方式模擬LCD1602時序,未采用總線方式-*/#include <REG52.H>#include <intrins.h> /次頭文件中定義有_nop_()函數(shù)#include "lcd1602.h"/*-功能:內(nèi)部等待函數(shù) 返回參數(shù):P0數(shù)據(jù)-*/uchar LCD_Wait(void)LcdRs=0;LcdRw=1;_nop_();LcdEn=1;_nop_();/while(DBPort&0x80);/* 在用Proteus仿真時,屏蔽此語句,否則會進(jìn)入死循環(huán), 實際硬件操作時打開此語句.*/ LcdEn=0

5、;return DBPort;/*-功能:寫LCD命令/數(shù)據(jù) 函數(shù) 參數(shù):style為寫命令/數(shù)據(jù),0-命令,1-數(shù)據(jù);input為寫入的8位命令/數(shù)據(jù)-*/#define LCD_COMMAND 0 / 命令#define LCD_DATA 1 / 數(shù)據(jù)#define LCD_CLEAR_SCREEN 0x01 / 清屏#define LCD_HOMING 0x02 / 光標(biāo)返回原點void LCD_Write(bit style, uchar input)LcdEn=0;LcdRs=style;LcdRw=0;_nop_();DBPort=input;_nop_(); LcdEn=1;_n

6、op_(); LcdEn=0;_nop_();LCD_Wait();/*-功能:設(shè)置LCD顯示模式參數(shù):DisplayMode見下面的定義-*/顯示模式定義#define LCD_SHOW0x04 /顯示開#define LCD_HIDE0x00 /顯示關(guān) #define LCD_CURSOR0x02 /顯示光標(biāo)#define LCD_NO_CURSOR0x00 /無光標(biāo) #define LCD_FLASH0x01 /光標(biāo)閃動#define LCD_NO_FLASH0x00 /光標(biāo)不閃動void LCD_SetDisplay(uchar DisplayMode)LCD_Write(LCD_CO

7、MMAND, 0x08|DisplayMode);/*-功能:設(shè)置LCD輸入模式參數(shù):InputMode見下面的定義-*/#define LCD_AC_UP0x02 / 地址計數(shù)器增加方式#define LCD_AC_DOWN0x00 / 此為缺省設(shè)置#define LCD_MOVE0x01 / 畫面可平移#define LCD_NO_MOVE0x00 / 畫面不可平移void LCD_SetInput(uchar InputMode)LCD_Write(LCD_COMMAND, 0x04|InputMode);/初始化LCD 詳見LCD1602.h中的說明void LCD_Initial()

8、LcdEn=0;LCD_Write(LCD_COMMAND,0x38); /8位數(shù)據(jù)端口,2行顯示,5*7點陣LCD_Write(LCD_COMMAND,0x38); /此句不能省LCD_SetDisplay(LCD_SHOW|LCD_NO_CURSOR); /開啟顯示, 無光標(biāo)LCD_Write(LCD_COMMAND,LCD_CLEAR_SCREEN); /清屏LCD_SetInput(LCD_AC_UP|LCD_NO_MOVE); /AC遞增, 畫面不?/*-功能:液晶字符顯示的位置函數(shù)參數(shù):x-列015;y-行01; -*/void LCD_Pos(uchar x, uchar y)i

9、f(y=0)LCD_Write(LCD_COMMAND,0x80|x);if(y=1)LCD_Write(LCD_COMMAND,0x80|(x-0x40);/將字符(ASIIC碼)輸出到液晶顯示 詳見LCD1602.h中的說明void LCD_Prints(uchar x, uchar y,uchar *str)LCD_Pos(x,y);while(*str!='0') LCD_Write(LCD_DATA,*str); str+;3.3計數(shù)程序模塊#include"lcd1602.h"#define uchar unsigned char#define

10、uint unsigned int uchar out6;sbit STAR_KEY =P32;/定義鍵與單片機(jī)的連接引腳sbit L0=P10; /定義SFR中引腳的位sbit L1=P11;sbit L2=P12;sbit L3=P13;sbit L4=P14;sbit L5=P15;sbit L6=P16;sbit L7=P17;sbit MOTOR=P30;uchar n2=1,0;void delayms(uint x) /延時子程序uchar y;while(x-)for(y=0;y<123;y+);uchar Keynum() /按鍵子程序1uchar key=0;STAR

11、_KEY=1; /置初值if(STAR_KEY=0)delayms(10);if(STAR_KEY=0)n0=0;n1=1; /按下STAR鍵則n0=0;n1=1return n1; /返回n值void xianshi(uint dispbuf) /顯示子程序out0=dispbuf/10000+0x30;out1=(dispbuf%10000)/1000)+0x30;out2=(dispbuf%1000)/100)+0x30;out3=(dispbuf%100)/10)+0x30;out4=dispbuf%10+0x30;out5='0' LCD_Initial(); /LC

12、D初始化LCD_Prints(1, 0,"The Speed Is"); /LCD輸出LCD_Prints(10, 1,"n/min");LCD_Prints(4, 1,out); uint qiuzhi() /求用撥碼盤所置數(shù)的值的子程序 uchar a; uchar b; uchar c; uchar d; uchar e; uchar f; uchar g; uchar h; uint p=0; if (L0=1) a=1; else a=0;/將電平信號變?yōu)閿?shù)字的值 if (L1=1) b=1; else b=0; if (L2=1) c=1;

13、else c=0; if (L3=1) d=1; else d=0; if (L4=1) e=1; else e=0; if (L5=1) f=1; else f=0; if (L6=1) g=1; else g=0; if (L7=1) h=1; else h=0; p=a+b*2+c*2*2+d*2*2*2+e*2*2*2*2+f*2*2*2*2*2+g*2*2*2*2*2*2+h*2*2*2*2*2*2*2; return p; / 返回所求的P值void main(void) /主程序uint q; IT0=1; /負(fù)跳變觸發(fā) EA=1; /開總允許中斷 EX0=1; /開INTO中斷 TMOD=0X05; /置T0為計數(shù)器 方式1 TL0=0;/置計數(shù)器初值 TH0=0; while(1)/無限循環(huán) q=qiuzhi(); /調(diào)用求值子程序求出所置的數(shù) if (MOTOR=1) xianshi(q); else xianshi(TL0);Keynum();TR0=n1; /當(dāng)電動機(jī)關(guān)閉時顯示用薄碼盤所置的數(shù)并停止計數(shù),電機(jī)啟動時則開始計數(shù),并顯示計數(shù)值 if (TL0=q) TR0=0;MOTOR=1; else Keynum();MOTOR=n0; /當(dāng)計數(shù)值與所置數(shù)相同時關(guān)閉電機(jī),停止計數(shù),當(dāng)計

溫馨提示

  • 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)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論