版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
.Word資料單片機系統(tǒng)設(shè)計實訓(xùn)報告專業(yè):生產(chǎn)過程自動化
目錄TOC\o"1-3"\h\u10744一.實驗?zāi)康? 218560二.實驗要求: 37950三.實驗基本原理: 315399四.實驗設(shè)計分析: 374241.設(shè)計思想: 317079五.實驗要求實現(xiàn): 4262991.電路設(shè)計: 4126482.主流程圖: 5314343.4x4鍵盤行列式鍵盤原理電路圖: 6326954.顯示模塊 622041五.總電路設(shè)計如下 71617六.程序 824454七.實驗心得 13一.實驗?zāi)康?熟悉單片機定時器的編程方法。靈活運用單片機C語言程序中的字符串、數(shù)組、指針。熟悉數(shù)碼顯示、LCM1602液晶顯示器、YJD12864液晶顯示器的編程方法。熟悉掌握4x4矩陣鍵盤的C語言編程。二.實驗要求:1:用4×4矩陣鍵盤組成0-f數(shù)字鍵及。2:可以自行設(shè)定或刪除8位密碼,3:用8位數(shù)碼管組成顯示電路提示信息,當(dāng)輸入密碼時,只顯示“8.”,當(dāng)密碼位數(shù)輸入完畢按下確認鍵時,對輸入的密碼與設(shè)定的密碼進行比較,若密碼正確,則顯示PASS,若密碼顯示錯誤時,顯示ERR.4:自由發(fā)揮其他功能.5:要求有單片機硬件系統(tǒng)框圖,電路原理圖,軟件流程圖。實驗基本原理:這個密碼鎖的功能是使用矩陣鍵盤中的十六個鍵輸入密碼0到F還有,輸入的同時在八位數(shù)碼管上顯示用戶所輸入的密碼,未輸入的位置用橫桿填補表述未輸入。當(dāng)輸入的密碼超出設(shè)置的位數(shù)時,數(shù)據(jù)溢出,清零。用8位數(shù)碼管組成顯示電路提示信息,當(dāng)輸入密碼時,只顯示“8.”,當(dāng)密碼位數(shù)輸入完畢按下確認鍵時,對輸入的密碼與設(shè)定的密碼進行比較,若密碼正確,則顯示pass,若密碼不正確,則顯示err;模擬密碼鎖,密碼固化到ROM不能通過按鍵輸入更改。四.實驗設(shè)計分析:1.設(shè)計思想:1.本系統(tǒng)采用單片機AT89S51作為核心元件的一款具有本機開鎖,加鎖,修改密碼和錯誤2.報警的電子密碼鎖。3.電子密碼鎖的原理是:從鍵盤輸入一組密碼,CPU把該密碼和設(shè)置密碼比較,對則將鎖打開,錯則要求重新輸入,并記錄錯誤次數(shù),如果三次錯誤,則被強制鎖定并報警。初步設(shè)計思路如下:
1.輸入密碼用矩形鍵盤,數(shù)字鍵,字母鍵。
2.LED數(shù)碼管顯示輸入密碼,但是只是輸出顯示符號8。采用動態(tài)掃描輸出。
3.輸入密碼錯誤時顯示ERR,密碼正確時顯示PASS。軟件的設(shè)計主要包括矩形鍵盤鍵值的讀取、LED動態(tài)掃描輸出程序、密碼判斷程序。
電子密碼鎖工作的主要過程是LED數(shù)碼管顯示密碼啊。通過鍵盤輸入密碼,按下確認鍵后判斷密碼的正確性,正確顯示PASS,錯誤顯示ERR。程序?qū)⒎譃橹鞒绦蚝椭袛喾?wù)子程序。主程序負責(zé)鍵盤鍵值讀取,密碼判斷和開鎖,中斷服務(wù)子程序主要是負責(zé)LED數(shù)碼管顯示。根據(jù)程序功能,程序主要分為以下幾部分:1.鍵盤鍵值讀取程序鍵盤鍵值讀取程序包括鍵盤掃描、消除抖動、鍵譯碼等內(nèi)容。按鍵的識別主要有兩種方法:行反轉(zhuǎn)法和行掃描法。因為鍵盤為機械開關(guān),容易引入抖動。為了消除抖動干擾,在程序中要加入消除抖動的部分。2)LED數(shù)碼顯示程序LED數(shù)碼顯示器是一種應(yīng)用很普遍的顯示器。程序主要負責(zé)把要顯示的數(shù)字或字母對應(yīng)的顯示碼送到相應(yīng)的LED顯示管。有多位需要同時顯示時,可以采用動態(tài)刷新的方法,就可以得到穩(wěn)定的輸出。循環(huán)顯示8個數(shù)碼管,可以實現(xiàn)穩(wěn)定的數(shù)字顯示。中斷服務(wù)程序只負責(zé)數(shù)據(jù)的輸出顯示,主程序根據(jù)所處的狀態(tài)修正顯示數(shù)據(jù)。3)密碼判斷程序
密碼判斷程序放在主程序中,有按鍵時讀取,當(dāng)確定鍵按下時作出判斷。在程序中設(shè)置6字節(jié)的空間存放設(shè)定的密碼和8字節(jié)存放鍵盤輸入的數(shù)據(jù)。根據(jù)讀取的鍵盤數(shù)據(jù)和預(yù)先設(shè)定的密碼逐位比較就可以判斷輸入密碼的正確性。密碼顯示與開鎖當(dāng)密碼輸出時候,顯示屏上逐步顯示密碼,逐一顯示。4.密碼錯誤報警當(dāng)用戶鍵入正確密碼并按下“確認”鍵時,屏幕清零會顯示PASS。當(dāng)用戶鍵入錯誤密碼按下“確認”時,屏幕清零會顯示ERR。實驗要求實現(xiàn):電路設(shè)計:2.主流程圖:3.4x4鍵盤行列式鍵盤原理電路圖:每一條水平(行線)與垂直線(列線)的交叉處不相通,而是通過一個按鍵來連通,利用這種行列式矩陣結(jié)構(gòu)只需要N條行線和M條列線,即可組成具有N×M個按鍵的鍵盤。本設(shè)計發(fā)射部分采用4x4鍵盤,接收部分采用4x4鍵盤。鍵盤掃描時,首先由I/O口低四位輸出高電平,高四位輸出低電平,假若有鍵按下,那么在I/O口低四位即可讀出低電平,接著延時消抖,再具體判斷是何鍵按下。顯示模塊總電路設(shè)計如下程序#include<reg52.h>//包含頭文件,一般情況不需要改動,頭文件包含特殊功能寄存器的定義#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ù)碼管點亮,即位碼unsignedcharTempData[8];//存儲顯示值的全局變量unsignedcharcodepassword[8]={1,2,3,4,5,6,7,8};//可以更改此密碼做多組測試voidDelayUs2x(unsignedchart);//us級延時函數(shù)聲明voidDelayMs(unsignedchart);//ms級延時voidDisplay(unsignedcharFirstBit,unsignedcharNum);//數(shù)碼管顯示函數(shù)unsignedcharKeyScan(void);//鍵盤掃描unsignedcharKeyPro(void);voidInit_Timer0(void);//定時器初始化/*主函數(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ù)組中 for(j=0;j<=i;j++)//通過一定順序把臨時數(shù)組中 //的值賦值到顯示緩沖區(qū),從右往左輸入TempData[7-i+j]=temp[j];} i++;//輸入數(shù)值累加 if(i==9)//正常等于8即可,由于我們需要空一個用于清屏, //清屏?xí)r的按鍵不做輸入值 { i=0; Flag=1;//先把比較位置1 for(j=0;j<8;j++)//循環(huán)比較8個數(shù)值, //如果有一個不等則最終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ù),含有輸入?yún)?shù)unsignedchart,無返回值unsignedchar是定義無符號字符變量,其值的范圍是0~255這里使用晶振12M,精確延時請使用匯編,大致延時長度如下T=tx2+5uS*/voidDelayUs2x(unsignedchart){while(--t);}/*mS延時函數(shù),含有輸入?yún)?shù)unsignedchart,無返回值unsignedchar是定義無符號字符變量,其值的范圍是0~255這里使用晶振12M,精確延時請使用匯編*/voidDelayMs(unsignedchart){while(t--){//大致延時1mSDelayUs2x(245); DelayUs2x(245);}}/*顯示函數(shù),用于動態(tài)掃描數(shù)碼管輸入?yún)?shù)FirstBit表示需要顯示的第一位,如賦值2表示從第三個數(shù)碼管開始顯示如輸入0表示從第一個顯示。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;}/*定時器初始化子程序*/voidInit_Timer0(void){TMOD|=0x01; //使用模式1,16位定時器,使用"|"符號可以在使用多個定時器時不受影響 //TH0=0x00; //給定初值//TL0=0x00;EA=1;//總中斷打開ET0=1;//定時器中斷打開TR0=1;//定時器開關(guān)打開}/*定時器中斷子程序*/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;}}七.實驗心得在科技高度發(fā)展的今天,計算機在人們之中的作用越來越突出。而c語言作為一種計算機的語言,我們學(xué)習(xí)它,有助于我們更好的了解計算機,與計算機進行交流,因此,c語言的學(xué)習(xí)對我們尤其重要。上機實驗是學(xué)習(xí)程序設(shè)計語言必不可少的實踐環(huán)節(jié),特別是c語言靈活、簡潔,更需要通過編程的實踐來真正掌握它。對于程序設(shè)計語言的學(xué)習(xí)目的,可以概括為學(xué)習(xí)語法規(guī)定、掌握程序設(shè)計方法、提高程序開發(fā)能力,這些都必須通過充分的實際上機操作才能完成。學(xué)習(xí)c程序設(shè)計語言除了課堂講授以外,必須保證有不少于課堂講授學(xué)時的上機時間。因為學(xué)時所限,課程不能安排過多的統(tǒng)一上機實驗,所以希望學(xué)生有效地利用課程上機實驗的機會,盡快掌握用c語言開發(fā)程序的能力,為今后的繼續(xù)學(xué)習(xí)打下一個良好的基礎(chǔ)。課程上機實驗的目的,不僅僅是驗證教材和講課的內(nèi)容、檢查自己所編的程序是否正確,課程安排的上機實驗的目的可以概括為如下幾個方面:1.加深對課堂講授內(nèi)容的理解課堂上要講授許多關(guān)于c語言的語法規(guī)則,聽起來十分枯燥無味,也不容易記住,死記硬背是不可取的。然而要使用c語言這個工具解決實際問題,又必須掌握它。通過多次上機練習(xí),對于語法知識有了感性的認識,加深對它的理解,在理解的基礎(chǔ)上就會自然而然地掌握c語言的語法規(guī)定。對于一些內(nèi)容自己認為在課堂上聽懂了,但上機實踐中會發(fā)現(xiàn)原來理解的偏差,這是由于大部分學(xué)生是初次接觸程序設(shè)計,缺乏程序設(shè)計的實踐所致。學(xué)習(xí)c語言不能停留在
溫馨提示
- 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)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 外勤機械工復(fù)試考核試卷含答案
- 刨插工安全培訓(xùn)效果評優(yōu)考核試卷含答案
- 玻璃制品手工成型工安全宣傳強化考核試卷含答案
- 海鹽采收工班組建設(shè)競賽考核試卷含答案
- 絞車操作工安全素養(yǎng)競賽考核試卷含答案
- 磚瓦生產(chǎn)工安全素養(yǎng)測試考核試卷含答案
- 海南房產(chǎn)中介培訓(xùn)課程
- 酒店員工培訓(xùn)計劃實施與跟蹤制度
- 酒店客房用品更換與補給制度
- 超市員工培訓(xùn)及業(yè)務(wù)知識制度
- 廠轉(zhuǎn)讓合同范本
- 《肝臟手術(shù)的麻醉》課件
- GB/T 45026-2024側(cè)掃聲吶海洋調(diào)查規(guī)范
- 零星維修工程施工組織設(shè)計方案
- 新建加油站現(xiàn)場核查表
- 三年級數(shù)學(xué)五千以內(nèi)加減法題能力作業(yè)口算題大全附答案
- 臨床診斷學(xué)-胸部檢查課件
- 三力測試題70歲以上老人換領(lǐng)駕照
- 婦女保健之孕期運動與體重管理護理課件
- 職工食堂餐飲服務(wù)投標(biāo)方案(技術(shù)方案)
- (銀川市直部門之間交流)2022事業(yè)單位工作人員調(diào)動表
評論
0/150
提交評論