在线看毛片网站电影-亚洲国产欧美日韩精品一区二区三区,国产欧美乱夫不卡无乱码,国产精品欧美久久久天天影视,精品一区二区三区视频在线观看,亚洲国产精品人成乱码天天看,日韩久久久一区,91精品国产91免费

<menu id="6qfwx"><li id="6qfwx"></li></menu>
    1. <menu id="6qfwx"><dl id="6qfwx"></dl></menu>

      <label id="6qfwx"><ol id="6qfwx"></ol></label><menu id="6qfwx"></menu><object id="6qfwx"><strike id="6qfwx"><noscript id="6qfwx"></noscript></strike></object>
        1. <center id="6qfwx"><dl id="6qfwx"></dl></center>

            新聞中心

            ATmega128(EEPROM)

            作者: 時(shí)間:2016-11-10 來源:網(wǎng)絡(luò) 收藏
            //atmega128的讀寫EEPROM示例程序,記錄CPU啟動(dòng)的次數(shù)到EEPROM中

            //在LED數(shù)碼管上顯示讀出的數(shù)據(jù),可用復(fù)位鍵刷新顯示
            //編譯環(huán)境 AVR Studio 4.17/AVR GCC
            //系統(tǒng)時(shí)鐘7.3728MHZ,設(shè)置熔絲位為外部高頻石英晶體振蕩,啟動(dòng)時(shí)間4.1ms

            //***********************************************************************
            //包含文件
            //***********************************************************************

            本文引用地址:http://www.biyoush.com/article/201611/317434.htm

            #include
            #include
            #define F_CPU7372800// 單片機(jī)主頻為7.3728MHz,用于延時(shí)子程序
            #include
            #include <avr/io.h>
            #include
            #include interrupt.h> //中斷信號(hào)頭文件

            //***********************************************************************
            //定義變量區(qū)
            //***********************************************************************

            #define Data_IO PORTA //數(shù)碼管數(shù)據(jù)口
            #define Data_DDR DDRA //數(shù)碼管數(shù)據(jù)口方向寄存器
            #define D_LE0 PORTD &= ~(1 << PD4) //數(shù)碼管段控制位為0,鎖存端口數(shù)據(jù)
            #define D_LE1 PORTD |= (1 << PD4) //數(shù)碼管段控制位為1,鎖存器輸出與端口一致
            #define W_LE0 PORTD &= ~(1 << PD5) //數(shù)碼管位控制位為0
            #define W_LE1 PORTD |= (1 << PD5) //數(shù)碼管位控制位為1


            #define delay_us(x) _delay_us(x) //AVR GCC延時(shí)函數(shù) x(us)
            #define delay_ms(x) _delay_ms(x) //AVR GCC延時(shí)函數(shù) x(ms)

            #define uchar unsigned char
            #define uint unsigned int

            //***********************************************************************
            //共陰數(shù)碼管顯示的斷碼表0~F
            //***********************************************************************

            uchar table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};
            uint A1,A2,A3; //定義的變量,顯示數(shù)據(jù)處理

            //***********************************************************************
            //IO端口初始化
            //***********************************************************************

            void system_init()
            {
            Data_IO=0xFF; //數(shù)據(jù)口為輸出
            Data_DDR=0xFF;

            PORTD=0xFF; //74HC573的控制口,設(shè)置為輸出
            DDRD=0xFF;
            PORTB=0XFF;
            DDRB=0XFF;
            }

            //*************************************************************************
            //74HC573控制數(shù)碼管動(dòng)態(tài)掃描顯示函數(shù),顯示采集到的溫度
            //*************************************************************************

            void Display_EEPROM(void)
            {
            uchar i,j;
            system_init();
            j=0x01; //此數(shù)據(jù)用來控制位選
            for(i=0;i<5;i++) //用后3位數(shù)碼管來顯示
            {
            D_LE1;
            W_LE1;
            Data_IO=~j;
            W_LE0;
            j=(j<<1);
            Data_IO=0x00;
            D_LE0;
            delay_ms(1);
            }
            D_LE1;
            W_LE1;
            Data_IO=~j;
            W_LE0;
            j=(j<<1);
            Data_IO=table[A1];
            D_LE0;
            delay_ms(1);

            D_LE1;
            W_LE1;
            Data_IO=~j;
            W_LE0;
            j=(j<<1);
            Data_IO=table[A2];
            D_LE0;
            delay_ms(1);

            D_LE1;
            W_LE1;
            Data_IO=~j;
            W_LE0;
            j=(j<<1);
            Data_IO=table[A3];
            D_LE0;
            delay_ms(1);

            D_LE1;
            W_LE1;
            Data_IO=0xff;
            W_LE0;

            }


            //*************************************************************************
            //數(shù)據(jù)處理函數(shù)
            //*************************************************************************
            void data_do(uchar temp_d)
            {
            uint A2t;
            A1=temp_d/100; //分出百,十,和個(gè)位
            A2t=temp_d%100;
            A2=A2t/10;
            A3=A2t%10;
            }


            //***********************************************************************
            // EEPROM讀取函數(shù)*/
            // addr:地址;number:長(zhǎng)度;p_buff:讀出數(shù)據(jù)存放指針
            //***********************************************************************
            void eprom_read(unsigned int addr, unsigned char number, unsigned char *p_buff) {

            while(EECR & (1 << EEWE)); //等待前面的寫完成

            EEARH = 0x00; //寫高字節(jié)地址

            while(number --) {
            EEARL = addr ++; //寫地址低字節(jié)
            EECR |= (1 << EERE); //讀允許位置1
            *p_buff++ = EEDR; //讀出EEDR中的數(shù)據(jù)
            }
            }
            //***********************************************************************
            // EEPROM寫入函數(shù)
            // addr:地址;number:長(zhǎng)度;p_buff:寫入數(shù)據(jù)存放指針
            //***********************************************************************
            void eprom_write(unsigned int addr, unsigned char number, unsigned char *p_buff) {

            EEARH = 0x00;

            while(number --) {
            while(EECR & (1 << EEWE)); //等待前面的寫完成
            EEARL = addr ++; //寫地址
            EEDR = *p_buff ++; //寫數(shù)據(jù)到EEDR
            EECR |= (1 << EEMWE); //主機(jī)寫入允許位
            EECR&=~(1<EECR |= (1 << EEWE); //EEWE為1,執(zhí)行寫操作
            }
            }


            //***********************************************************************
            // 主函數(shù)
            //***********************************************************************
            int main(void)
            {

            unsigned char temp;
            system_init(); //系統(tǒng)初始化
            eprom_read(0x10, 0x01, &temp);//讀出記錄
            delay_ms(10);
            temp ++; //計(jì)數(shù)值加1
            eprom_write(0x10, 0x01, &temp);//寫入記錄
            delay_ms(10);

            while (1)
            {
            data_do(temp); //每啟動(dòng)一次temp加1,記錄到EEPROM中
            Display_EEPROM();//顯示計(jì)數(shù)值
            }
            }



            關(guān)鍵詞: ATmega128EEPRO

            評(píng)論


            技術(shù)專區(qū)

            關(guān)閉