#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;
}
}
}
}
没有合适的资源?快使用搜索试试~ 我知道了~
单片机程序 编码开关试验.rar
共29个文件
lst:3个
bak:3个
obj:3个
1.该资源内容由用户上传,如若侵权请联系客服进行举报
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
版权申诉
0 下载量 156 浏览量
2023-05-07
13:28:58
上传
评论
收藏 68KB RAR 举报
温馨提示
免责声明:资料部分来源于合法的互联网渠道收集和整理,部分自己学习积累成果,供大家学习参考与交流。收取的费用仅用于收集和整理资料耗费时间的酬劳。 本人尊重原创作者或出版方,资料版权归原作者或出版方所有,本人不对所涉及的版权问题或内容负法律责任。如有侵权,请举报或通知本人删除。
资源推荐
资源详情
资源评论
收起资源包目录
单片机程序 编码开关试验.rar (29个子文件)
0031、编码开关试验
Last Loaded 编码开关试验.DBK 135KB
主机.hex 2KB
接收.c 5KB
接收试验.plg 542B
STARTUP.LST 11KB
接收试验.M51 10KB
接收.LST 9KB
main.OBJ 12KB
接收试验 8KB
接收试验.Uv2 2KB
主机.plg 553B
STARTUP.A51 6KB
主机 12KB
主机.Uv2 2KB
接收试验_Opt.Bak 1KB
编码开关试验.PWI 1KB
main.LST 11KB
主机.M51 15KB
接收试验_Uv2.Bak 2KB
接收试验.hex 2KB
接收.OBJ 10KB
STARTUP.OBJ 750B
主机.lnp 56B
主机.Opt 1022B
编码开关试验.DSN 135KB
接收试验.Opt 1KB
main.c 3KB
主机_Uv2.Bak 0B
接收试验.lnp 44B
共 29 条
- 1
资源评论
荣华富贵8
- 粉丝: 150
- 资源: 7649
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功