📄 new.c
字号:
#include<reg52.h>
#include<absacc.h>
void init8279();
void inittimer1();
#define COM XBYTE[0x1b31] //8279命令口
#define DAT XBYTE[0x1b30]
sbit p10=P1^2;
sbit p11=P1^3; //8279数据口
#define uchar unsigned char
uchar code duan[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07 //七段码0--7
,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71}; //七段码8--f
uchar code asc[]={0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37 //ASCII表
,0x38,0x39,0x40,0x41,0x42,0x43,0x44,0x45};
uchar data reg1;
uchar data count;
uchar data zk;
unsigned long data zkh;
unsigned long data zkl;
//uchar data zk=0;
uchar data dh=0;
uchar data dl=0;
bit flag;
unsigned int data turn=0;
unsigned int data flow=0;
#define tpwm 9000
void send(uchar x);
void fzk(uchar a);
void initdj();
void xianshi(uchar a,uchar addr);
void zs(uchar h,uchar l);
void auto1();
main()
{
init8279(); //初始化8279
inittimer1(); //初始化计时器1和设置串口方式
initdj();
while(1)
{
}
}
void init8279() //初始化8279
{
COM=0xd1;
do{reg1=COM;}
while(reg1&0x80);
COM=0;
COM=0x32;
EA=1;
EX0=1;
ES=1;
}
void keyin() interrupt 0 //读键盘并显示行列
{
COM=0x40;
reg1=DAT;
reg1=reg1&0x3f;
if(reg1>=0x8&®1<=0xd||reg1>=2&®1<=6)
fzk(reg1);
}
void inittimer1()
{
TMOD=0x01;//定时器0工作于方式1 add
T2CON=0x9;//定时器2工作于捕捉方式
TH2=0x0;
TL2=0x0;
TR2=1;
ET2=1;
PT2=1;
}
void fzk(uchar a)//改变占空比
{
switch(a)
{
case 0x8:zk=50;COM=0x80;DAT=duan[a-8];break;
case 0x9:zk=20;COM=0x80;DAT=duan[a-8];break;
case 0xa:zk=40;COM=0x80;DAT=duan[a-8];break;
case 0xb:zk=60;COM=0x80;DAT=duan[a-8];break;
case 0xc:zk=80;COM=0x80;DAT=duan[a-8];break;
case 0xd:zk=90;COM=0x80;DAT=duan[a-8];break;
case 0x02:p11=0;COM=0x81;DAT=0x77;break;//方向
case 0x03:p11=1;COM=0x81;DAT=0x7c;break;
case 0x04:COM=0x81;DAT=0x0;COM=0x80;DAT=0x0;p10=0;ET0=0;break;
case 0x05:zk=50;p11=0;COM=0x80;DAT=duan[0];COM=0x81;DAT=0x77;ET0=1;break;
case 0x06: auto1();break;
}
zkh=tpwm*zk/100;
zkl=tpwm*(100-zk)/100;
}
void timer0() interrupt 1 //T0计时
{
if(p10==1)
{
TH0=(65536-zkl)/256;
TL0=(65536-zkl)%256;
p10=0;
}
else if(p10==0)
{
TH0=(65536-zkh)/256;
TL0=(65536-zkh)%256;
p10=1;
}
}
void initdj()//初始化电机
{
p10=0;//脉宽
p11=0;//方向正
zkh=tpwm*50/100;
zkl=tpwm*50/100;
TH0=65535/256;
TL0=65535%256;
TR0=1;
}
void xianshi(uchar a,uchar addr)
{
COM=addr;
DAT=duan[a];
}
void zs(uchar h,uchar l)
{
unsigned long data zs;
zs=5*55296000/(65536*flow+256*h+l);
xianshi(zs/1000,0x85);
zs=zs%1000;
xianshi(zs/100,0x84);
zs=zs%100;
xianshi(zs/10,0x83);
xianshi(zs%10,0x82);
}
void time2() interrupt 5
{
if(EXF2==1)
{
turn++;
if(turn==1)
{
flow=0;
TH2=0;
TL2=0;
}
else if(turn==41)
{
TR2=0;
dl=RCAP2L;
dh=RCAP2H;
zs(dh,dl);
TR2=1;
turn=0;
}
EXF2=0;
}
else
{flow++;
TF2=0;
}
}
void auto1()
{
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -