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

📄 其它程序代码.txt

📁 PIC单片机C语言程序设计实例精粹
💻 TXT
字号:
 其它程序代码

	// 字节的比特顺序高低交换
	unsigned char ByteSwap(unsigned char chrIn)
	{
	    unsigned char chrTemp;
	    unsigned char chrOut;
	    int i;
	
	    chrOut = 0;
	    for(i = 0;i < 8;i++)
	    {
		    chrTemp = (chrIn & 0x80) >> 7;
		    chrIn <<= 1;
		    if(chrTemp == 1)
		    {
		        chrOut |= (chrTemp << i);
		    }	
	    }
	    return chrOut;
	} 
	//片选信号置低
	void SS_Enable(void)
	{
	    // 置低电平
	    PORTB &= 0x7f;
	    Delay_us(2);
	    return;
	}
	
	//片选信号置高
	void SS_Disable(void)
	{
	    // 置高电平
	   	PORTB |= 0x80;
	    Delay_us(2);
	    return;
	}

	// 发送上电指令
	void PowerUp(void)
	{
	    unsigned char code;
	    
	    //上电命令
	    code = 0x04;
	    // 发送命令码
	    SendOpCode(code);
	    
	    return;
	}
	// 发送掉电指令
	int PowerDown(void)
	{
	    unsigned char code;
	    
	    //掉电命令
	    code = 0x08;
	    // 发送命令码
	    SendOpCode(code);
	    
	    return;
	}
	// 发送停止命令
	void Stop(void)
	{
	    unsigned char code;
	    
	    //停止命令
	    code = 0x0C;
	    // 发送命令码
	    SendOpCode(code);
	    
	    return;
	}
	// 放音操作
	void Play(int nAddr)
	{
	    int i;
	    unsigned char code;
	    
	    // 发送加电指令
	    PowerUp();
	    // 延时25ms以上
	    Delay_ms(30);
	    
	    // 发送地址信息
	    SendAddr(nAddr);
	    
	    // 发送SETPLAY命令
	    code = 0x07;
	    SendOpCode(code);
	    
	    // 发送PLAY命令
	    code = 0x0F;
	    SendOpCode(code);
	    
	    // 处理结束
	    for(;;)
	    {
	        // 如果发生溢出的时候则结束录音
	        if(nOVF == 1)
	    	{
	    	    nOVF = 0;//清除中断标志变量
	    	    // 发送停止命令            
	            Stop();
	            // 延迟一点时间
	            for(i = 0;i < 100;i++) ;
	            
	            break;
	    	}
	    	// 如果第2次按下放音键,则结束录音
	        if((nPlay == 0) && (nPlay_count == 2))
	    	{
	    	    nPlay_count = 0;//清除按键次数记录变量
	    	    // 发送停止命令            
	            Stop();
	            // 延迟一点时间
	            for(i = 0;i < 100;i++) ;
	            
	            break;
	    	}
	    	
	    }
	    
	    // 发送掉电指令
	    PowerDown();
	    // 延迟一段时间
	    Delay_ms(30);
	    nPlay_count = 0;//清除按键次数记录变量
	    return;
	}
	// 录音操作
	void Record(int nAddr)
	{
	    int i;
	    unsigned char code;
	    
	    // 发送加电指令
	    PowerUp();
	    // 延时25ms以上
	    Delay_ms(30);
	    // 再次发送加电指令
	    PowerUp();
	    // 延时25ms以上
	    Delay_ms(30);
	    // 延时25ms以上
	    Delay_ms(30);
	    
	    // 发送地址信息
	    SendAddr(nAddr);
	    
	    // 发送SETREC命令
	    code = 0x05;
	    SendOpCode(code);
	    
	    // 发送REC命令
	    code = 0x0D;
	    SendOpCode(code);
	    
	    // 处理结束
	    for(;;)
	    {
	        // 如果发生溢出的时候则结束录音
	        if(nOVF == 1)
	    	{
	    	    nOVF = 0;//清除中断标志变量
	    	    // 发送停止命令            
	            Stop();
	            // 延迟一点时间
	            for(i = 0;i < 100;i++) ;
	            
	            break;
	    	}
	    	// 如果第2次按下录音键,则结束录音
	        if((nRec == 0) && (nRec_count == 2))
	    	{
	    	    nRec_count = 0;//清除按键次数记录变量
	    	    // 发送停止命令            
	            Stop();
	            // 延迟一点时间
	            for(i = 0;i < 100;i++) ;
	            
	            break;
	    	}
	    	
	    }
	    
	    // 发送掉电指令
	    PowerDown();
	    // 延迟一段时间
	    Delay_ms(30);
	    nRec_count = 0;//清除按键次数记录变量
	    return;
	}
	// 发送地址信息
	void SendAddr(int nAddr)
	{
	    int i;
	    unsigned char chrHi;
	    unsigned char chrLow;
	    // 片选使能
	    SS_Enable();
	    // 分别取出高、低字节
	    chrHi = (unsigned char)((nAddr & 0xff00) >> 8);
	    chrLow = (unsigned char)(nAddr & 0x00ff);
	    for(i = 100;i > 0;i--) ; //延迟一点时间
	    //字节的高低顺序变换
	    chrHi = ByteSwap(chrHi);
	    //字节的高低顺序变换
	    chrLow = ByteSwap(chrLow);
	    
	    UART0_TX_BUF[0] = chrLow;//低地址字节
	    UART0_TX_BUF[1] = chrHi;//高地址字节
	    nTX0_Len = 2;
	    IFG1 |= UTXIFG0; // 设置中断标志,进入发送中断程序
	    
	    for(i = 100;i > 0;i--) ; //延迟一点时间
	    while(1)// 等待缓冲区里的数据发送完毕
	    {
	        if(nTX0_Flag == 1) break;
	    }
	    // 片选禁止
	    SS_Disable();
	    return;
	}
	// 发送命令码
	void SendOpCode(unsigned char code)
	{
	    // 片选使能
	    SS_Enable();
	    for(i = 100;i > 0;i--) ; //延迟一点时间
	    UART0_TX_BUF[0] = code;//发送命令
	    nTX0_Len = 1;
	    IFG1 |= UTXIFG0; // 设置中断标志,进入发送中断程序
	    
	    for(i = 100;i > 0;i--) ; //延迟一点时间
	    while(1)// 等待缓冲区里的数据发送完毕
	    {
	        if(nTX0_Flag == 1) break;
	    }
	    // 片选禁止
	    SS_Disable();
	}
	void Delay_ms(unsigned long nValue)//毫秒为单位,8MHz为主时钟
	{
	    unsigned long nCount;
	    int i;
	    unsigned long j;
	    nCount = 2667;
	    for(i = nValue;i > 0;i--)
	    {
	    	for(j = nCount;j > 0;j--);
	    }
	    return;
	}
	void Delay_us(unsigned long nValue)//微秒为单位,8MHz为主时钟
	{
	    int nCount;
	    int i;
	    int j;
	    nCount = 3;
	    for(i = nValue;i > 0;i--)
	    {
	    	for(j = nCount;j > 0;j--);
	    }
	    return;
	}
	

⌨️ 快捷键说明

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