📄 new_zong.c
字号:
#include <reg51.h>
#include <stdio.h>
#define uchar unsigned char
#include <math.h>
unsigned int tick,step;
uchar key_all=0;
uchar in_number=0;
uchar data12[9]={0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f};
int speed=4;int jieju;
int speed1;
const uchar data_void[9]={0x00,0x00,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f};
unsigned char anticlock[8]={0xf4,0xf6,0xf2,0xf3,0x01,0xf9,0xf8,0xfc};
unsigned char clock[8]={0xf8,0xf9,0x01,0xf3,0xf2,0xf6,0xf4,0xfc};
uchar in_status;
unsigned int pos;
unsigned int temp;
uchar m;
sbit DIN=P3^5;
sbit LOAD=P3^6;
sbit CLP=P3^7;
sbit P1_0=P1^0; //主线机的方向控制
sbit P1_1=P1^1; //主线机的脉冲
sbit P1_6=P1^6; //排线机方向控制
sbit P1_7=P1^7; //排线机脉冲输入
bit yes;
//sbit my=P1^7;
void delay(void);
void send(uchar add,uchar );
void s_seg(uchar *p);
void keyscan(void); //键盘扫描函数
void clear_all(void);
void my_delay(void);
void zhengzhuan(int);
void fanzhuan(int) ;
void key_process(void);
void initt1(void) ;
void es_isr0 (void) ;
void main()
{
//uchar key_get=15;
int i;
in_status=0;
initt1();
tick=0;
pos=0;
step=1;
while(1)
{
keyscan();
key_process();
// if(yes){ zhengzhuan(speed1); yes=0;}
/* for (i=0;i<8;i++)
{
P0=clock[i];
my_delay();
}
*/
}
}
void initt1(void)
{
P1_0 =1;
P1_1 =1;
TMOD=0X11;
TH0=0Xdd;
TL0=0X00;
TR0=1;
ET0=1;
EA=0;
}
void key_process(void)
{
// in_number=0;
if((key_all==13 )||( key_all==14))
{
if(key_all==13) in_status=1;
else in_status= 2;
clear_all();
}
if((in_status!=0)&&(key_all>=1)&&(key_all<=10))
{
for(m=8;m>1;m--)
{
data12[m]=data12[m-1];
}
data12[1]=key_all-1;
in_number++;
s_seg(data12);
if( in_number >7 ) in_number=0;
}
if(key_all==11)
{
// EA=1;
temp=0;
for(m=1;m<=in_number;m++)
{
temp+=data12[m]*pow(10,(m-1));
tick=temp;
// temp=data12[1];
}
switch(temp)
{
case 20: tick=0; if(0==(pos/2)) {P1_0=1;step=pos/2;EA=0;} if(0<(pos/2)) {P1_0=0;step=pos/2;EA=1;} break;
case 26: tick=0; if(14>(pos/2)) {P1_0=1;step=14-pos/2;EA=1;}if(14<(pos/2)) {P1_0=0;step=pos/2-14;EA=1;} break;
case 34: tick=0; if(28>(pos/2)) {P1_0=1;step=28-pos/2;EA=1;}if(28<(pos/2)) {P1_0=0;step=pos/2-28;EA=1;} break;
case 40: tick=0; if(42>(pos/2)) {P1_0=1;step=42-pos/2;EA=1;}if(42<(pos/2)) {P1_0=0;step=pos/2-42;EA=1;} break;
case 47: tick=0; if(56>(pos/2)) {P1_0=1;step=56-pos/2;EA=1;}if(56<(pos/2)) {P1_0=0;step=pos/2-56;EA=1;} break;
case 52: tick=0; if(70>(pos/2)) {P1_0=1;step=70-pos/2;EA=1;}if(70<(pos/2)) {P1_0=0;step=pos/2-70;EA=1;} break;
case 60: tick=0; if(84>(pos/2)) {P1_0=1;step=84-pos/2;EA=1;}if(84<(pos/2)) {P1_0=0;step=pos/2-84;EA=1; }break;
case 65: tick=0; if(98>(pos/2)) {P1_0=1;step=98-pos/2;EA=1;}if(98<(pos/2)) {P1_0=0;step=pos/2-98;EA=1;} break;
case 70: tick=0; if(112>(pos/2)) {P1_0=1;step=112-pos/2;EA=1;}if(112<(pos/2)) {P1_0=0;step=pos/2-112;EA=1;} break;
case 77: tick=0; if(126>(pos/2)) {P1_0=1;step=126-pos/2;EA=1;}if(126<(pos/2)) {P1_0=0;step=pos/2-126;EA=1;} break;
case 83: tick=0; if(140>(pos/2)) {P1_0=1;step=140-pos/2;EA=1;}if(140<(pos/2)) {P1_0=0;step=pos/2-140;EA=1;} break;
case 89: tick=0; if(154>(pos/2)) {P1_0=1;step=154-pos/2;EA=1;}if(154<(pos/2)) {P1_0=0;step=pos/2-154;EA=1;} break;
case 95: tick=0; if(168>(pos/2)) {P1_0=1;step=168-pos/2;EA=1;}if(168<(pos/2)){P1_0=0;step=pos/2-168;EA=1;} break;
case 100: tick=0; if(182>(pos/2)) {P1_0=1;step=182-pos/2;EA=1;}if(182<(pos/2)) {P1_0=0;step=pos/2-182;EA=1;} break;
case 105: tick=0; if(196>(pos/2)) {P1_0=1;step=196-pos/2;EA=1;}if(196<(pos/2)) {P1_0=0;step=pos/2-196;EA=1;} break;
case 112: tick=0; if(210>(pos/2)) {P1_0=1;step=210-pos/2;EA=1;}if(210<(pos/2)) {P1_0=0;step=pos/2-210;EA=1;} break;
case 118: tick=0; if(224>(pos/2)) {P1_0=1;step=224-pos/2;EA=1;}if(224<(pos/2)) {P1_0=0;step=pos/2-224;EA=1;} break;
case 120: tick=0; if(238>(pos/2)) {P1_0=1;step=238-pos/2;EA=1;}if(238<(pos/2)) {P1_0=0;step=pos/2-238;EA=1;} break;
case 127: tick=0; if(252>(pos/2)) {P1_0=1;step=252-pos/2;EA=1;}if(252<(pos/2)) {P1_0=0;step=pos/2-252;EA=1;} break;
case 133: tick=0; if(266>(pos/2)) {P1_0=1;step=266-pos/2;EA=1;}if(266<(pos/2)) {P1_0=0;step=pos/2-266;EA=1;} break;
case 138: tick=0; if(280>(pos/2)) {P1_0=1;step=280-pos/2;EA=1;}if(280<(pos/2)) {P1_0=0;step=pos/2-280;EA=1;} break;
case 143: tick=0; if(294>(pos/2)) {P1_0=1;step=294-pos/2;EA=1;}if(294<(pos/2)) {P1_0=0;step=pos/2-294;EA=1;} break;
case 148: tick=0; if(308>(pos/2)) {P1_0=1;step=308-pos/2;EA=1;}if(308<(pos/2)) {P1_0=0;step=pos/2-308;EA=1;} break;
case 155: tick=0; if(322>(pos/2)) {P1_0=1;step=322-pos/2;EA=1;}if(322<(pos/2)) {P1_0=0;step=pos/2-322;EA=1;} break;
default: break;
}
}
if(key_all==12)
{
clear_all();
}
}
void clear_all(void)
{
uchar j;
in_number=0;
for( j=1;j<9;j++)
{
data12[j]=0x0f;
}
s_seg(data_void);
}
void delay(void) //延时函数
{
int i;
for (i=4800;i>0;i--);
}
void keyscan(void) //键盘扫描函数
{
uchar scan,tep;
key_all=0;
// EA=0;
P2=0xf0;
if((P2&0xf0)!=0xf0) //若有键盘按下
{
delay();
if((P2&0xf0)!=0xf0) //若有键盘按下
{
P2=0xfe; // 发全0扫描码
if((P2&0xf0)!=0xf0) //若有键盘按下
{
delay();
if((P2&0xf0)!=0xf0) //若有键盘按下
{
scan=P2&0xf0;
switch( scan)
{
case 0xe0: key_all= 1;break;
case 0xd0: key_all= 2;break;
case 0xb0: key_all= 3;break;
case 0x70: key_all= 4;break;
}
while((P2&0xf0)!=0xf0);
}
return ;
}
P2=0xfd; // 发全0扫描码
if((P2&0xf0)!=0xf0) //若有键盘按下
{
delay();
if((P2&0xf0)!=0xf0) //若有键盘按下
{
scan=P2&0xf0;
switch( scan)
{
case 0xe0: key_all= 5;break;
case 0xd0: key_all= 6;break;
case 0xb0: key_all= 7;break;
case 0x70: key_all= 8;break;
}
while(( P2&0xf0)!=0xf0);
}
return ;
}
P2=0xfb; // 发全0扫描码
if((P2&0xf0)!=0xf0) //若有键盘按下
{
delay();
if((P2&0xf0)!=0xf0) //若有键盘按下
{
scan=P2&0xf0;
switch( scan)
{
case 0xe0: key_all= 9;break;
case 0xd0: key_all= 10;break;
case 0xb0: key_all= 11;break;
case 0x70: key_all= 12;break;
}
while(( P2&0xf0)!=0xf0);
}
return;
}
P2=0xf7; // 发全0扫描码
if((P2&0xf0)!=0xf0) //若有键盘按下
{
delay();
if((P2&0xf0)!=0xf0) //若有键盘按下
{
scan=P2&0xf0;
switch( scan)
{
case 0xe0: key_all= 13;break;
case 0xd0: key_all= 14;break;
case 0xb0: key_all= 15;break;
case 0x70: key_all= 16;break;
}
while(( P2&0xf0)!=0xf0);
}
return;
}
}
}
}
void send(uchar add,uchar dat)
{
uchar ADS,i,j;
CLP=0;
LOAD=0;
DIN=0;
i=4;
while(i<16)
{
if(i<8)
{
ADS=add;
}
else
{
ADS=dat;
}
for(j=8;j>=1;j--)
{
if((ADS&0x80)==0)
{ DIN=0 ;}
else
{ DIN=1;}
ADS=ADS<<1;
CLP=1;
CLP=0;
}
i=i+8;
}
LOAD=1;
}
void s_seg(uchar *p)
{
send(0x0c,0x01);//正常状态
send(0x0b,0x07);//设置扫描范围DIG0-7
send(0x0a,0x05);//设置亮度11/32
send(0x09,0xff);//采用译码方式
send(0x01,p[8]);
send(0x02,p[7]);
send(0x03,p[6]);
send(0x04,p[5]);
send(0x05,p[4]);
send(0x06,p[3]);
send(0x07,p[2]);
send(0x08,p[1]);
}
/*void zhengzhuan(int step)
{
int i; unsigned char pos;
for (i=0;i<step;i++)
{
if(pos>7) pos=0;
P1=clock[pos];
pos++;
my_delay();
}
}
void fanzhuan(int step)
{
int i; unsigned char pos;
my_delay();
for (i=0;i<step;i++)
{
if(pos>7) pos=0;
P1=anticlock[pos];
pos++;
my_delay();
}
}
*/
void zhengzhuan(int step) //排线机number 为1, 主线机
{
int i; unsigned char pos;
for (pos=0;pos<step;pos++)
{
for (i=0;i<8;i++)
{
P1=clock[i];
my_delay();
}
}
}
void fanzhuan(int step)
{
int i; unsigned char pos;
for (pos=0;pos<step;pos++)
{
for (i=0;i<8;i++)
{
P1=anticlock[i];
my_delay();
}
}
}
void my_delay(void)
{
int i,j;
for (i=0;i<5000;i++);
{
for(j=0;j<1000;j++);
}
}
void es_isr0 (void) interrupt 1 //定时器0断服务函数
{
// EA=0;
TF0=0;
TR0=0;
tick++;
TL0=0x01;
TH0=0x88;
if((tick/2)<=step)
{
P1_1=!P1_1; if(P1_0) pos++;else { if(pos==0) pos=0;else pos--; }
if(pos<0) pos=0;
}
else EA=0;
// EA=1;
TR0=1;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -