⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 main.c

📁 单片机c语言程序设计100例--基于PIC+PROTEUS
💻 C
字号:
//-----------------------------------------------------------------
//  名称: MMC存储卡测试
//-----------------------------------------------------------------
//  说明: 本例运行时,按下K1将向MMC卡第0块写入512个有序字节,按下K2时
//        将向第512块写入512个随机字节,按下K3与K4时将分别读取并通过
//        虚拟终端显示这些字节数据.
//
//-----------------------------------------------------------------
#define _XTAL_FREQ 4000000UL
#define INT8U  unsigned char
#define INT16U unsigned int
#define INT32U unsigned long
#include <htc.h>
#include <stdio.h>
#include <stdlib.h>
//定义按键操作
#define K1_DOWN() (RB0 == 0)
#define K2_DOWN() (RB2 == 0)
#define K3_DOWN() (RB4 == 0)
#define K4_DOWN() (RB6 == 0)
//MMC相关函数
extern INT8U MMC_Initialise();
extern INT8U MMC_Read_Block(INT32U address);
extern INT8U MMC_Write_Block(INT32U address,INT8U *buffer);
//MMC块字节读写缓冲
INT8U Block_bytes[512];
//MMC卡操作错误标识(为1表示正常,为0表示出错)
INT8U ERROR_Flag = 1;
#define SPI_CS LATCbits.LATC2  //SPI片选定义为LATC2
//-----------------------------------------------------------------
// 以十六进制形式显示所读取的字节
//-----------------------------------------------------------------
void Show_Byte_by_HEX(INT8U *Buffer, INT32U Len)
{


}

//-----------------------------------------------------------------
// 主程序
//-----------------------------------------------------------------
void main()
{
    INT32U i;
    TRISB = 0xFF; RBPU = 0;        //按键输入,内部弱上拉
    //USART初始化    
    //调用PIC-C18串口初始化库函数 
    OpenUSART( USART_TX_INT_OFF  &
               USART_RX_INT_OFF  &
               USART_ASYNCH_MODE &
               USART_EIGHT_BIT   &
               USART_BRGH_HIGH, 
               _XTAL_FREQ/16/9600 - 1 
             );                  
    //SPI初始化
    putsUSART((char*)"Initialise MMC, Please Waiting.....");
    TRISC2 = 0; //设置CS控制输出引脚
    SPI_CS = 1; //使能MMC
    //SPI主机模式,时钟 = FOSC/16,设置SPI总线模式0,0
    OpenSPI(SPI_FOSC_16, MODE_00, SMPEND); 
    __delay_ms(100);       
    //初始化MMC    
    ERROR_Flag = MMC_Initialise();
    if (ERROR_Flag) putsUSART((char*)"OK!\r\r"); else putsUSART((char*)"ERROR!\r\r");
    //提示进行K1-K4操作
    putsUSART((char*)"Plase Press K1,K2,K3 or K4 to Play MMC Test...\r\r");
    //设置随机种子
    srand(300);
    while(1)
    {        
        //未按键则等待----------------------------------------------
        
        
        //如果上次MMC出错则重新初始化SPI接口与MMC卡
        if (ERROR_Flag == 0) //------------------------------------
        {
           

        }
        //根据按键操作代号分别进行操作,因为上述可能的重新初始化会耗费较多时间,
        //如果在这里仍用K1~K4的DOWN判断时,按键可能已经释放,从而导致判断失效.
        //因此这里使用的是提前获取的按键操作代号
        if (K1_DOWN()) //------------------------------------------
        {
            

        }
        else if (K2_DOWN()) //------------------------------------
        {
            

        }
        else if (K3_DOWN()) //------------------------------------
        {
            

        }
        else if (K4_DOWN()) //------------------------------------
        {
           

        }
        //等待释放按键----------------------------------------------
        next: while (K1_DOWN() || K2_DOWN() || K3_DOWN() || K4_DOWN()); 
    }
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -