📄 2262编码.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 + -