📄 l7461.c
字号:
//***************RB0****************7461————————LT0038接收程序**************PIC16F877.4M晶振****************/
#include<pic.h>
#include<stdio.h>
#define uchar unsigned char
uchar key_inte;
/*********************************************************
7+(3*(Y-1)+7)*(X-1)
如果再加上函数调用的call指令、页面设定、传递参数花掉的7个指令。
则是:14+(3*(Y-1)+7)*(X-1)。
**********************************************************/
void delayus(char x,char y)
{
char z;
do{
z=y;
do{;}while(--z);
}while(--x);
}
void delayms(uchar x,uchar y) //延时ms级的程序,延时时间为:(3*y+4)*x+10=?
{
uchar z;
do{
z=y;
// do{;}while(--z);
while(--z); //此句与上一句等效!
}while(--x);
asm("nop");
}
uchar dm,i,j,k;
uchar key_data[4];//定义4个数组,用来存储代码
void ds_889us(void) //860us
{
delayus(18,14);
}
void ds_1ms(void)
{
delayus(19,16);
}
void ds4_73ms(void) //4.78ms
{
delayus(39,39);
}
void ds2s(void)
{
unsigned char i,j,k;
for(i=200;i>0;i--)
for(j=200;j>0;j--)
for(k=10;k>0;k--) ;
}
void main()
{
INTCON=0X00;
//PIE1=0X00;
//PIE2=0X00;
INTE=1;
INTF=0;
TRISD=0X00;
TRISB0=1;
GIE=1;
INTEDG=0;
PORTD=0X00;
dm=0;//中问读数的变量
while(1){ PORTD=key_inte; }
}
void interrupt RB0int()
{
uchar dm,i,j,k,flag_inte,key_b[2];
if(INTF==1)
{
INTF=0;
flag_inte=0;
INTE=0;
dm=0;
for(k=0;k<9;k++)
{
ds_889us();
if (RB0==1)flag_inte=1;
}
if(flag_inte==0)
{
while(RB0==0);
ds4_73ms();
for(i=0;i<26;i++)
{
while(RB0==0);
ds_889us();
if(RB0==1)
{
ds_1ms();
}
}
for(i=0;i<2;i++)
{
for(j=1;j<=8;j++)
{
while(RB0==0);
ds_889us();
if(RB0==1)
{
ds_1ms();
dm=dm|0x80;
if(j<8) {dm=dm>>1;dm=dm&0x7f;}
}
else if (j<8)
{dm=dm>>1;dm=dm&0x7f;}
}
key_b[i]=dm;
dm=0;
}
key_b[1]=key_b[1]^0xff;
if(key_b[0]==key_b[1])
{ key_inte=key_b[0];}
}
INTE=1;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -