單片機(jī)系統(tǒng)設(shè)計(jì)實(shí)訓(xùn)報(bào)告_第1頁
單片機(jī)系統(tǒng)設(shè)計(jì)實(shí)訓(xùn)報(bào)告_第2頁
單片機(jī)系統(tǒng)設(shè)計(jì)實(shí)訓(xùn)報(bào)告_第3頁
單片機(jī)系統(tǒng)設(shè)計(jì)實(shí)訓(xùn)報(bào)告_第4頁
單片機(jī)系統(tǒng)設(shè)計(jì)實(shí)訓(xùn)報(bào)告_第5頁
已閱讀5頁,還剩20頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

.Word資料單片機(jī)系統(tǒng)設(shè)計(jì)實(shí)訓(xùn)報(bào)告專業(yè):生產(chǎn)過程自動(dòng)化

目錄TOC\o"1-3"\h\u10744一.實(shí)驗(yàn)?zāi)康? 218560二.實(shí)驗(yàn)要求: 37950三.實(shí)驗(yàn)基本原理: 315399四.實(shí)驗(yàn)設(shè)計(jì)分析: 374241.設(shè)計(jì)思想: 317079五.實(shí)驗(yàn)要求實(shí)現(xiàn): 4262991.電路設(shè)計(jì): 4126482.主流程圖: 5314343.4x4鍵盤行列式鍵盤原理電路圖: 6326954.顯示模塊 622041五.總電路設(shè)計(jì)如下 71617六.程序 824454七.實(shí)驗(yàn)心得 13一.實(shí)驗(yàn)?zāi)康?熟悉單片機(jī)定時(shí)器的編程方法。靈活運(yùn)用單片機(jī)C語言程序中的字符串、數(shù)組、指針。熟悉數(shù)碼顯示、LCM1602液晶顯示器、YJD12864液晶顯示器的編程方法。熟悉掌握4x4矩陣鍵盤的C語言編程。二.實(shí)驗(yàn)要求:1:用4×4矩陣鍵盤組成0-f數(shù)字鍵及。2:可以自行設(shè)定或刪除8位密碼,3:用8位數(shù)碼管組成顯示電路提示信息,當(dāng)輸入密碼時(shí),只顯示“8.”,當(dāng)密碼位數(shù)輸入完畢按下確認(rèn)鍵時(shí),對輸入的密碼與設(shè)定的密碼進(jìn)行比較,若密碼正確,則顯示PASS,若密碼顯示錯(cuò)誤時(shí),顯示ERR.4:自由發(fā)揮其他功能.5:要求有單片機(jī)硬件系統(tǒng)框圖,電路原理圖,軟件流程圖。實(shí)驗(yàn)基本原理:這個(gè)密碼鎖的功能是使用矩陣鍵盤中的十六個(gè)鍵輸入密碼0到F還有,輸入的同時(shí)在八位數(shù)碼管上顯示用戶所輸入的密碼,未輸入的位置用橫桿填補(bǔ)表述未輸入。當(dāng)輸入的密碼超出設(shè)置的位數(shù)時(shí),數(shù)據(jù)溢出,清零。用8位數(shù)碼管組成顯示電路提示信息,當(dāng)輸入密碼時(shí),只顯示“8.”,當(dāng)密碼位數(shù)輸入完畢按下確認(rèn)鍵時(shí),對輸入的密碼與設(shè)定的密碼進(jìn)行比較,若密碼正確,則顯示pass,若密碼不正確,則顯示err;模擬密碼鎖,密碼固化到ROM不能通過按鍵輸入更改。四.實(shí)驗(yàn)設(shè)計(jì)分析:1.設(shè)計(jì)思想:1.本系統(tǒng)采用單片機(jī)AT89S51作為核心元件的一款具有本機(jī)開鎖,加鎖,修改密碼和錯(cuò)誤2.報(bào)警的電子密碼鎖。3.電子密碼鎖的原理是:從鍵盤輸入一組密碼,CPU把該密碼和設(shè)置密碼比較,對則將鎖打開,錯(cuò)則要求重新輸入,并記錄錯(cuò)誤次數(shù),如果三次錯(cuò)誤,則被強(qiáng)制鎖定并報(bào)警。初步設(shè)計(jì)思路如下:

1.輸入密碼用矩形鍵盤,數(shù)字鍵,字母鍵。

2.LED數(shù)碼管顯示輸入密碼,但是只是輸出顯示符號(hào)8。采用動(dòng)態(tài)掃描輸出。

3.輸入密碼錯(cuò)誤時(shí)顯示ERR,密碼正確時(shí)顯示PASS。軟件的設(shè)計(jì)主要包括矩形鍵盤鍵值的讀取、LED動(dòng)態(tài)掃描輸出程序、密碼判斷程序。

電子密碼鎖工作的主要過程是LED數(shù)碼管顯示密碼啊。通過鍵盤輸入密碼,按下確認(rèn)鍵后判斷密碼的正確性,正確顯示PASS,錯(cuò)誤顯示ERR。程序?qū)⒎譃橹鞒绦蚝椭袛喾?wù)子程序。主程序負(fù)責(zé)鍵盤鍵值讀取,密碼判斷和開鎖,中斷服務(wù)子程序主要是負(fù)責(zé)LED數(shù)碼管顯示。根據(jù)程序功能,程序主要分為以下幾部分:1.鍵盤鍵值讀取程序鍵盤鍵值讀取程序包括鍵盤掃描、消除抖動(dòng)、鍵譯碼等內(nèi)容。按鍵的識(shí)別主要有兩種方法:行反轉(zhuǎn)法和行掃描法。因?yàn)殒I盤為機(jī)械開關(guān),容易引入抖動(dòng)。為了消除抖動(dòng)干擾,在程序中要加入消除抖動(dòng)的部分。2)LED數(shù)碼顯示程序LED數(shù)碼顯示器是一種應(yīng)用很普遍的顯示器。程序主要負(fù)責(zé)把要顯示的數(shù)字或字母對應(yīng)的顯示碼送到相應(yīng)的LED顯示管。有多位需要同時(shí)顯示時(shí),可以采用動(dòng)態(tài)刷新的方法,就可以得到穩(wěn)定的輸出。循環(huán)顯示8個(gè)數(shù)碼管,可以實(shí)現(xiàn)穩(wěn)定的數(shù)字顯示。中斷服務(wù)程序只負(fù)責(zé)數(shù)據(jù)的輸出顯示,主程序根據(jù)所處的狀態(tài)修正顯示數(shù)據(jù)。3)密碼判斷程序

密碼判斷程序放在主程序中,有按鍵時(shí)讀取,當(dāng)確定鍵按下時(shí)作出判斷。在程序中設(shè)置6字節(jié)的空間存放設(shè)定的密碼和8字節(jié)存放鍵盤輸入的數(shù)據(jù)。根據(jù)讀取的鍵盤數(shù)據(jù)和預(yù)先設(shè)定的密碼逐位比較就可以判斷輸入密碼的正確性。密碼顯示與開鎖當(dāng)密碼輸出時(shí)候,顯示屏上逐步顯示密碼,逐一顯示。4.密碼錯(cuò)誤報(bào)警當(dāng)用戶鍵入正確密碼并按下“確認(rèn)”鍵時(shí),屏幕清零會(huì)顯示PASS。當(dāng)用戶鍵入錯(cuò)誤密碼按下“確認(rèn)”時(shí),屏幕清零會(huì)顯示ERR。實(shí)驗(yàn)要求實(shí)現(xiàn):電路設(shè)計(jì):2.主流程圖:3.4x4鍵盤行列式鍵盤原理電路圖:每一條水平(行線)與垂直線(列線)的交叉處不相通,而是通過一個(gè)按鍵來連通,利用這種行列式矩陣結(jié)構(gòu)只需要N條行線和M條列線,即可組成具有N×M個(gè)按鍵的鍵盤。本設(shè)計(jì)發(fā)射部分采用4x4鍵盤,接收部分采用4x4鍵盤。鍵盤掃描時(shí),首先由I/O口低四位輸出高電平,高四位輸出低電平,假若有鍵按下,那么在I/O口低四位即可讀出低電平,接著延時(shí)消抖,再具體判斷是何鍵按下。顯示模塊總電路設(shè)計(jì)如下程序#include<reg52.h>//包含頭文件,一般情況不需要改動(dòng),頭文件包含特殊功能寄存器的定義#defineDataPortP0//定義數(shù)據(jù)端口程序中遇到DataPort則用P0替換#defineKeyPortP1sbitLATCH1=P2^2;//定義鎖存使能端口段鎖存sbitLATCH2=P2^3;//位鎖存unsignedcharcodedofly_DuanMa[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f, 0x77,0x7c,0x39,0x5e,0x79,0x71};//顯示段碼值0~Funsignedcharcodedofly_WeiMa[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};//分別對應(yīng)相應(yīng)的數(shù)碼管點(diǎn)亮,即位碼unsignedcharTempData[8];//存儲(chǔ)顯示值的全局變量unsignedcharcodepassword[8]={1,2,3,4,5,6,7,8};//可以更改此密碼做多組測試voidDelayUs2x(unsignedchart);//us級(jí)延時(shí)函數(shù)聲明voidDelayMs(unsignedchart);//ms級(jí)延時(shí)voidDisplay(unsignedcharFirstBit,unsignedcharNum);//數(shù)碼管顯示函數(shù)unsignedcharKeyScan(void);//鍵盤掃描unsignedcharKeyPro(void);voidInit_Timer0(void);//定時(shí)器初始化/*主函數(shù)*/voidmain(void){unsignedcharnum,i,j;unsignedchartemp[8];bitFlag;Init_Timer0();while(1)//主循環(huán){num=KeyPro();if(num!=0xff){if(i==0){ for(j=0;j<8;j++)//清屏TempData[j]=0; }if(i<8){temp[i]=dofly_DuanMa[num];//把按鍵值輸入到臨時(shí)數(shù)組中 for(j=0;j<=i;j++)//通過一定順序把臨時(shí)數(shù)組中 //的值賦值到顯示緩沖區(qū),從右往左輸入TempData[7-i+j]=temp[j];} i++;//輸入數(shù)值累加 if(i==9)//正常等于8即可,由于我們需要空一個(gè)用于清屏, //清屏?xí)r的按鍵不做輸入值 { i=0; Flag=1;//先把比較位置1 for(j=0;j<8;j++)//循環(huán)比較8個(gè)數(shù)值, //如果有一個(gè)不等則最終Flag值為0 Flag=Flag&&(temp[j]==dofly_DuanMa[password[j]]); //比較輸入值和已有密碼 for(j=0;j<8;j++)//清屏TempData[j]=0;if(Flag)//如果比較全部相同,標(biāo)志位置1 { TempData[0]=0x3f;//"o"TempData[1]=0x73;//"p" TempData[2]=0x79;//"E" TempData[3]=0x54;//"n" //說明密碼正確,輸入對應(yīng)操作顯示"open" } else { TempData[0]=0x79;//"E"TempData[1]=0x50;//"r" TempData[2]=0x50;//"r" //否則顯示"Err" } }} }}/*uS延時(shí)函數(shù),含有輸入?yún)?shù)unsignedchart,無返回值unsignedchar是定義無符號(hào)字符變量,其值的范圍是0~255這里使用晶振12M,精確延時(shí)請使用匯編,大致延時(shí)長度如下T=tx2+5uS*/voidDelayUs2x(unsignedchart){while(--t);}/*mS延時(shí)函數(shù),含有輸入?yún)?shù)unsignedchart,無返回值unsignedchar是定義無符號(hào)字符變量,其值的范圍是0~255這里使用晶振12M,精確延時(shí)請使用匯編*/voidDelayMs(unsignedchart){while(t--){//大致延時(shí)1mSDelayUs2x(245); DelayUs2x(245);}}/*顯示函數(shù),用于動(dòng)態(tài)掃描數(shù)碼管輸入?yún)?shù)FirstBit表示需要顯示的第一位,如賦值2表示從第三個(gè)數(shù)碼管開始顯示如輸入0表示從第一個(gè)顯示。Num表示需要顯示的位數(shù),如需要顯示99兩位數(shù)值則該值輸入2*/voidDisplay(unsignedcharFirstBit,unsignedcharNum){staticunsignedchari=0; DataPort=0;//清空數(shù)據(jù),防止有交替重影LATCH1=1;//段鎖存LATCH1=0;keyPort=dofly_WeiMa[i+FirstBit];//取位碼LATCH2=1;//位鎖存LATCH2=0;DataPort=TempData[i];//取顯示數(shù)據(jù),段碼LATCH1=1;//段鎖存LATCH1=0; i++;if(i==Num) i=0;}/*定時(shí)器初始化子程序*/voidInit_Timer0(void){TMOD|=0x01; //使用模式1,16位定時(shí)器,使用"|"符號(hào)可以在使用多個(gè)定時(shí)器時(shí)不受影響 //TH0=0x00; //給定初值//TL0=0x00;EA=1;//總中斷打開ET0=1;//定時(shí)器中斷打開TR0=1;//定時(shí)器開關(guān)打開}/*定時(shí)器中斷子程序*/voidTimer0_isr(void)interrupt1{TH0=(65536-2000)/256; //重新賦值2msTL0=(65536-2000)%256;Display(0,8);//調(diào)用數(shù)碼管掃描}/*按鍵掃描函數(shù),返回掃描鍵值*/unsignedcharKeyScan(void)//鍵盤掃描函數(shù),使用行列反轉(zhuǎn)掃描法{unsignedcharcord_h,cord_l;//行列值中間變量KeyPort=0x0f;//行線輸出全為0cord_h=KeyPort&0x0f;//讀入列線值if(cord_h!=0x0f)//先檢測有無按鍵按下{DelayMs(10);//去抖if((KeyPort&0x0f)!=0x0f){cord_h=KeyPort&0x0f;//讀入列線值KeyPort=cord_h|0xf0;//輸出當(dāng)前列線值cord_l=KeyPort&0xf0;//讀入行線值while((KeyPort&0xf0)!=0xf0);//等待松開并輸出return(cord_h+cord_l);//鍵盤最后組合碼值}}return(0xff);//返回該值}/*按鍵值處理函數(shù),返回掃鍵值*/unsignedcharKeyPro(void){switch(KeyScan()){case0x7e:return0;break;//0按下相應(yīng)的鍵顯示相對應(yīng)的碼值case0x7d:return1;break;//1case0x7b:return2;break;//2case0x77:return3;break;//3case0xbe:return4;break;//4case0xbd:return5;break;//5case0xbb:return6;break;//6case0xb7:return7;break;//7case0xde:return8;break;//8case0xdd:return9;break;//9case0xdb:return10;break;//acase0xd7:return11;break;//bcase0xee:return12;break;//ccase0xed:return13;break;//dcase0xeb:return14;break;//ecase0xe7:return15;break;//fdefault:return0xff;break;}}七.實(shí)驗(yàn)心得在科技高度發(fā)展的今天,計(jì)算機(jī)在人們之中的作用越來越突出。而c語言作為一種計(jì)算機(jī)的語言,我們學(xué)習(xí)它,有助于我們更好的了解計(jì)算機(jī),與計(jì)算機(jī)進(jìn)行交流,因此,c語言的學(xué)習(xí)對我們尤其重要。上機(jī)實(shí)驗(yàn)是學(xué)習(xí)程序設(shè)計(jì)語言必不可少的實(shí)踐環(huán)節(jié),特別是c語言靈活、簡潔,更需要通過編程的實(shí)踐來真正掌握它。對于程序設(shè)計(jì)語言的學(xué)習(xí)目的,可以概括為學(xué)習(xí)語法規(guī)定、掌握程序設(shè)計(jì)方法、提高程序開發(fā)能力,這些都必須通過充分的實(shí)際上機(jī)操作才能完成。學(xué)習(xí)c程序設(shè)計(jì)語言除了課堂講授以外,必須保證有不少于課堂講授學(xué)時(shí)的上機(jī)時(shí)間。因?yàn)閷W(xué)時(shí)所限,課程不能安排過多的統(tǒng)一上機(jī)實(shí)驗(yàn),所以希望學(xué)生有效地利用課程上機(jī)實(shí)驗(yàn)的機(jī)會(huì),盡快掌握用c語言開發(fā)程序的能力,為今后的繼續(xù)學(xué)習(xí)打下一個(gè)良好的基礎(chǔ)。課程上機(jī)實(shí)驗(yàn)的目的,不僅僅是驗(yàn)證教材和講課的內(nèi)容、檢查自己所編的程序是否正確,課程安排的上機(jī)實(shí)驗(yàn)的目的可以概括為如下幾個(gè)方面:1.加深對課堂講授內(nèi)容的理解課堂上要講授許多關(guān)于c語言的語法規(guī)則,聽起來十分枯燥無味,也不容易記住,死記硬背是不可取的。然而要使用c語言這個(gè)工具解決實(shí)際問題,又必須掌握它。通過多次上機(jī)練習(xí),對于語法知識(shí)有了感性的認(rèn)識(shí),加深對它的理解,在理解的基礎(chǔ)上就會(huì)自然而然地掌握c語言的語法規(guī)定。對于一些內(nèi)容自己認(rèn)為在課堂上聽懂了,但上機(jī)實(shí)踐中會(huì)發(fā)現(xiàn)原來理解的偏差,這是由于大部分學(xué)生是初次接觸程序設(shè)計(jì),缺乏程序設(shè)計(jì)的實(shí)踐所致。學(xué)習(xí)c語言不能停留在

溫馨提示

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

最新文檔

評(píng)論

0/150

提交評(píng)論