IIC接口E2PROM(AT24C64) 讀寫VERILOG 驅動源碼+仿真激勵文件:module i2c_dri #( parameter SLAVE_ADDR = 7'b1010000 , //EEPROM從機地址 parameter CLK_FREQ = 26'd50_000_000, //模塊輸入的時鐘頻率 parameter I2C_FREQ = 18'd250_000 //IIC_SCL的時鐘頻率 ) ( input clk , input rst_n , //i2c interface input i2c_exec , //I2C觸發執行信號 input bit_ctrl , //字地址位控制(16b/8b) input i2c_rh_wl , //I2C讀寫控制信號 input [15:0] i2c_addr , //I2C器件內地址 input [ 7:0] i2c_data_w , //I2C要寫的數據 output reg [ 7:0] i2c_data_r , //I2C讀出的數據 output reg i2c_done , //I2C一次操作完成 output reg i2c_ack , //I2C應答標志 0:應答 1:未應答 output reg scl , //I2C的SCL時鐘信號 inout sda , //I2C的SDA信號 //user interface output reg dri_clk //驅動I2C操作的驅動時鐘 );//localparam definelocalparam st_idle = 8'b0000_0001; //空閑狀態localparam st_sladdr = 8'b0000_0010; //發送器件地址(slave address)localparam st_addr16 = 8'b0000_0100; //發送16位字地址localparam st_addr8 = 8'b0000_1000; //發送8位字地址localparam st_data_wr = 8'b0001_0000; //寫數據(8 bit)localparam st_addr_rd = 8'b0010_0000; //發送器件地址讀localparam st_data_rd = 8'b0100_0000; //讀數據(8 bit)localparam st_stop = 8'b1000_0000; //結束I2C操作//reg definereg sda_dir ; //I2C數據(SDA)方向控制reg sda_out ; //SDA輸出信號reg st_done ; //狀態結束reg wr_flag ; //寫標志reg [ 6:0] cnt ; //計數reg [ 7:0] cur_state ; //狀態機當前狀態reg [ 7:0] next_state; //狀態機下一狀態reg [15:0] addr_t ; //地址reg [ 7:0] data_r ; //讀取的數據reg [ 7:0] data_wr_t ; //I2C需寫的數據的臨時寄存reg [ 9:0] clk_cnt ; //分頻時
標簽: iic 接口 e2prom at24c64 verilog 驅動 仿真
上傳時間: 2021-11-05
上傳用戶:
一、 實驗目的使用 51單片機的八位數碼管順序顯示自己的學號。掌握 C 語言、匯編語言兩種編程單片機控制程序的方法。掌握使用 Keil 4 或 Keil 5 軟件編寫、編譯、調試程序的方法。掌握使用 Proteus 軟件繪制電路原理圖、硬件仿真和程序調試。二、實驗設備筆記本電腦51 單片機(普中科技)八位數碼管(單片機上已集成)應用程序:Proteus 8.0、Keil uVision5、stc-isp-v6.88E三、實驗原理(1)數碼管數碼管按段數可分為七段數碼管和 8 段數碼管,八段數碼管比七段數碼管多一個發光二極管單元,也就是多一個小數點(DP),這個小數點可以更精確的表示數碼管想要顯示的內容。按能顯示多少個(8),可分為 1 位、2位、3位、4位、5 位、6位、7 位等數碼管。按發光二極管單元連接方式可分為共陽極數碼管和共陰極數碼管。共陽數碼管是指將所有發光二極管的陽極接到一起形成公共陽極(COM)的數碼管,共陽數碼管在應用時將公共極 COM 接到+5V,當某一字段發光二極管的陰極為低電平時,相應字段就點亮,當某一字段的陰極為高電平時,相應字段就不亮。共陰數碼管是指將所有發光二極管的陰極接到一起形成公共陰極(COM)的數碼管,共陰數碼管在應用時應將公共極 COM 接到地線 GND上,當某一字段發光二極管的陽極為高電平時,相應字段就點亮,當某一字段的陽極為低電平時,相應字段就不亮。(2)51單片機單片機(Microcontrollers)是一種集成電路芯片,是采用超大規模集成電路技術把具有數據處理能力的中央處理器 CPU、隨機存儲器 RAM、只讀存儲器ROM、多種 I/O口和中斷系統、定時器/計數器等功能集成到一塊硅片上構成的一個小而完善的微型計算機系統,在工業控制領域廣泛應用。MSC-51 單片機指以 8051為核心的單片機,由美國的 Intel 公司在 1980 年推出,80C51 是 MCS-51系列中的一個典型品種;其它廠商以 8051為基核開發出的CMOS 工藝單片機產品統稱為 80C51 系列。本實驗中我使用普中科技的 51 單片機來點亮八位數碼管并使其顯示我的學號(20198043)。四、 實驗 過程(1)熟悉數碼管使用 Proteus 軟件構建電路圖,學會如何點亮數碼管,熟悉如何使數碼管顯示不同的數字(0-9)。我們可以按照上面的原理圖讓對應的段導通,以顯示數字。對于共陽數碼管,若顯示數字 0,可以讓標號為 A,B,C,D,E,F 的段導通,標號為 G,H 的段不導通,然后將陽極通入高電壓,即顯示數字 0。代碼舉例如下:最后效果如下,成功點亮一個數碼管。經過更多嘗試和學習,學會使多位數碼管顯示多位數字。結果舉例如下:(2)多位數碼管顯示學號為了顯示我們學號,就不能只使用一位數碼管,需要使用八位數碼管,相較于單位數碼管,多位數碼管更加復雜,驅動函數有很大區別。多位數碼管使用同一組段選,不同的位選,因此就不能夠一對一地固定顯示,這就需要動態掃描。動態掃描:利用人眼視覺暫留,多位數碼管每次只顯示一位數字,但是切換頻率大于 200HZ(50 × 4),這樣就能讓人產生同時顯示多個數字的錯覺。具體操作是輪流向數碼管送字形碼和相應的位選。一個完整的驅動程序不只以上這些,一個完整的數碼管驅動有 6部分:1. 碼表(ROM):存儲段碼(一般放在 ROM中,節省 RAM空間),例如數字 0的段碼就是 0xC0,碼表則包含 0-9的段碼2. 顯存(RAM):保存要顯示的數字,取連續地址(便于查表)3. 段選賦值:通過查表(碼表)操作,將顯存映射到段碼4. 位選切換:切換顯示的位置5. 延時:顯示的數字短暫保持,提升亮度6. 消影:消除切換時不同位置互相影響而產生的殘影
上傳時間: 2022-06-08
上傳用戶:canderile
·詳細說明:美國機械工程師手冊英文原版 內有大量PDF文件 可供閱讀 可以給你很大提高
上傳時間: 2013-06-17
上傳用戶:eclipse
霍夫曼編碼是可變字長編碼(VLC)的一種,是消除編碼冗余最常用的方法。 它是Huffman于1952年提出一種編碼方法,它的基本原理是頻繁使用的數據用較短的代碼代替,較少使用的數據用較長的代碼代替,每個數據的代碼個不相同。有時稱之為最佳編碼,一般就叫作Huffman編碼。下面引證一個定理,該定理保證了按字符出現概率分配碼長,可使平均碼長最短。
上傳時間: 2014-11-23
上傳用戶:stella2015
寫一個程式將n個整數相加, 輸入檔的第一行是一個整數n, 接著n行每一行是一個整數, 你的程式要將這些整數相加並將結果輸出, 其中每個整數為不超過50位數的十進位數字
標簽: 程式
上傳時間: 2015-05-03
上傳用戶:佳期如夢
手機遊戲,把數字排以順序,初學人士學習用
標簽:
上傳時間: 2013-12-25
上傳用戶:zhengzg
最近去看監視器材,看到他們的監視軟體 就突發奇想自己來寫一個看看 程式會把移動中的物體用綠色框框起來 並且把當時的影像存成jpg檔(我把這個功能註解起來了) 我這個程式是在UltraEdit(類似記事本)下寫成的 程式裡用到JMF套件 主程式是webcamCapture.java
上傳時間: 2015-05-22
上傳用戶:zaizaibang
計算各種混沌系統李雅普洛夫指數的MATLAB 源程序。
上傳時間: 2015-05-26
上傳用戶:ryb
wolf 方法計算李雅普諾夫指數,matlab源程序
上傳時間: 2015-06-01
上傳用戶:shus521
用java寫的猜數字遊戲,是猜四位數的那一種,支援人機對戰,電腦最多猜七次就可以猜中玩家心中的數字,核心演算法是使用暴力法,大家可以參考
標簽: java
上傳時間: 2015-06-02
上傳用戶:l254587896