在线看毛片网站电影-亚洲国产欧美日韩精品一区二区三区,国产欧美乱夫不卡无乱码,国产精品欧美久久久天天影视,精品一区二区三区视频在线观看,亚洲国产精品人成乱码天天看,日韩久久久一区,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>

            新聞中心

            SD卡讀寫程序

            作者: 時間:2010-06-23 來源:網(wǎng)絡(luò) 收藏

            //實驗目的:學習卡的操作

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

            //軟件設(shè)計
            // 1、卡采用SPI通信
            // 2、先往里順序?qū)懭?-255共256個數(shù)據(jù),然后再讀回送LCD1602顯示
            //硬件要求:
            // 撥碼開關(guān)S11置ON
            // 跳線J18全部接通

            #include p30f6014.h> //dsPIC30F6014標準頭文件

            _FOSC(CSW_FSCM_OFF XT_PLL4); //4倍頻晶振,F(xiàn)ailsafe 時鐘關(guān)閉
            _FWDT(WDT_OFF); //關(guān)閉看門狗定時器
            _FBORPOR(PBOR_OFF MCLR_EN); //掉電復位禁止,MCLR復位使能。
            _FGS(CODE_PROT_OFF); //代碼保護禁止

            #define cs PORTGbits.RG9 //定義SD卡片選腳

            #define rs LATBbits.LATB4 //定義LCD控制位(注意這里只能用LATB寄存器,不能直接用PORTB寄存器)
            #define rw LATBbits.LATB5
            #define e LATBbits.LATB6

            unsigned char __attribute__((address(0x900))) lcd[3]={0,0,0};

            void spi_init(); //申明系統(tǒng)初始函數(shù)
            void spi_low(); //申明產(chǎn)生低波特率函數(shù)(SD卡初始化使用)
            void spi_high(); //申明產(chǎn)生高波特率函數(shù)(SD卡初始化后使用)
            unsigned char sd_reset(); //申明SD卡初始化函數(shù)
            unsigned char SD_SendCommand(unsigned char cmd,unsigned long arg); //申明寫SD卡命令函數(shù)
            unsigned char SPI_WriteByte(unsigned char val); //申明寫一字節(jié)函數(shù)
            unsigned char SPI_ReadByte(void); //申明接收一字節(jié)函數(shù)
            unsigned char SD_WriteSingleBlock(unsigned long sector); //申明寫SD卡單BLOCK數(shù)據(jù)函數(shù)
            unsigned char SD_ReadSingleBlock(unsigned long sector); //申明讀SD卡單BLOCK數(shù)據(jù)函數(shù)
            void lcd_display(); //申明結(jié)果顯示函數(shù)
            void delay(); //申明延時函數(shù)(顯示時用)


            //系統(tǒng)初始化函數(shù)
            void spi_init()
            {
            TRISG=0x00d0; //設(shè)置SDI為輸出,其他C口為輸出
            TRISB=0X0000; //設(shè)置B口為輸出
            TRISD=0X0000; //設(shè)置D口為輸出
            SPI2CON=0x0278; //空閑時總線為高電平,fosc/64
            SPI2STAT=0x8000; // 輸出數(shù)據(jù)的末尾采樣輸入數(shù)據(jù),上升沿發(fā)送數(shù)據(jù)
            }

            //*************************寫LCD****************************************
            //寫一個字節(jié)數(shù)據(jù)函數(shù)
            //在電平發(fā)生改變后需要插入一段延時時間,否則LCD反應不過來。
            void write(unsigned char x)
            {
            PORTD=x; //待顯示數(shù)據(jù)送PORTD口
            delay();
            rs=1; //該字節(jié)數(shù)據(jù)為數(shù)據(jù),而不是命令
            delay();
            rw=0; //此次操作為寫,而不是讀
            delay();
            e=0; //拉低使能信號
            delay(); //保持使能信號為低一段時間
            e=1; //拉高使能信號,建立LCD操作所需要的上升沿
            delay();
            }

            //********************LCD顯示設(shè)置函數(shù)**************************************
            //在電平發(fā)生改變后需要插入一段延時時間,否則LCD反應不過來。
            void lcd_enable()
            {
            delay();
            rs=0; //該字節(jié)數(shù)據(jù)為命令,而不是數(shù)據(jù)
            delay();
            rw=0; //此次操作為寫,而不是讀
            delay();
            e=0; //拉低使能信號
            delay(); //保持使能信號為低一段時間
            e=1; //拉高使能信號,建立LCD操作所需要的上升沿
            delay();
            }

            //*********************LCD初始化函數(shù)**************************************
            void lcd_init()
            {
            PORTD=0X1; //清除顯示
            lcd_enable();
            PORTD=0X38; //8位2行5*7點陣
            lcd_enable();
            PORTD=0X0e; //顯示開,光標開,閃爍
            lcd_enable();
            PORTD=0X06; //文字不動,光標右移
            lcd_enable();
            PORTD=0X86; //時間顯示地址
            lcd_enable();
            }

            //***********************LCD顯示函數(shù)************************************
            void lcd_display()
            {
            unsigned char i,j;
            lcd_init();
            for(i=0;i3;i++) //一共3字節(jié)數(shù)據(jù)
            {
            write(lcd[i]); //查表獲取數(shù)據(jù)并調(diào)用寫一個字節(jié)數(shù)據(jù)函數(shù)送LCD顯示
            for(j=0;j5;j++) //延時一段時間(主要是為了控制顯示的速度)
            {delay();}
            }
            }

            //****************寫一字節(jié)函數(shù)***************************
            unsigned char SPI_WriteByte(unsigned char val)
            {
            SPI2BUF = val; //待發(fā)送數(shù)據(jù)裝載到發(fā)送寄存器
            while(!IFS1bits.SPI2IF); //等待發(fā)送完成
            IFS1bits.SPI2IF=0; //清除發(fā)送完成標志位
            return SPI2BUF; //讀取接收寄存器(即使是無效數(shù)據(jù)也需清空)
            }

            //****************接收一字節(jié)函數(shù)**************************
            unsigned char SPI_ReadByte(void)
            {
            SPI2BUF = 0xff; //發(fā)送寄存器裝載數(shù)據(jù),以啟動數(shù)據(jù)接收
            while(!IFS1bits.SPI2IF); //等待接收完成
            IFS1bits.SPI2IF=0; //清除接收完成標志位
            return SPI2BUF; //讀取接收到的數(shù)據(jù)
            }

            //*****************發(fā)送命令函數(shù)****************************
            unsigned char SD_SendCommand(unsigned char cmd,unsigned long arg)
            {
            unsigned char r1;
            unsigned char retry1=0; //重復操作次數(shù)

            cs=0; //使能片選信號

            SPI_WriteByte(cmd | 0x40); //分別寫入命令
            SPI_WriteByte(arg>>24); //數(shù)據(jù)段第4字節(jié)
            SPI_WriteByte(arg>>16); //數(shù)據(jù)段第3字節(jié)
            SPI_WriteByte(arg>>8); //數(shù)據(jù)段第2字節(jié)
            SPI_WriteByte(arg); //數(shù)據(jù)段第1字節(jié)
            SPI_WriteByte(0x95); //CRC效驗和

            while((r1 = SPI_WriteByte(0xff)) == 0xff)//等待響應
            if(retry1++ > 200) break;//超時退出

            cs=1; //清初片選信號

            return r1; //返回狀態(tài)值
            }

            //*******************SD開初始化函數(shù)**************************


            上一頁 1 2 下一頁

            關(guān)鍵詞: 程序 讀寫 SD

            評論


            相關(guān)推薦

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

            關(guān)閉