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

📄 2262编码.txt

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

	#include "pic.h"
	
	//===========================================
	void GetPortb(void);
	void TransmitData(void);
	void TransmitEnd(void);
	void SendLOW(void);
	void SendHIGH(void);
	void Delay5ms(void);
	void Delay200us(void)	;
	void Delay600us(void)	;
	
	
	unsigned char D1	;
	unsigned char D2	;
	
	#define  _asm{"nop"}         NOP()                   
	
	//===========================================
	__CONFIG(XT&WDTDIS)	 ;     //采用外部振荡器,看门狗关闭
	main()
	{
		
		TRISA = 0b00000010;
		TRISB = 0b11111111;      //B口全部设置为输入
		RBPU = 0;              //使能B口上拉电阻
		
		PORTA |= 0b00000100;
	
	
		while(1)     
		{
			while(RA1 == 1);      //检测SW1是否按下
			Delay5ms();/          /去抖动
	    	while(RA1 == 1);      //再次检测
			
			GetPortb();         //检测B口状态
			TransmitData();     //发送数据
			TransmitEnd()	;     //发送帧尾
		}
	}
	//=============================================
		void GetPortb(void)
		{		
			D1 = 0b10101010 ;        //初始设置为浮动电平
			D2 = 0b10101010;//
			
			if(RB0 == 0)
			{
				RA0 = 1;//
				if(RB0 == 1)	
				D1 |= 0b00000001;    //高电平编码
				else 
				D1 &= 0b11111100	;   //低电平编码				
				RA0 = 0;
			}
	        
			if(RB1 == 0)
			{
				RA0 = 1;//
				if(RB1 == 1)	
				D1 |= 0b00000100	;     //高电平编码
				else 
				D1 &= 0b11110011	;    //低电平编码				
				RA0 = 0	;
			}
			if(RB2 == 0)
			{	RA0 = 1	;//
				if(RB2 == 1)	
				D1 |= 0b00010000	;    //高电平编码
				else 
				D1 &= 0b11001111	;     //低电平编码				
				RA0 = 0	;
	}
			if(RB3 == 0)
			{
				RA0 = 1	;
				if(RB3 == 1)	
				D1 |= 0b01000000	;       //高电平编码
				else 
				D1 &= 0b00111111	;      //低电平编码				
				RA0 = 0	;
			}
			if(RB4 == 0)
			{
				RA0 = 1	;
				if(RB4 == 1)	
				D2 |= 0b00000001	;        //高电平编码
				else 
				D2 &= 0b11111100	;       //低电平编码				
				RA0 = 0	;
			}
		   	if(RB5 == 0)
			{
				RA0 = 1	;
				if(RB5 == 1)	
				D2 |= 0b00000100	;     //高电平编码
				else 
				D2 &= 0b11110011	;      //低电平编码				
				RA0 = 0	;
			}
			if(RB6 == 0)
			{
				RA0 = 1	;
				if(RB6 == 1)	
				D2 |= 0b00010100	;    //高电平编码
				else 
				D2 &= 0b11001111	;    //低电平编码				
				RA0 = 0	;
			}
			if(RB7 == 0)
			{
				RA0 = 1	;
				if(RB5 == 1)	
				D2 |= 0b01000000	;    //高电平编码
				else 
				D2 &= 0b00111111	;    //低电平编码				
				RA0 = 0	;
			}
		}
	//==============================================
	void TransmitData(void)			//发送数据
		{
			unsigned char i,j;
			RA2 = 0	;
			Delay5ms();             //编码头
			j = 2	;
			while(j--)
			{
				for(i = 8 ; i == 0 ; i--) 
				{
					if((D1 &= 0b00000001) == 0)
					SendLOW();
					if((D1 &= 0b00000001) == 1)
					SendHIGH();
					D1 >>= 1	;	
				}
				for(i =8 ; i == 0 ; i--)
				{
					if((D2 &= 0b00000001) == 0)
					SendLOW();
					if((D2 &= 0b00000001) == 1)
					SendHIGH();
					D2 >>= 1	;	
				}  
			}
	
	
		}	
	//================================================
	void  TransmitEnd(void)   			
	{
		unsigned char i,j;
		for(i = 4 ; i == 0 ; i--)
		{
			for(j =4 ; j == 0 ; j--)
			{
				SendLOW();
				SendHIGH();
			}
			SendLOW();     //发送结束码
		}
	}	
	//=================================================
	void SendLOW(void)
	{
		RA2 = 1	;
		Delay200us()	;       //200us 高电平
		RA2 = 0	;
		Delay600us()	;        //600us 低电平
	}	
	void SendHIGH(void)
	{
		RA2 = 1	;           //600us 高电平
		Delay600us()	;
		RA2 = 0	;
		Delay200us()	;      //200us 低电平
	}
	//================================================
	void Delay5ms(void)				//延时5ms
	{
		unsigned char i;
		for(i = 24 ; i >0 ; i-- ) 
		{
			Delay200us()	;
		}
	}
	void Delay200us(void)				//延时200us
	{
		unsigned char i;
		for(i = 50 ; i > 0 ; i--)
		NOP();
	}
	void Delay600us(void)				//延时600us
	{
		unsigned char i;
		for(i = 100 ; i > 0; i--)
		{
			NOP();
			NOP();
			NOP();
		}
	}
      

⌨️ 快捷键说明

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