




版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
基于iic協(xié)議的數(shù)碼管顯示以下是滿足IIC總線協(xié)議的功能性代碼,包括20ms分頻計(jì)數(shù)器,按鍵鎖存器,IIC總線布局描述和體現(xiàn)。為了在SCL低電平的中點(diǎn)改變SDA上的數(shù)據(jù)我們需要將IIC的時(shí)鐘2倍或4倍頻下以獲取輔助時(shí)鐘來(lái)監(jiān)測(cè)SCL的中點(diǎn)有時(shí)我們還需設(shè)計(jì)一些狀態(tài)標(biāo)志位來(lái)表示iic的通信狀態(tài)狀態(tài)標(biāo)志:
─
發(fā)送器/接收器模式標(biāo)志
─
字節(jié)發(fā)送結(jié)束標(biāo)志
─
IiC總線忙標(biāo)志
錯(cuò)誤標(biāo)志
─
主模式時(shí)的仲裁丟失
─
地址/數(shù)據(jù)傳輸后的應(yīng)答(ACK)錯(cuò)誤
─
檢測(cè)到錯(cuò)位的起始或停止條件
─
禁止拉長(zhǎng)時(shí)鐘功能時(shí)的上溢或下溢
中斷
─
1個(gè)中斷用于地址/數(shù)據(jù)通訊成功
─
1個(gè)中斷用于錯(cuò)誤//--------------------------------------------//按鍵檢測(cè)moduleiic_come(clk,rst_n,sw1,sw2,scl,dis_data,sda);//---Portsdeclearation---inputclk;inputrst_n;inputsw1;inputsw2;outputscl;output[7:0]dis_data;inoutsda;wireclk;wirerst_n;wiresw1;wiresw2;regscl;reg[7:0]dis_data;wiresda;regsw1_r;//鍵值鎖存寄存器,每20ms檢測(cè)一次鍵值regsw2_r;reg[3:0]cnt_20ms;//20ms計(jì)數(shù)寄存器always@(posedgeclkornegedgerst_n)if(!rst_n)cnt_20ms<=4'd0;elsecnt_20ms<=cnt_20ms+1;//不斷計(jì)數(shù)always@(posedgeclkornegedgerst_n)if(!rst_n)beginsw1_r<=1'b1;//鍵值寄存器復(fù)位,沒(méi)有鍵盤(pán)按下時(shí)鍵值都為1sw2_r<=1'b1;endelseif(cnt_20ms==4'd15)beginsw1_r<=sw1;//按鍵1值鎖存sw2_r<=sw2;//按鍵2值鎖存end//---------------------------------------------//分頻部分reg[2:0]cnt;//cnt=0:scl上升沿,cnt=1:scl高電平中間,cnt=2:scl下降沿,cnt=3:scl低電平中間reg[8:0]cnt_delay;//500循環(huán)計(jì)數(shù),產(chǎn)生iic所需要的時(shí)鐘regscl_r;//時(shí)鐘脈沖寄存器always@(posedgeclkornegedgerst_n)if(!rst_n)cnt_delay<=9'd0;elseif(cnt_delay==9'd32)cnt_delay<=9'd1;//計(jì)數(shù)到10us為scl的周期,即100KHzelsecnt_delay<=cnt_delay+1;//時(shí)鐘計(jì)數(shù)always@(posedgeclkornegedgerst_n)beginif(!rst_n)cnt<=3'd5;elsebegincase(cnt_delay)9'd8:cnt<=3'd1;//cnt=1:scl高電平中間,用于數(shù)據(jù)采樣9'd16:cnt<=3'd2;//cnt=2:scl下降沿9'd24:cnt<=3'd3;//cnt=3:scl低電平中間,用于數(shù)據(jù)變化9'd32:cnt<=3'd0;//cnt=0:scl上升沿default:cnt<=3'd4;endcaseendend/*parameterSCL_POS=(cnt==3'd0);//cnt=0:scl上升沿parameterSCL_HIG=(cnt==3'd1);//cnt=1:scl高電平中間,用于數(shù)據(jù)采樣parameterSCL_NEG=(cnt==3'd2);//cnt=2:scl下降沿parameterSCL_LOW=(cnt==3'd3);//cnt=3:scl低電平中間,用于數(shù)據(jù)變化*/wireSCL_POS;wireSCL_HIG;wireSCL_NEG;wireSCL_LOW;assignSCL_POS=(cnt==3'd0);assignSCL_HIG=(cnt==3'd1);assignSCL_NEG=(cnt==3'd2);assignSCL_LOW=(cnt==3'd3);always@(posedgeclkornegedgerst_n)if(!rst_n)scl_r<=1'b0;elseif(cnt==3'd0)scl_r<=1'b1;//scl信號(hào)上升沿elseif(cnt==3'd2)scl_r<=1'b0;//scl信號(hào)下降沿assignscl=scl_r;//產(chǎn)生iic所需要的時(shí)鐘//---------------------------------------------//需要寫(xiě)入24C02的地址和數(shù)據(jù)parameterDEVICE_READ=8'b1010_0001;//被尋址器件地址(讀操作)parameterDEVICE_WRITE=8'b1010_0000;//被尋址器件地址(寫(xiě)操作)parameterWRITE_DATA=8'b0001_0001;//寫(xiě)入EEPROM的數(shù)據(jù)parameterBYTE_ADDR=8'b0000_0011;//寫(xiě)入/讀出EEPROM的地址寄存器reg[7:0]db_r;//在IIC上傳送的數(shù)據(jù)寄存器reg[7:0]read_data;//讀出EEPROM的數(shù)據(jù)寄存器//---------------------------------------------//讀、寫(xiě)時(shí)序parameterIDLE=4'd0;parameterSTART1=4'd1;parameterADD1=4'd2;parameterACK1=4'd3;parameterADD2=4'd4;parameterACK2=4'd5;parameterSTART2=4'd6;parameterADD3=4'd7;parameterACK3=4'd8;parameterDATA=4'd9;parameterACK4=4'd10;parameterSTOP1=4'd11;parameterSTOP2=4'd12;reg[3:0]cstate;//狀態(tài)寄存器regsda_r;//輸出數(shù)據(jù)寄存器regsda_link;//輸出數(shù)據(jù)sda信號(hào)inout方向控制位reg[3:0]num;//always@(posedgeclkornegedgerst_n)beginif(!rst_n)begincstate<=IDLE;sda_r<=1'b1;sda_link<=1'b0;num<=4'd0;read_data<=8'b0000_0000;endelsecase(cstate)IDLE:beginsda_link<=1'b1;//數(shù)據(jù)線sda為inputsda_r<=1'b1;if(!sw1_r||!sw2_r)begin//SW1,SW2鍵有一個(gè)被按下db_r<=DEVICE_WRITE;//送器件地址(寫(xiě)操作)cstate<=START1;endelsecstate<=IDLE;//沒(méi)有任何鍵被按下endSTART1:beginif(SCL_HIG)begin//scl為高電平期間sda_link<=1'b1;//數(shù)據(jù)線sda為outputsda_r<=1'b0;//拉低數(shù)據(jù)線sda,產(chǎn)生起始位信號(hào)cstate<=ADD1;num<=4'd0;//num計(jì)數(shù)清零endelsecstate<=START1;//等待scl高電平中間位置到來(lái)endADD1:beginif(SCL_LOW)beginif(num==4'd8)beginnum<=4'd0;//num計(jì)數(shù)清零sda_r<=1'b1;sda_link<=1'b0;//sda置為高阻態(tài)(input)cstate<=ACK1;endelsebegincstate<=ADD1;num<=num+1;case(num)4'd0:sda_r<=db_r[7];4'd1:sda_r<=db_r[6];4'd2:sda_r<=db_r[5];4'd3:sda_r<=db_r[4];4'd4:sda_r<=db_r[3];4'd5:sda_r<=db_r[2];4'd6:sda_r<=db_r[1];4'd7:sda_r<=db_r[0];default:;endcase//sda_r<=db_r[4'd7-num];//送器件地址,從高位開(kāi)始endend//elseif(SCL_POS)db_r<={db_r[6:0],1'b0};//器件地址左移1bitelsecstate<=ADD1;endACK1:beginif(/*!sda*/SCL_NEG)begin//注:24C01/02/04/08/16器件可以不考慮應(yīng)答位cstate<=ADD2;//從機(jī)響應(yīng)信號(hào)db_r<=BYTE_ADDR;//1地址endelsecstate<=ACK1;//等待從機(jī)響應(yīng)endADD2:beginif(SCL_LOW)beginif(num==4'd8)beginnum<=4'd0;//num計(jì)數(shù)清零sda_r<=1'b1;sda_link<=1'b0;//sda置為高阻態(tài)(input)cstate<=ACK2;endelsebeginsda_link<=1'b1;//sda作為outputnum<=num+1;case(num)4'd0:sda_r<=db_r[7];4'd1:sda_r<=db_r[6];4'd2:sda_r<=db_r[5];4'd3:sda_r<=db_r[4];4'd4:sda_r<=db_r[3];4'd5:sda_r<=db_r[2];4'd6:sda_r<=db_r[1];4'd7:sda_r<=db_r[0];default:;endcase//sda_r<=db_r[4'd7-num];//送EEPROM地址(高bit開(kāi)始)cstate<=ADD2;endend//elseif(SCL_POS)db_r<={db_r[6:0],1'b0};//器件地址左移1bitelsecstate<=ADD2;endACK2:beginif(/*!sda*/SCL_NEG)begin//從機(jī)響應(yīng)信號(hào)if(!sw1_r)begincstate<=DATA;//寫(xiě)操作db_r<=WRITE_DATA;//寫(xiě)入的數(shù)據(jù)endelseif(!sw2_r)begindb_r<=DEVICE_READ;//送器件地址(讀操作),特定地址讀需要執(zhí)行該步驟以下操作cstate<=START2;//讀操作endendelsecstate<=ACK2;//等待從機(jī)響應(yīng)endSTART2:begin//讀操作起始位if(SCL_LOW)beginsda_link<=1'b1;//sda作為outputsda_r<=1'b1;//拉高數(shù)據(jù)線sdacstate<=START2;endelseif(SCL_HIG)begin//scl為高電平中間sda_r<=1'b0;//拉低數(shù)據(jù)線sda,產(chǎn)生起始位信號(hào)cstate<=ADD3;endelsecstate<=START2;endADD3:begin//送讀操作地址if(SCL_LOW)beginif(num==4'd8)beginnum<=4'd0;//num計(jì)數(shù)清零sda_r<=1'b1;sda_link<=1'b0;//sda置為高阻態(tài)(input)cstate<=ACK3;endelsebeginnum<=num+1;case(num)4'd0:sda_r<=db_r[7];4'd1:sda_r<=db_r[6];4'd2:sda_r<=db_r[5];4'd3:sda_r<=db_r[4];4'd4:sda_r<=db_r[3];4'd5:sda_r<=db_r[2];4'd6:sda_r<=db_r[1];4'd7:sda_r<=db_r[0];default:;endcase//sda_r<=db_r[4'd7-num];//送EEPROM地址(高bit開(kāi)始)cstate<=ADD3;endend//elseif(SCL_POS)db_r<={db_r[6:0],1'b0};//器件地址左移1bitelsecstate<=ADD3;endACK3:beginif(/*!sda*/SCL_NEG)begincstate<=DATA;//從機(jī)響應(yīng)信號(hào)sda_link<=1'b0;endelsecstate<=ACK3;//等待從機(jī)響應(yīng)endDATA:beginif(!sw2_r)begin//讀操作if(num<=4'd7)begincstate<=DATA;if(SCL_HIG)beginnum<=num+1;case(num)4'd0:read_data[7]<=sda;4'd1:read_data[6]<=sda;4'd2:read_data[5]<=sda;4'd3:read_data[4]<=sda;4'd4:read_data[3]<=sda;4'd5:read_data[2]<=sda;4'd6:read_data[1]<=sda;4'd7:read_data[0]<=sda;default:;endcase//read_data[4'd7-num]<=sda;//讀數(shù)據(jù)(高bit開(kāi)始)end//elseif(SCL_NEG)read_data<={read_data[6:0],read_data[7]};//數(shù)據(jù)循環(huán)右移endelseif((SCL_LOW)&&(num==4'd8))beginnum<=4'd0;//num計(jì)數(shù)清零cstate<=ACK4;endelsecstate<=DATA;endelseif(!sw1_r)begin//寫(xiě)操作sda_link<=1'b1;if(num<=4'd7)begincstate<=DATA;if(SCL_LOW)beginsda_link<=1'b1;//數(shù)據(jù)線sda作為outputnum<=num+1;case(num)4'd0:sda_r<=db_r[7];4'd1:sda_r<=db_r[6];4'd2:sda_r<=db_r[5];4'd3:sda_r<=db_r[4];4'd4:sda_r<=db_r[3];4'd5:sda_r<=db_r[2];4'd6:sda_r<=db_r[1];4'd7:sda_r<=db_r[0];default:;endcase//sda_r<=db_r[4'd7-num];//寫(xiě)入數(shù)據(jù)(高bit開(kāi)始)end//elseif(SCL_POS)db_r<={db_r[6:0],1'b0};//寫(xiě)入數(shù)據(jù)左移1bitendelseif((SCL_LOW)&&(num==4'd8))beginnum<=4'd0;sda_r<=1'b1;sda_link<=1'b0;//sda置為高阻態(tài)cstate<=ACK4;endelsecstate<=DATA;endendACK4:beginif(/*!sda*/SCL_NEG)begin//sda_r<=1'b1;cstate<=STOP1;endelsecstate<=ACK4;endSTOP1:beginif(SCL_LOW)beginsda_link<=1'b1;sda_r<=1'b0;cstate<=STOP1;endelseif(SCL_HIG)beginsda_r<=1'b1;//scl為高時(shí),sda產(chǎn)生上升沿(結(jié)束信號(hào))cstate<=STOP2;endelsecstate<=STOP1;endSTOP2:beginif(SCL_LOW)sda_r<=1'b1;elseif(cnt_20ms==4'd15)cstate<=IDLE;elsecstate<=STOP2;enddefault:cstate<=IDLE;endcaseendassignsda=sda_link?sda_r:1'bz;assigndis_data=read_data;endmodule//iic_come這一部分代碼是對(duì)應(yīng)數(shù)碼管顯示上的信號(hào),包括數(shù)碼管信號(hào)從0~F的數(shù)碼管的設(shè)置和對(duì)應(yīng)num值變化而改變的數(shù)碼管控制信號(hào)sm_db。moduleled_seg7(clk,rst_n,dis_data,sm_cs1_n,sm_cs2_n,sm_db);//---Portsdeclearation---inputclk;inputrst_n;input[7:0]dis_data;outputsm_cs1_n;outputsm_cs2_n;output[6:0]sm_db;wireclk;wirerst_n;wire[7:0]dis_data;regsm_cs1_n;wiresm_cs2_n;reg[6:0]sm_db;//----Codestartshere-----reg[7:0]cnt;always@(posedgeclkornegedgerst_n)if(!rst_n)cnt<=8'd0;elsecnt<=cnt+1;//-------------------------------------------------------------------------------/*共陰極:不帶小數(shù)點(diǎn);0,1,2,3,4,5,6,7,db3fh,06h,5bh,4fh,66h,6dh,7dh,07h;8,9,a,b,c,d,e,f,滅db7fh,6fh,77h,7ch,39h,5eh,79h,71h,00h*/parameterseg0=7'h3f,seg1=7'h06,seg2=7'h5b,seg3=7'h4f,seg4=7'h66,seg5=7'h6d,seg6=7'h7d,seg7=7'h07,seg8=7'h7f,seg9=7'h6f,sega=7'h77,segb=7'h7c,segc=7'h39,segd=7'h5e,sege=7'h79,segf=7'h71;reg[6:0]sm_dbr;//7段數(shù)碼管(不包括小數(shù)點(diǎn))wire[3:0]num;//顯示數(shù)據(jù)assignnum=cnt[7]?dis_data[7:4]:dis_data[3:0];assignsm_cs1_n=cnt[7];//數(shù)碼管1常開(kāi)assignsm_cs2_n=~cnt[7];//數(shù)碼管2常開(kāi)always@(posedgeclk)case(num)//NUM值顯示在兩個(gè)數(shù)碼管上4'h0:sm_dbr<=seg0;4'
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 虛擬現(xiàn)實(shí)技術(shù)應(yīng)用合同
- 商務(wù)樓物業(yè)管理外包合同
- 校園接送學(xué)生班車運(yùn)輸合同模板
- 工程監(jiān)理項(xiàng)目合同附加協(xié)議
- 商業(yè)店鋪?zhàn)赓U合同書(shū)
- 跨國(guó)電子產(chǎn)品采購(gòu)合同:買家如何掌握主動(dòng)權(quán)
- 個(gè)人消費(fèi)貸款合同樣本
- 市政道路綠化養(yǎng)護(hù)分包合同
- 投資擔(dān)保合同文件
- 度戰(zhàn)略合作合同新篇章
- 2025年健身教練合同協(xié)議樣本
- 2025年湖南商務(wù)職業(yè)技術(shù)學(xué)院?jiǎn)握新殬I(yè)技能測(cè)試題庫(kù)必考題
- 中儲(chǔ)糧黑龍江分公司招聘考試試卷2023
- 化學(xué)實(shí)驗(yàn)室安全職責(zé)分配
- 9 楓樹(shù)上的喜鵲 【知識(shí)精研】語(yǔ)文二年級(jí)下冊(cè) 統(tǒng)編版
- 2025年工程策劃勘察設(shè)計(jì)合作框架協(xié)議書(shū)
- 2025年哈爾濱鐵道職業(yè)技術(shù)學(xué)院高職單招語(yǔ)文2018-2024歷年參考題庫(kù)頻考點(diǎn)含答案解析
- 國(guó)外銀發(fā)經(jīng)濟(jì)發(fā)展
- 2025年高考作文素材積累之《人民日?qǐng)?bào)》時(shí)評(píng)觀點(diǎn)摘抄(標(biāo)題、開(kāi)頭、分論點(diǎn)、結(jié)尾)
- 2024年07月上海興業(yè)銀行上海分行招考筆試歷年參考題庫(kù)附帶答案詳解
- 中藥玫瑰花培訓(xùn)
評(píng)論
0/150
提交評(píng)論