应用介绍
编码开关试验
#include <AT89X52.h>
#define JINGZHEN 24
#define TIME0TH ((65536-50*JINGZHEN/12)&0xff00)>>8 // 50us
#define TIME0TL ((65536-50*JINGZHEN/12)&0xff)
#define TIME1TH ((65536-3000*JINGZHEN/12)&0xff00)>>8
#define TIME1TL ((65536-3000*JINGZHEN/12)&0xff)
sbit CodingsWitch_A1=P1^0;
sbit CodingsWitch_B1=P1^1;
sbit CodingsWitch_A2=P1^2;
sbit CodingsWitch_B2=P1^3;
sbit CodingsWitch_A3=P1^4;
sbit CodingsWitch_B3=P1^5;
sbit CodingsWitch_A4=P1^6;
sbit CodingsWitch_B4=P1^7;
void CodingsWitchPolling1();
void CodingsWitchPolling2();
void CodingsWitchPolling3();
void CodingsWitchPolling4();
code char num[10]={0x03,0x9f,0x25,0x0d,0x99,0x49,0x41,0x1f,0x01,0x09,};
unsigned char dat[4];
void timer1int (void) interrupt 1 using 0{ //定时器0
EA=0;
TH0 = TIME0TH;
TL0 = TIME0TL;
CodingsWitchPolling1();
CodingsWitchPolling2();
CodingsWitchPolling3();
CodingsWitchPolling4();
EA=1;
}
main()
{
unsigned char i,c,b;
unsigned int a;
P1=0xff;
P3=0;
TH0 = TIME0TH;
TL0 = TIME0TL;
TMOD |= 0x11;
ET0=1;
ET1=1;
TR1=0;
TR0=1;
EA=1;
dat[0]=dat[1]=dat[2]=dat[3]=23;
while(1)
{
b=0x80;
for(i=0;i<8;i++)
{
P2=b;
if((i%2)==0)c=dat[i/2]%10;else c=dat[i/2]/10;
P0=~num[c];
for(a=0;a<10;a++) ;
b>>=1;P0=0;
//if(i==7) for(a=0;a<10000;a++) ;
}
}
}
void CodingsWitchPolling1()//
{
static char st; //定义了一个变量用来储蓄以前是否出现了两个引脚都为高电平的状态
if(CodingsWitch_A1&&CodingsWitch_B1)
{st = 1;} //
if(CodingsWitch_A1==0&&CodingsWitch_B1==0)
{st = 2;} //
if(st) //如果st为1执行下面的步骤
{
if(CodingsWitch_A1!=CodingsWitch_B1) //如果当前编码开关的两个引脚都为底电平执行下面的步骤
{
if(CodingsWitch_A1) //为高说明编码开关在向加大的方向转
{
if(dat[0]>0&&st==1)dat[0]--; //
if(dat[0]<64&&st==2)dat[0]++; //
st = 0;
return;
}
if(CodingsWitch_B1) //为高说明编码开关在向减小的方向转
{
if(dat[0]<64&&st==1)dat[0]++;
if(dat[0]>0&&st==2)dat[0]--;
st = 0;
return;
}
}
}
}
void CodingsWitchPolling2()//
{
static char st; //定义了一个变量用来储蓄以前是否出现了两个引脚都为高电平的状态
if(CodingsWitch_A2&&CodingsWitch_B2)
{st = 1;} //
if(CodingsWitch_A2==0&&CodingsWitch_B2==0)
{st = 2;} //
if(st) //如果st为1执行下面的步骤
{
if(CodingsWitch_A2!=CodingsWitch_B2) //如果当前编码开关的两个引脚都为底电平执行下面的步骤
{
if(CodingsWitch_A2) //为高说明编码开关在向加大的方向转
{
if(dat[1]>0&&st==1)dat[1]--; //
if(dat[1]<64&&st==2)dat[1]++; //
st = 0;
return;
}
if(CodingsWitch_B2) //为高说明编码开关在向减小的方向转
{
if(dat[1]<64&&st==1)dat[1]++;
if(dat[1]>0&&st==2)dat[1]--;
st = 0;
return;
}
}
}
}
void CodingsWitchPolling3()//
{
static char st; //定义了一个变量用来储蓄以前是否出现了两个引脚都为高电平的状态
if(CodingsWitch_A3&&CodingsWitch_B3)
{st = 1;} //
if(CodingsWitch_A3==0&&CodingsWitch_B3==0)
{st = 2;} //
if(st) //如果st为1执行下面的步骤
{
if(CodingsWitch_A3!=CodingsWitch_B3) //如果当前编码开关的两个引脚都为底电平执行下面的步骤
{
if(CodingsWitch_A3) //为高说明编码开关在向加大的方向转
{
if(dat[2]>0&&st==1)dat[2]--; //
if(dat[2]<64&&st==2)dat[2]++; //
st = 0;
return;
}
if(CodingsWitch_B3) //为高说明编码开关在向减小的方向转
{
if(dat[2]<64&&st==1)dat[2]++;
if(dat[2]>0&&st==2)dat[2]--;
st = 0;
return;
}
}
}
}
void CodingsWitchPolling4()//
{
static char st; //定义了一个变量用来储蓄以前是否出现了两个引脚都为高电平的状态
if(CodingsWitch_A4&&CodingsWitch_B4)
{st = 1;} //
if(CodingsWitch_A4==0&&CodingsWitch_B4==0)
{st = 2;} //
if(st) //如果st为1执行下面的步骤
{
if(CodingsWitch_A4!=CodingsWitch_B4) //如果当前编码开关的两个引脚都为底电平执行下面的步骤
{
if(CodingsWitch_A4) //为高说明编码开关在向加大的方向转
{
if(dat[3]>0&&st==1)dat[3]--; //
if(dat[3]<64&&st==2)dat[3]++; //
st = 0;
return;
}
if(CodingsWitch_B4) //为高说明编码开关在向减小的方向转
{
if(dat[3]<64&&st==1)dat[3]++;
if(dat[3]>0&&st==2)dat[3]--;
st = 0;
return;
}
}
}
}
©版权声明:本文内容由互联网用户自发贡献,版权归原创作者所有,本站不拥有所有权,也不承担相关法律责任。如果您发现本站中有涉嫌抄袭的内容,欢迎发送邮件至: www_apollocode_net@163.com 进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。
转载请注明出处: apollocode » 编码开关试验
文件列表(部分)
名称 | 大小 | 修改日期 |
---|---|---|
Last Loaded 编码开关试验.DBK | 17.11 KB | 2019-06-24 |
main.c | 0.51 KB | 2019-06-24 |
main.LST | 1.57 KB | 2019-06-24 |
main.OBJ | 3.05 KB | 2019-06-24 |
STARTUP.A51 | 1.73 KB | 2019-06-24 |
STARTUP.LST | 1.71 KB | 2019-06-24 |
STARTUP.OBJ | 0.43 KB | 2019-06-24 |
主机 | 2.75 KB | 2019-06-24 |
主机.hex | 0.50 KB | 2019-06-24 |
主机.lnp | 0.05 KB | 2019-06-24 |
主机.M51 | 1.97 KB | 2019-06-24 |
主机.Opt | 0.51 KB | 2019-06-24 |
主机.plg | 0.32 KB | 2019-06-24 |
主机.Uv2 | 0.88 KB | 2019-06-24 |
主机_Uv2.Bak | 0.00 KB | 2019-06-24 |
接收.c | 1.01 KB | 2019-06-24 |
接收.LST | 1.82 KB | 2019-06-24 |
接收.OBJ | 2.86 KB | 2019-06-24 |
接收试验 | 2.72 KB | 2019-06-24 |
接收试验.hex | 0.62 KB | 2019-06-24 |
接收试验.lnp | 0.04 KB | 2019-06-24 |
接收试验.M51 | 1.56 KB | 2019-06-24 |
接收试验.Opt | 0.61 KB | 2019-06-24 |
接收试验.plg | 0.29 KB | 2019-06-24 |
接收试验.Uv2 | 0.89 KB | 2019-06-24 |
接收试验_Opt.Bak | 0.61 KB | 2019-06-24 |
接收试验_Uv2.Bak | 0.88 KB | 2019-06-24 |
编码开关试验.DSN | 17.11 KB | 2019-06-24 |
编码开关试验.PWI | 0.39 KB | 2019-06-24 |
0031、编码开关试验 | 0.00 KB | 2019-06-24 |
发表评论 取消回复