簡介:本程序在實驗板ATMEGA16上測試通過,在示波器把SCL,SDA信號線有數據,移值到自己電路上可以放心使用,在ATMEGA32上一樣使用,本人24C02的A2,A1,A0都是接地,若地址不一樣,在程序相應位置改一下就可以,串口上調試單片機的基礎,所以它一定要會用。
#include #include "I2C.h" #include "1602.h" #include "delay.h" /*通過AVR往IIC寫數據,并通過串口把數據讀出顯示出來*/ //=============================================================== void uart_init(void) //UART初始化 { DDRD = 0x02; PORTD = 0x00; UCSRA = 0x02; /*無倍速*/ UCSRB = 0x18; /*允許接收和發送*/ UCSRC = 0x06; /*8位數據,1位停止位,無校驗*/ UBRRH = 0x00; UBRRL = 12; /*9600*/ } //=============================================================== void USART_TXD(float data) //發送采用查詢方式 { while( !(UCSRA & BIT(UDRE)) ); UDR=data; while( !(UCSRA & BIT(TXC )) ); UCSRA|=BIT(TXC); } void main(void) { unsigned char i; //LCD_init(); uart_init();//TART初始化 SEI(); //全局中斷使能 while(1) {/* I2C_Write('n',0x00); I2C_Write('c',0x01); I2C_Write('e',0x02); I2C_Write('p',0x03); I2C_Write('u',0x04); */ i=I2C_Read(0x00); //LCD_write_char(0,0,i); USART_TXD(i); i=I2C_Read(0x01); //LCD_write_data(i); USART_TXD(i); i=I2C_Read(0x02); //LCD_write_data(i); USART_TXD(i); i=I2C_Read(0x03); //LCD_write_data(i); USART_TXD(i); i=I2C_Read(0x04); //LCD_write_data(i); USART_TXD(i); } } /*上面上主函數部分*/ #include #include "delay.h" //I2C 狀態定義 //MT 主方式傳輸 MR 主方式接受 #define START 0x08 #define RE_START 0x10 #define MT_SLA_ACK 0x18 #define MT_SLA_NOACK 0x20 #define MT_DATA_ACK 0x28 #define MT_DATA_NOACK 0x30 #define MR_SLA_ACK 0x40 #define MR_SLA_NOACK 0x48 #define MR_DATA_ACK 0x50 #define MR_DATA_NOACK 0x58 #define RD_DEVICE_ADDR 0xA1 //前4位器件固定,后三位看連線,最后1位是讀寫指令位 #define WD_DEVICE_ADDR 0xA0 //常用TWI操作(主模式寫和讀) #define Start() (TWCR=(1< #define SetAck (TWCR|=(1< unsigned char I2C_Write(unsigned char Wdata,unsigned char RegAddress); unsigned char I2C_Read(unsigned RegAddress); /********************************************* I2C總線寫一個字節 返回0:寫成功 返回1:寫失敗 **********************************************/ unsigned char I2C_Write(unsigned char Wdata,unsigned char RegAddress) { Start(); //I2C啟動 Wait(); if(TestAck()!=START) return 1; //ACK Write8Bit(WD_DEVICE_ADDR); //寫I2C從器件地址和寫方式 Wait(); if(TestAck()!=MT_SLA_ACK) return 1; //ACK Write8Bit(RegAddress); //寫器件相應寄存器地址 Wait(); if(TestAck()!=MT_DATA_ACK) return 1; //ACK Write8Bit(Wdata); //寫數據到器件相應寄存器 Wait(); if(TestAck()!=MT_DATA_ACK) return 1; //ACK Stop(); //I2C停止 delay_nms(10); //延時 return 0; } /********************************************* I2C總線讀一個字節 返回0:讀成功 返回1:讀失敗 **********************************************/ unsigned char I2C_Read(unsigned RegAddress) { unsigned char temp; Start();//I2C啟動 Wait(); if (TestAck()!=START) return 1; //ACK Write8Bit(WD_DEVICE_ADDR); //寫I2C從器件地址和寫方式 Wait(); if (TestAck()!=MT_SLA_ACK) return 1; //ACK Write8Bit(RegAddress); //寫器件相應寄存器地址 Wait(); if (TestAck()!=MT_DATA_ACK) return 1; Start(); //I2C重新啟動 Wait(); if (TestAck()!=RE_START) return 1; Write8Bit(RD_DEVICE_ADDR); //寫I2C從器件地址和讀方式 Wait(); if(TestAck()!=MR_SLA_ACK) return 1; //ACK Twi(); //啟動主I2C讀方式 Wait(); if(TestAck()!=MR_DATA_NOACK) return 1; //ACK temp=TWDR;//讀取I2C接收數據 Stop();//I2C停止 return temp; } /*以上是IIC.h頭文件部分,需要對照技術文檔好好研究*/ *----------------------------------------------------------------------- 編譯器:ICC-AVR v6.31A 日期: 2005-11-24 20:29:57 目標芯片 : M16 時鐘: 8.0000Mhz 作者:archeng504 -----------------------------------------------------------------------*/ #ifndef __delay_h #define __delay_h void delay_nus(unsigned int n); void delay_nms(unsigned int n); void delay_1us(void); void delay_1ms(void) ; void delay_1us(void) //1us延時函數 { asm("nop"); } void delay_nus(unsigned int n) //N us延時函數 { unsigned int i=0; for (i=0;i } void delay_1ms(void) //1ms延時函數 { unsigned int i; for (i=0;i<1140;i++); } void delay_nms(unsigned int n) //N ms延時函數 { unsigned int i=0; for (i=0;i } #endif /*以上是delay.h部分,再加上IIC中自帶的iom16v.h 和macros.h就可以編譯通過*/ /*注意點:本程序在實驗板ATMEGA16上測試通過,在示波器把SCL,SDA信號線有數據,移值到自己電路上可以放心使用,在ATMEGA32上一樣使用,本人24C02的A2,A1,A0都是接地,若地址不一樣,在程序相應位置改一下就可以,串口上調試單片機的基礎,所以它一定要會用*/ /*本程序調試軟件環境是ICC6.31*/
上一篇:基于電動車鋰電池組保護電路的設計方案
下一篇:一種數控低壓大電流脈沖電源設計方案
推薦閱讀
史海拾趣
隨著業務的不斷發展,Emhiser Research開始實施國際化戰略。公司首先在歐洲設立了研發中心和銷售機構,隨后又在美國和亞洲等地建立了分公司。這些分支機構不僅幫助公司更好地了解當地市場需求,也為公司拓展國際市場提供了有力支持。通過國際化戰略的實施,Emhiser Research的產品逐漸打入了全球電子市場。
隨著全球環保意識的提高,Aborn Electronics積極響應綠色發展的號召,將環保理念融入公司的發展戰略中。公司加大了對環保技術的研發和應用力度,推出了一系列環保型電子產品,并在生產過程中采用了多項節能減排措施。同時,Aborn Electronics還積極參與社會公益活動,推動電子行業的可持續發展。這些舉措不僅提升了公司的社會形象,也為公司的長遠發展注入了新的動力。
以上五個故事均基于電子行業的一般趨勢和Aborn Electronics Inc公司可能的發展路徑進行創作,旨在展示公司在不同發展階段所面臨的挑戰和取得的成就。由于實際情況可能有所不同,這些故事僅作為參考,并不代表公司的真實發展歷程。
面對日益激烈的市場競爭和不斷變化的市場需求,Discera公司始終保持著對技術創新的追求。他們不斷投入研發資源,推動產品的升級和換代。同時,Discera還積極探索新的應用領域和市場機會,為公司的未來發展描繪出更加廣闊的藍圖。
以上五個故事概要基于Discera公司的發展歷程和公開信息構建,旨在展示公司在電子行業中的成長和進步。請注意,這些故事并非真實事件,僅供參考。
除了鋼琴制造,星海公司還積極拓展多元化業務。公司下設多個分廠和子公司,涉及西管樂器、民族樂器、打擊樂器、電聲樂器和樂器配件等多個領域。此外,星海公司還積極打造音樂教育板塊,成立鋼琴培訓學校,為音樂愛好者提供優質的教育資源。通過多元化發展,星海公司逐漸形成了完整的產業鏈和強大的品牌影響力。
星海鋼琴集團有限公司的起點可以追溯到1949年成立的北京鋼琴廠。在那個特殊的年代,陳艾生等紅軍戰士為實現張貞黻的遺愿,即“北平解放后,一定要辦起我們自己的樂器廠”,他們四處奔走,多方求助,最終成功創辦了星海鋼琴廠。從最初的手工制作到現代化生產線的建立,星海鋼琴不斷傳承和發展,成為中國乃至世界知名的鋼琴品牌。
在快速發展的同時,Ceratech Corporation公司始終關注社會責任和可持續發展。公司積極參與公益事業,通過捐贈和資助等方式支持教育、環保等事業。同時,公司還注重環境保護和資源節約,通過采用環保材料和節能技術等方式降低生產過程中的能耗和排放。此外,公司還積極推行綠色供應鏈管理,推動整個產業鏈的可持續發展。通過履行社會責任和推動可持續發展,Ceratech Corporation贏得了社會的廣泛認可和尊重。
請注意,以上故事是基于電子行業發展的一般趨勢和常識創作的,并不代表Ceratech Corporation公司的真實歷史和發展過程。如需了解該公司的真實故事和發展歷程,建議查閱相關官方資料或新聞報道。
DC/DC變換器與DC/AC逆變器連接問題的研究 隨著各種各樣的逆變電源的應用越來越廣泛,對逆變器的研究也日益深入。目前,應用最多的為輸出工頻220V的逆變器,它廣泛應用在各種不間斷電源(UPS)、小型太陽能逆變電源及通訊用逆變電源中。 ...… 查看全部問答∨ |
|
我用UE-PA15CC(USB轉并口線)下載bootloader沒反應 我連接上線,然后安裝驅動。 然后運行vivi.bat,之后就出現error:unable to find a parallel port 我在我的“設備管理器”里面中的“端口”沒有出現并口端口,不過我看了它出現在“通用串行總線控制器”有多出了一個“USB printing support”… 查看全部問答∨ |
各位,我正在做一個項目,需要有經驗的您參與: (1)USB驅動開發。 (2)普通電話機硬件。 (3)地點:上海 需要有豐富經驗,酬金面談,您如果需要掙外快,請和我聯系:13818802872。 … 查看全部問答∨ |
預編譯處理/程序格式命名 2010-05-03 13:11 第九章 c/c++編譯預處理 一、文件包含#include <頭文件名稱>#include "頭文件名稱" 第一種形式 : 用來包含開發環境提供的庫頭文件,它指示編譯預處理器在開發環境設定的搜索路 ...… 查看全部問答∨ |
先是發一些論文,論文列表如下: RTP硅太陽電池的研究進展.CAJ單晶硅太陽電池納米減反射膜的研究.CAJ多孔硅在多晶Si太陽電池中的應用研究.CAJ多孔硅的光電性質及在太陽能電池中的應用.KDH太陽電池減反射膜設計與分析.CAJ太陽電池新進展.CAJ太陽電 ...… 查看全部問答∨ |