版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
評閱教師評語:評閱教師評語:課程設(shè)計成績考勤成績實做成績報告成績總評成績指導(dǎo)教師簽名:課程設(shè)計報告論文題目基于ARM的I2C接口設(shè)計學(xué)院(系):電子信息與自動化學(xué)院班級:測控技術(shù)與儀器學(xué)生姓名:同組同學(xué):學(xué)號:學(xué)號:指導(dǎo)教師:時間:摘要:近年來,隨著計算機(jī)技術(shù)及集成電路技術(shù)的發(fā)展,嵌入式技術(shù)日漸普及,在通訊、網(wǎng)絡(luò)、工控、醫(yī)療、電子等領(lǐng)域發(fā)揮著越來越重要的作用。I2C是一種較為常用的串行接口標(biāo)準(zhǔn),具有協(xié)議完善、支持芯片較多和占用I/O線少等優(yōu)點,主要在服務(wù)器管理中使用,可隨時監(jiān)控內(nèi)存、硬盤、網(wǎng)絡(luò)、系統(tǒng)溫度等多個參數(shù),增加了系統(tǒng)的安全性,便于管理。目前比較流行的串行擴(kuò)展總線中,I2C總線以其嚴(yán)格的規(guī)范和眾多支持I2C接口的外圍器件而獲得了廣泛的應(yīng)用。因此,我們對I2C接口進(jìn)行了必要的探究,通過UART(異步串行接口)發(fā)送字節(jié)數(shù)據(jù),然后利用I2C串行接口對外部存儲器24C01進(jìn)行讀寫,最后通過顯示器LCD1602顯示,正確驗證了I2C的通訊功能。關(guān)鍵字:I2C串行接口UART外部存儲器顯示器LCD1602正文:設(shè)計原理與總體方案:本設(shè)計包含三個部分:UART發(fā)送數(shù)據(jù)部分、I2C讀寫存儲器部分、LCD1602顯示部分,下面分別介紹各部分原理。異步串行接口UART是異步串行接口,LPC2000系列ARM7包含2個UART:UART0和UART1,UART0只有TXD(串行輸出)和RXD(串行輸入)兩個引腳,只需設(shè)置相應(yīng)的寄存器即可實現(xiàn)基本的數(shù)據(jù)收發(fā)功能。1.2.I2C總線基本原理I2C總線系統(tǒng)是由SCL(串行時鐘)和SDA(串行數(shù)據(jù))兩根總線構(gòu)成的,該總線有嚴(yán)格的時序要求。總線工作時,由串行時鐘線SCL傳送時鐘脈沖,由串行數(shù)據(jù)線SDA傳送數(shù)據(jù)??偩€協(xié)議規(guī)定,各主節(jié)點進(jìn)行通信時都要有起始、結(jié)束、發(fā)送數(shù)據(jù)和應(yīng)答信號,這些信號都是通信過程中的基本單元。總線傳送是以幀為單位進(jìn)行的,每當(dāng)發(fā)送完1個字節(jié)后,接收節(jié)點就相應(yīng)給一應(yīng)答信號。1.2.1.I2C總線數(shù)據(jù)傳輸中的接受/發(fā)送器I2C總線系統(tǒng)中發(fā)送器與接收器來表明數(shù)據(jù)傳輸?shù)陌l(fā)送方與接收方。發(fā)送器:總線上發(fā)送數(shù)據(jù)的器件。接收器:總線上接收數(shù)據(jù)的器件。1.2.2.I2C總線上數(shù)據(jù)的有效性I2C總線數(shù)據(jù)傳輸時,在時鐘線高電平期間數(shù)據(jù)線上必須保持有穩(wěn)定的邏輯電平的狀態(tài),高電平為數(shù)據(jù)1,低電平為數(shù)據(jù)0。只有在時鐘線為低電平時,才允許數(shù)據(jù)線上的電平狀態(tài)變化,如圖1所示。圖1I2C總線數(shù)據(jù)位傳送1.2.3.I2C總線數(shù)據(jù)傳送的起始、停止與應(yīng)答 I2C總線可以構(gòu)成多主數(shù)據(jù)傳送系統(tǒng),但只有帶CPU的器件可以成為主器件。主器件發(fā)送時鐘、啟動位、數(shù)據(jù)工作方式,從器件則接收時鐘及數(shù)據(jù)工作方式,接收或發(fā)送則根據(jù)數(shù)據(jù)的傳送方向決定。I2C總線上數(shù)據(jù)傳送時的啟動、結(jié)束和有效狀態(tài)都由SDA、SCL的電平狀態(tài)決定,在I2C總線規(guī)程中啟動和停止條件規(guī)定如下:啟動條件:在SCL為高電平時,SDA出現(xiàn)一個下降沿則啟動I2C總線。停止條件:在SCL為高電平時,SDA出現(xiàn)一個上升沿則停止使用I2C總線。啟動條件后總線為“忙”,在結(jié)束信號過后的一定時間總線被認(rèn)為是“空閑”的。在啟動和停止條件之間可轉(zhuǎn)送的數(shù)據(jù)不受限制,但每個字節(jié)必須為8位。首先傳送最高位,采用串行傳送方式,但在每個字節(jié)之后必須跟一個響應(yīng)位。主器件收發(fā)每個字節(jié)后產(chǎn)生一個時鐘應(yīng)答脈沖,在這期間,發(fā)送器必須保證SDA為高,由接收器將SDA拉低,稱為應(yīng)答信號(ACK)。主器件為接收器時,在接收了最后一個字節(jié)之后不發(fā)應(yīng)答信號,也稱為非應(yīng)答信號(NOTACK)。當(dāng)從器件不能再接收另外的字節(jié)時也會出現(xiàn)在種情況。I2C總線的數(shù)據(jù)傳送如圖2所示。圖2I2C總線上的信號1.2.4.I2C總線數(shù)據(jù)傳送I2C總線上連接的每個器件都有自己唯一確定的地址,啟動條件后主機(jī)發(fā)送的第一個字節(jié)就是被讀寫的從器件地址,其中第8位為方向位,“0”(W)表示主器件發(fā)送,“1”(R)表示主器件接收??偩€上每個器件在啟動條件后都把自己的地址與前7位相比較,如相同則器件被選中,產(chǎn)生應(yīng)答,并根據(jù)讀寫位決定在數(shù)據(jù)傳送中是接收還是發(fā)送。如圖所示為主器件發(fā)送和接收數(shù)據(jù)的過程,無論是主發(fā)、主收還是從發(fā)、從收都是由主器件控制。圖3主器件發(fā)送和接收數(shù)據(jù)的過程在主發(fā)送方式下,由主器件先發(fā)出啟動信號(S),接著發(fā)從器件的7位地址(SLA)和主器件發(fā)送的方向位“0”(W),即這個字節(jié)為SLA+W。被尋址的從器件在收到這個字節(jié)后,返回一個應(yīng)答信號(A),在確定主從應(yīng)答正常后,主器件向從器件發(fā)送字節(jié)數(shù)據(jù),從器件每收到一個字節(jié)數(shù)據(jù)后都要返回一個應(yīng)答信號,直到全部數(shù)據(jù)都發(fā)送完為止。在主接收方式下,主器件先發(fā)出啟動信號(S),接著發(fā)從器件的7位地址(SLA)和表明主器件接收的方向位“1”(R),即這個字節(jié)為SLA+R。在發(fā)送完這個字節(jié)后,SCL繼續(xù)輸出時鐘,通過SDA接收從器件發(fā)來的串行數(shù)據(jù)。主器件每接收到一個字節(jié)后都要發(fā)送一個應(yīng)答信號(A),當(dāng)全部數(shù)據(jù)都發(fā)送或接收完畢后,主器件應(yīng)發(fā)出停止信號(P)。1.3.LCD1602液晶顯示驅(qū)動原理1.3.1.LCD1602的引腳功能LCD1602液晶顯示器的引腳如圖4所示,其引腳功能如下:(1)RS:數(shù)據(jù)和指令選擇控制端,RS=0命令狀態(tài);RS=1數(shù)據(jù)(2)R/W:讀寫控制線,R/W=0寫操作;R/W=1讀操作(3)A:背光控制正電源(4)K:背光控制地(5)E:數(shù)據(jù)讀寫操作控制位,E線向LCD模塊發(fā)送一個脈沖,LCD模塊與單片機(jī)間將進(jìn)行一次數(shù)據(jù)交換(6)DB0~DB7:數(shù)據(jù)線,可以用8位連接,也可以只用高4位連接,節(jié)約單片機(jī)資源。(7)VDD:電源端VEE:亮度控制端(1-5V)VSS:接地端VSSVDDVORSR/WEDB0DB1DB2DB3DB4DB5DB6DB7AKVSSVDDVORSR/WEDB0DB1DB2DB3DB4DB5DB6DB7AKLCD模塊12345678910111213141516圖4LCD1602液晶顯示器引腳圖1.3.2.LCD1602控制命令表1LCD控制命令序號指令RSR/WD7D6D5D4D3D2D1D01清顯示00000000012光標(biāo)返回000000001*3置輸入模式00000001I/DS4顯示開/關(guān)控制0000001DCB5光標(biāo)或字符移位000001S/CR/L**6功能設(shè)置00001DLNF**7置字符發(fā)生器存儲器地址0001字符發(fā)生存儲器地址8置數(shù)據(jù)儲存器地址001顯示數(shù)據(jù)存儲器地址9讀忙標(biāo)志或地址01BF計數(shù)器地址10寫數(shù)到CGRAM或DDRAM10要寫的數(shù)據(jù)內(nèi)容指令3:光標(biāo)和顯示模式設(shè)置。I/D:光標(biāo)移動方向,高電平右移,低電平左移。S:屏幕上所有文字是否左移或者右移,高電平表示有效,低電平則無效。指令4:顯示開關(guān)控制。D:控制整體顯示的開與關(guān),高電平表示開顯示,低電平表示關(guān)顯示。C:控制光標(biāo)的開與關(guān),高電平表示有光標(biāo),低電平表示無光標(biāo)。B:控制光標(biāo)是否閃爍,高電平閃爍,低電平不閃爍。指令6:功能設(shè)置命令。DL:高電平時為4位總線,低電平時為8位總線。N:低電平時為單行顯示,高電平時為雙行顯示。F:低電平時顯示5×7的點陣字符,高電平時顯示5×10的點陣字符。指令9:讀忙信號和光標(biāo)地址。BF:為忙標(biāo)志,高電平表示忙,此時模塊不能接受命令或者數(shù)據(jù),如果為低電平表示不忙。軟件設(shè)計2.1流程圖及部分初始化說明開始開始引腳功能初始化引腳方向確定LCD1602初始化UART初始化I2C初始化UART接受data?NI2C寫24C01延時I2C讀24C01顯示數(shù)據(jù)圖5主程序流程圖顯示器忙?開始顯示器忙?開始RS=0,RW=0E=1E=0,開始寫命令寫完了?結(jié)束YN顯示器忙?開始RS=1,RW=0E=1E=0,開始寫數(shù)據(jù)寫完了?結(jié)束YN圖6lcd初始化及顯示函數(shù)流程圖開始開始設(shè)置通信波特率設(shè)置數(shù)據(jù)格式讀取數(shù)據(jù)接受標(biāo)志=0?結(jié)束Y圖7UART接受數(shù)據(jù)流程圖開始設(shè)置主模式開始設(shè)置主模式并使能I2C發(fā)送起始信號寫24C01地址+W寫子地址SI清零,發(fā)送數(shù)據(jù)全部發(fā)完?發(fā)送停止信號結(jié)束N發(fā)送停止信號發(fā)送起始信號發(fā)送起始信號開始設(shè)置主模式并使能I2C寫24C01地址+W寫子地址接收數(shù)據(jù)全部接完?結(jié)束N發(fā)送停止信號寫24C01地址+R圖8I2C讀寫24C01流程圖仿真設(shè)計仿真電路圖 圖9 仿真結(jié)果圖圖10調(diào)試問題1:在進(jìn)行仿真調(diào)試時,出現(xiàn)了發(fā)送亂碼的現(xiàn)象(如圖11)。原因:ADS調(diào)試時鐘頻率與proteus仿真設(shè)置頻率不一致。問題2:在進(jìn)行仿真調(diào)試時,I2C讀數(shù)據(jù)時,出現(xiàn)非應(yīng)答位導(dǎo)致數(shù)據(jù)不能正常讀取(如圖12)。原因:ADS程序?qū)懲?4C01后沒有等待總線恢復(fù),添加延時即可。圖11調(diào)試出現(xiàn)亂碼情況圖12讀取數(shù)據(jù)時出現(xiàn)非應(yīng)答位情況結(jié)束語本次課程設(shè)計是ARM嵌入式系統(tǒng)課程設(shè)計,是在我們學(xué)習(xí)了《ARM嵌入式系統(tǒng)》的基礎(chǔ)上的進(jìn)一步實踐與拓展,該課程設(shè)計對各方面的知識進(jìn)行了融合,具有一定的挑戰(zhàn)性。我們查閱了很多資料,并且借鑒了很多不同的想法,在老師的幫助下,我們順利完成了課程設(shè)計,對嵌入式系統(tǒng)的硬件、軟件有了更為深入的了解,為以后進(jìn)行軟硬件設(shè)計打下了良好的基礎(chǔ)。參考文獻(xiàn)[1]周立功主編.ARM嵌入式系統(tǒng)基礎(chǔ)教程[M].北京航空航天大學(xué)出版社,2008。[2]吳明輝,等.基于ARM的嵌入式系統(tǒng)開發(fā)與應(yīng)用[M].北京:人民郵電出版社,2004。附錄:主程序#include"config.h"#include"LCD1602.h"#include"UART.h"#include"I2C.h"#defineNum1uint8i=0,j=0,k=0,Addr=0;uint8rcv_data[Num],read_data[Num],display_data[16];intmain(){ PINSEL0=0x55;//設(shè)置p0.0-p0.1為UART0,p0.2-p0.3為I2C PINSEL1=0;//設(shè)置p0.16-p0.24為GPIO IODIR=0x7ff<<16;//p0.16-p0.24為輸出lcd_init(); UART0_init(); I2C_init(100000); while(1) { UART0_RcvStr(rcv_data,Num); WriteC01(Addr,Num,rcv_data); DelayMs(100);//////////// ReadC01(Addr,Num,read_data); if(i<15) { display_data[i++]=read_data[0]; display_data[i]='\0'; } else { for(j=0;j<14;j++) { display_data[j]=display_data[j+1]; display_data[14]=read_data[0]; display_data[15]='\0'; } } DisText(0x80,display_data); Addr++;}return(0);}/*****************************************************************************File:lcd1602.h*功能:向LCD輸出字符(一行只能顯示16個字符)****************************************************************************/#include"config.h"#definers(1<<24)#definerw(1<<25)#defineen(1<<26)#definebusy(1<<23)//檢查總線是否忙voidChkBusy(){IODIR=0x700<<16;while(1) { IOCLR=rs; IOSET=rw; IOSET=en; if(!(IOPIN&busy))break; IOCLR=en; }IODIR=0x7ff<<16;}//寫函數(shù)voidWrOp(uint8dat){ ChkBusy(); IOCLR=rs; //RS=0,RW=0 IOCLR=rw; IOCLR=(0xff<<16); IOSET=(dat<<16); //送數(shù) IOSET=en; IOCLR=en;}//寫數(shù)據(jù)函數(shù)voidWrDat(uint8dat) { ChkBusy(); IOSET=rs; //RS=1,RW=0 IOCLR=rw; IOCLR=(0xff<<16); IOSET=(dat<<16); //送數(shù) IOSET=en; IOCLR=en;}//lcd初始化函數(shù)voidlcd_init(void){ WrOp(0x38); //8-bitmode-2line. WrOp(0x06); //光標(biāo)加1 WrOp(0x0C); //開顯示}//顯示文本函數(shù)voidDisText(uint8addr,uint8*p){ WrOp(addr); while(*p!='\0')WrDat(*(p++));}/*****************************************************************************File:UART.h*功能:通過串口輸入字節(jié)數(shù)據(jù)。****************************************************************************/#include"config.h"#defineUART_BPS 9600 /*定義通訊波特率*///初始化串口0。voidUART0_init(void){uint16Fdiv;U0LCR=0x83; //DLAB=1,可設(shè)置波特率Fdiv=(Fpclk/16)/UART_BPS; //設(shè)置波特率U0DLM=Fdiv/256; U0DLL=Fdiv%256; U0LCR=0x03;} //從串口接收1字節(jié)數(shù)據(jù),使用查詢方式接收。uint8UART0_RcvByte(void){ uint8rcv_dat; while((U0LSR&0x01)==0); //等待接收標(biāo)志置位 rcv_dat=U0RBR; return(rcv_dat);}//從串口接收字符串。voidUART0_RcvStr(uint8*s,uint32n){ for(;n>0;n--) {*s++=UART0_RcvByte();}}/*****************************************************************************File:I2C.h*功能:讀寫外部存儲器24C01。****************************************************************************/#include"config.h"#defineWrite_C010xA0#defineRead_C010xA1#defineAA(1<<2)#defineSI(1<<3)#defineSTO(1<<4)#defineSTA(1<<5)#defineI2CEN(1<<6)#definelastbyte1//I2C初始化voidI2C_init(uint32fi2c){if(fi2c>400000)fi2c=400000;PINSEL0=(PINSEL0&0xffffff0f)|0x50;I2SCLH=(Fpclk/fi2c+1)/2;I2SCLL=(Fpclk/fi2c)/2;I2CONCLR=STA|SI|AA;I2CONSET=I2CEN;}//發(fā)送起始信號voidI2C_Start(void){I2CONSET=STA;while(I2STAT!=0x08);I2CONCLR=STA;}//發(fā)送停止信號voidI2C_Stop(void){I2CONSET=STO;I2CONCLR=SI;}//寫一字節(jié)數(shù)據(jù)voidWriteByte(uint8data){I2DAT=data;I2CONCLR=SI;}//寫地址voidWriteAddr(uint8Mode){WriteByte(Mode);if(Mode==Read_C01){ while(I2STAT!=0x40);}else{ while(I2STAT!=0x18);}}//寫數(shù)據(jù)voidWriteData(uint8data){WriteByte(data);while(I2STAT!=0x28);} //讀字節(jié)數(shù)據(jù)uint8ReadByte(uint8last){if(last){I2CONCLR=AA;I2CONCLR=SI;while(I2STAT!=0x58);}else{I2CONSET=AA;I2CONCLR=SI;while(I2STAT!=0x50);}return(I2DAT);}//寫24C01voidWriteC01(uint8StartAddr,uint8CountByte,uint8*i2c_buf){uint8i=0;I2C_Start();WriteAddr(Write_C01);WriteData(StartAddr);for(i=0;i<CountByte;i++){WriteData(i2c_buf[i]);}I2C_Stop();}//讀24C01voidReadC01(uint8StartAddr,uint8CountByte,uint8*i2c_buf){uint8i=0;//設(shè)置讀指針I(yè)2C_Start();WriteAddr(Write_C01);WriteData(StartAddr);I2C_Stop();//開始讀數(shù)據(jù)I2C_Start();WriteAddr(Read_C01);for(i=0;i<CountByte-1;i++){i2c_buf[i]=ReadByte(!lastbyte);}i2c_buf[i]=ReadByte(lastbyte);I2C_Stop();}//延時函數(shù)voidDelayMs(uint8dly){uint8i;for(;dly>0;dly--)for(i=0;i<1000;i++);}數(shù)字電子技術(shù)課程設(shè)計報告——EDA實現(xiàn)多功能數(shù)字鐘專業(yè)班級:姓名:學(xué)號:指導(dǎo)教師:設(shè)計日期: 目錄一、實驗任務(wù) 1二、關(guān)鍵詞 1三、內(nèi)容摘要 1四、數(shù)字鐘電路系統(tǒng)組成框圖 2五、各個功能模塊的實現(xiàn) 3(1)小時計時 3(2)分鐘計時 3(3)秒鐘計時 4(4)校時校分 5(5)整點報時 6(6)時段控制 6六、數(shù)字鐘的頂層文件 7七、下載 8(1)添加譯碼模塊后的原理圖 8(2)選用芯片 8(3)分配引腳號 9(4)器件下載 9(5)效果顯示 9 八、遇到的問題及解決辦法 12九、《課程設(shè)計》中設(shè)計項目完成最終結(jié)論 13十、結(jié)束語 13十一、附錄 14一、實驗任務(wù):用FPGA器件和EDA技術(shù)實現(xiàn)多功能數(shù)字鐘的設(shè)計已知條件:1、QuartusП軟件2、FPGA實驗開發(fā)裝置基本功能:1、以數(shù)字形式顯示時、分、秒的時間;2、小時計數(shù)器為24進(jìn)制;3、分、秒計數(shù)器為60進(jìn)制。拓展功能:1、校時、校分(有兩個使能端構(gòu)成,分別為校時、校分功能,同時按無效)2、仿電臺報時(每個小時的59分51、53、55、57、59分別以四長聲一短聲進(jìn)行報時)3、時段控制(讓信號顯示燈在晚上19點至早上5點滅。之后亮)二、關(guān)鍵詞小時、分鐘計時模塊、頂層文件、整點報時、時段控制、下載模塊三、內(nèi)容摘要1、設(shè)計要求:(1)小時計數(shù)器為8421BCD碼24制;分和秒計數(shù)器為8421BCD碼60進(jìn)制計數(shù)器;(2)拓展功能:①校正“時”和“分”;②整點報時;③時段控制。2、硬件描述語言設(shè)計(VerilogHDL語言)方法在QuartusП軟件系統(tǒng)平臺上建立數(shù)字電子鐘電路的頂層文件并完成編譯和仿真。3、輸入變量:時鐘CPS,直接清零RD;輸出變量:小時計時H[7..4]、H[3..0]為8421BCD碼輸出,其時鐘為CPH;之后的分計時、秒計時均為8421BCD碼輸出,其時鐘為CPS等。4、在頂層文件中,由若干低層模塊“打包”組成整個多功能數(shù)字鐘,分別對各模塊作設(shè)計及仿真,最后級聯(lián)各模塊,統(tǒng)調(diào)、仿真及下載,從而實現(xiàn)各項功能。四、數(shù)字鐘電路系統(tǒng)組成框圖:秒顯示器分顯示器時顯示器秒顯示器分顯示器時顯示器仿電臺報時仿電臺報時秒譯碼器分譯碼器時譯碼器主秒譯碼器分譯碼器時譯碼器時段控制體時段控制分計數(shù)器秒計數(shù)器時計數(shù)器電分計數(shù)器秒計數(shù)器時計數(shù)器定點鬧時路定點鬧時校時電路校時電路拓展電路五、各個功能模塊的實現(xiàn)(1)小時計時模塊圖如下:對該模塊進(jìn)行編譯及波形仿真如下:分析及結(jié)論:由仿真圖看出,當(dāng)小時的高四位為0、1時,小時的低四位為九時,在下一個時鐘的上跳延來了之后,高四位加一;當(dāng)小時的高四位為2,同時低四位為3時,小時的高低四位都清零。從而實現(xiàn)00—24分的記數(shù)功能。仿真波形顯示里23小時到00分的循環(huán)的過程仿真到位。對上述仿真波形圖進(jìn)行打包工作,將24進(jìn)制圖建立成模塊:(2)分鐘計時模塊原理圖如下:對該圖進(jìn)行編譯及波形仿真如下:分析及結(jié)論:分計數(shù)器是60進(jìn)制的。當(dāng)分鐘的高四位0、1、2、3、4時,小時的低四位為九時,在下一個時鐘的上跳延來了之后,高四位加一;當(dāng)分鐘的高四位為5,同時低四位為9時,分鐘的高低四位都清零。從而實現(xiàn)00—59秒的記數(shù)功能。Cp60S為向分的進(jìn)位信號上跳沿有效。仿真波形顯示里59秒到00秒的循環(huán)的過程,仿真到位。對上述仿真波形圖進(jìn)行打包工作,將60進(jìn)制圖建立成模塊:(3)秒鐘計時模塊原理圖如下:對該圖進(jìn)行編譯及波形仿真如下分析及結(jié)論:仿真實現(xiàn)00—59秒的記數(shù)功能。Cp60S為向分的進(jìn)位信號上跳沿有效。仿真波形顯示里59秒到00秒的循環(huán)的過程,仿真到位。對上述仿真波形圖進(jìn)行打包工作,將60進(jìn)制圖建立成模塊:(4)校時校分模塊模塊原理圖如下對該圖進(jìn)行編譯及波形仿真如下分析及結(jié)論:由仿真圖可以看出,當(dāng)SWM為0時,用秒時鐘CPS對分鐘進(jìn)行校對。當(dāng)SWH、SWM都不為0時、分鐘、小時正常計數(shù)。驗證了本模塊的邏輯功能(5)整點報時模塊對該圖進(jìn)行編譯及波形仿真如下由仿真圖波形圖可以看出,當(dāng)為59分51秒53秒55秒57秒時,以低音報時,當(dāng)以59分59秒時以高音報時。驗證了本模塊的邏輯功能正確。(6)時段控制模塊對該圖進(jìn)行編譯及波形仿真如下由仿真圖波形圖可以看出,從6點到18點,路燈滅,從19點到凌晨5點(包括5點)路燈亮,驗證了本模塊的邏輯功能正確。六、多功能數(shù)字鐘的頂層文件部分原理圖如下:對該圖進(jìn)行編譯及波形仿真如下由仿真波形分析:①電子鐘走時正常;②通過對SWH和SWM的操作,能“校時”“校分”;③整點高音低音報時;④時段控制路燈的亮滅。七、下載1、添加譯碼模塊后的原理圖2、選用芯片3、分配引腳號4、對器件進(jìn)行下載在電腦上安裝實驗板驅(qū)動然后下載模塊進(jìn)行驗證時鐘功能。5、效果顯示①校時②校分③整點報時八、《課程設(shè)計》中遇到的問題及解決辦法:(1)在用verilogHDL描述模塊時一些語言的理解不是很熟悉也不是很理解的到位,通過查找其他書籍和詢問老師才得以理解。(2)模塊編譯成功了進(jìn)行仿真的時候有些時候得不到相應(yīng)的結(jié)果,會有錯誤出現(xiàn),通過回頭檢查,發(fā)現(xiàn)是自己沒有按照操作步驟中的setting進(jìn)行設(shè)置所以得不到相應(yīng)的仿真圖形。(3)在最后的所有打包模塊級聯(lián)的時候,很多相應(yīng)的細(xì)節(jié)沒有注意,例如,有些管腳需要輸入這個管腳而我沒有給,還有一些管腳之間的鏈接,我由于疏忽有些標(biāo)明是大寫,有些標(biāo)明是小寫,因此,聯(lián)接不成功。后來反復(fù)的檢查就成功了。(3)在實驗板上驗證效果的時候在QuartusП9.1軟件上進(jìn)行操作,且發(fā)現(xiàn)該軟件中沒有相對應(yīng)的芯片后咨詢老師才知應(yīng)在更高級版本QuartusП11.0中操作。(4)在效果顯示上面我一開始的效果是秒鐘走時正常,到了分鐘該進(jìn)制它不進(jìn)制。老師說是級聯(lián)有問題,經(jīng)過返回去修改模塊、仿真均沒有問題。后來就將分鐘、時鐘的模塊換成了用圖形仿真進(jìn)行打包然后級聯(lián)在進(jìn)行下載顯示效果,效果是成功的。后來也有部分同學(xué)也出現(xiàn)了這樣的狀況,老師好好的看了各模塊,原來一些模塊有著相應(yīng)的問題。九、《課程設(shè)計》中設(shè)計項目完成最終結(jié)論特點:將我們所學(xué)的知識來運(yùn)用實現(xiàn)具有以二十四小時計時、顯示、整點報時、時間設(shè)置和時段控制的功能。實用性:數(shù)字電子鐘在我們平常生活中很常用,應(yīng)用比較廣泛,而經(jīng)過我所設(shè)計的這款數(shù)字鐘設(shè)計過程也比較簡單,通過編程就能達(dá)到相應(yīng)的功能。心得體會:縱使有很多問題,但最終都被解決了,雖然有的問題是和同學(xué)討論解決的,有些東西是請教老師的但還是很高興的。在這些錯誤中也透露了自己對現(xiàn)有數(shù)電知識掌握的不牢固,對很多概念仍處于朦朧狀態(tài)。以及對軟件的使用不是很熟悉。因此這些是我以后還需要加強(qiáng)學(xué)習(xí)的地方。十、結(jié)束語通過這次VHDL課程設(shè)計,我學(xué)到了很多,對于原本掌握的不好的數(shù)字邏輯相關(guān)知識,在課程設(shè)計具體實踐中有了很深刻的認(rèn)識,在對于QuartusП的操作上也有很大的提高,增加了操作的熟練程度,現(xiàn)在我已經(jīng)有信心做任何的設(shè)計課題。在學(xué)到新知識的同時,我也認(rèn)識到了VHDL設(shè)計的困難性。同時我也覺得將所學(xué)的知識融會貫通的運(yùn)用到實際操作中還是需要一些更多的鍛煉。最后,感謝老師們幫我處理一些解決不了的問題,還要感謝在我思維陷入困境時給予我指點,讓我獲得靈感的同學(xué)們以及來幫助我解決問題的同學(xué),謝謝大家!十一、附錄1、分頻模塊程序modulediv_zh(f,_500HzOut,_1KHzOut,ncR,CLOCK_50,s);inputncR,CLOCK_50,s;output_500HzOut,_1KHzOut,f;wire_1HzOut,_5HzOut;assignf=s?_5HzOut:_1HzOut;divn#(.WIDTH(26),.N(50000000))u0(.clk(CLOCK_50),.rst_n(ncR),.o_clk(_1HzOut));divn#(.WIDTH(17),.N(100000))u1(.clk(CLOCK_50),.rst_n(ncR),.o_clk(_500HzOut));divn#(.WIDTH(16),.N(50000))u2(.clk(CLOCK_50),.rst_n(ncR),.o_clk(_1KHzOut));divn#(.WIDTH(24),.N(10000000))u3(.clk(CLOCK_50),.rst_n(ncR),.o_clk(_5HzOut));endmodulemoduledivn(o_clk,clk,rst_n);inputclk,rst_n;outputo_clk;parameterWIDTH=3;parameterN=6;reg[WIDTH-1:0]cnt_p;reg[WIDTH-1:0]cnt_n;regclk_p;regclk_n;assigno_clk=(N==1)?clk:(N[0]?(clk_p|clk_n):clk_p);always@(posedgeclkornegedgerst_n)beginif(!rst_n)cnt_p<=0;elseif(cnt_p==N-1)cnt_p<=0;elsecnt_p<=cnt_p+1;endalways@(posedgeclkornegedgerst_n)beginif(!rst_n)clk_p<=0;elseif(cnt_p<(N>>1))clk_p<=1;elseclk_p<=0;endalways@(negedgeclkornegedgerst_n)beginif(!rst_n)cnt_n<=0;elseif(cnt_n==N-1)cnt_n<=0;elsecnt_n<=cnt_n+1;endalways@(negedgeclkornegedgerst_n)beginif(!rst_n)clk_n<=0;elseif(cnt_n<(N>>1))clk_n<=1;elseclk_n<=0;endendmodule2、譯碼模塊程序moduledecode4_7(input[3:0]indec_0,indec_1,indec_2,indec_3,indec_4,indec_5,indec_6,indec_7,outputreg[6:0]dout_0,dout_1,dout_2,dout_3,dout_4,dout_5,dout_6,dout_7);always@(indec_0orindec_1orindec_2orindec_3orindec_4orindec_5orindec_6orindec_7)begincase(indec_0)4'h1:dout_0=7'b111_1001;//---0----4'h2:dout_0=7'b010_0100;//||4'h3:dout_0=7'b011_0000;//514'h4:dout_0=7'b001_1001;//||4'h5:dout_0=7'b001_0010;//---6----4'h6:dout_0=7'b000_0010;//||4'h7:dout_0=7'b111_1000;//424'h8:dout_0=7'b000_0000;//||4'h9:dout_0=7'b001_1000;//---3----4'ha:dout_0=7'b000_1000;4'hb:dout_0=7'b000_0011;4'hc:dout_0=7'b100_0110;4'hd:dout_0=7'b010_0001;4'he:dout_0=7'b000_0110;4'hf:dout_0=7'b000_1110;4'h0:dout_0=7'b100_0000;endcasecase(indec_1)4'h1:dout_1=7'b111_1001;//---0----4'h2:dout_1=7'b010_0100;//||4'h3:dout_1=7'b011_0000;//514'h4:dout_1=7'b001_1001;//||4'h5:dout_1=7'b001_0010;//---6----4'h6:dout_1=7'b000_0010;//||4'h7:dout_1=7'b111_1000;//424'h8:dout_1=7'b000_0000;//||4'h9:dout_1=7'b001_1000;//---3----4'ha:dout_1=7'b000_1000;4'hb:dout_1=7'b000_0011;4'hc:dout_1=7'b100_0110;4'hd:dout_1=7'b010_0001;4'he:dout_1=7'b000_0110;4'hf:dout_1=7'b000_1110;4'h0:dout_1=7'b100_0000;endcasecase(indec_2)4'h1:dout_2=7'b111_1001;//---0----4'h2:dout_2=7'b010_0100;//||4'h3:dout_2=7'b011_0000;//514'h4:dout_2=7'b001_1001;//||4'h5:dout_2=7'b001_0010;//---6----4'h6:dout_2=7'b000_0010;//||4'h7:dout_2=7'b111_1000;//424'h8:dout_2=7'b000_0000;//||4'h9:dout_2=7'b001_1000;//---3----4'ha:dout_2=7'b000_1000;4'hb:dout_2=7'b000_0011;4'hc:dout_2=7'b100_0110;4'hd:dout_2=7'b010_0001;4'he:dout_2=7'b000_0110;4'hf:dout_2=7'b000_1110;4'h0:dout_2=7'b100_0000;endcasecase(indec_3)4'h1:dout_3=7'b111_1001;//---0----4'h2:dout_3=7'b010_0100;//||4'h3:dout_3=7'b011_0000;//514'h4:dout_3=7'b001_1001;//||4'h5:dout_3=7'b001_0010;//---6----4'h6:dout_3=7'b000_0010;//||4'h7:dout_3=7'b111_1000;//424'h8:dout_3=7'b000_0000;//||4'h9:dout_3=7'b001_1000;//---3----4'ha:dout_3=7'b000_1000;4'hb:dout_3=7'b000_0011;4'hc:dout_3=7'b100_0110;4'hd:dout_3=7'b010_0001;4'he:dout_3=7'b000_0110;4'hf:dout_3=7'b000_1110;4'h0:dout_3=7'b100_0000;endcasecase(indec_4)4'h1:dout_4=7'b111_1001;//---0----4'h2:dout_4=7'b010_0100;//||4'h3:dout_4=7'b011_0000;//514'h4:dout_4=7'b001_1001;//||4'h5:dout_4=7'b001_0010;//---6----4'h6:dout_4=7'b000_0010;//||4'h7:dout_4=7'b111_1000;//424'h8:dout_4=7'b000_0000;//||4'h9:dout_4=7'b001_1000;//---3----4'ha:dout_4=7'b000_1000;4'hb:dout_4=7'b000_0011;4'hc:dout_4=7'b100_0110;4'hd:dout_4=7'b010_0001;4'he:dout_4=7'b000_0110;4'hf:dout_4=7'b000_1110;4'h0:dout_4=7'b100_0000;endcasecase(indec_5)4'h1:dout_5=7'b111_1001;//---0----4'h2:dout_5=7'b010_0100;//||4'h3:dout_5=7'b011_0000;//514'h4:dout_5=7'b001_1001;/
溫馨提示
- 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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- JJF 2160-2024激光共聚焦顯微鏡校準(zhǔn)規(guī)范
- 課件講稿職場教學(xué)課件
- 2024年展覽策劃與組織合同
- 2024年度獎學(xué)金獎品采購合同
- 2024年度鋼材生產(chǎn)設(shè)備采購合同
- 2024購銷違約合同范本范文
- 2024融資互相擔(dān)保合同范本
- 2024年子女撫養(yǎng)權(quán)協(xié)議書范本
- 2024年度標(biāo)的500萬元廣告發(fā)布合同
- 2024就新能源公交車采購的買賣合同
- 故障車輛應(yīng)急調(diào)換方案
- 精神分裂癥病歷
- 2023年中小學(xué)教師心理健康教育試卷(含答案)
- 金融隨機(jī)分析2課后答案
- 高中心理健康教育-痛并快樂著-考試后心理輔導(dǎo)教學(xué)課件設(shè)計
- 項目驗收匯報ppt模板
- 分包合同(施工隊)
- 網(wǎng)電咨詢績效考核KPI
- 2023-2024學(xué)年廣東省茂名市小學(xué)數(shù)學(xué)五年級上冊期末評估考試題
- GB/T 4436-2012鋁及鋁合金管材外形尺寸及允許偏差
- 第10講-群體決策模型
評論
0/150
提交評論