?? led1.c
字號:
#include<NI51REG.H>
#define FLASH_HZ 500
#define DELAY_BASE 100
#define LIGHTS 125
#define MS 4
#define TPS 411
//#define THISADDR 0x25
#define UARTBD 0xfa
#define ISP_WAIT 0x03
#define ISP_READ 1
#define ISP_WRITE 2
#define ISP_ERASE 3
sbit clk = P1^5;
sbit dat = P1^4;
sbit gate1 = P1^2;
sbit gate2 = P1^3;
unsigned int cnt;
unsigned char rg;
unsigned int Now_P = 0;
unsigned int Aim_P = 0;
unsigned int Dis_P = 0;
unsigned long Time_D = 0;
unsigned long Time = 1;
int timecnt = 0;
unsigned int T = 1;
unsigned int T_tmp= 0;
unsigned long Delay_num;
unsigned long num;
int De = 0;
unsigned int F=0;
unsigned int N=0;
bit TrStar_sign = 0;//transport start
bit NewCmd_sign = 0;
bit run_sign = 1;
unsigned char TrCounter = 0;
unsigned char TrData[5] = 0;
unsigned char AimData[5] = 0;
unsigned char mode = 0;
unsigned char THISADDR = 0x2A;
Move(int x);
void delay_1ms() interrupt 1
{
if(num > 0)
{
num--;
TH0 = 0xFc;
TL0 = 0x6e;
}
}
void delay(unsigned long x)
{
TR0 = 1;
num = x;
while(num>0)
{}
TR0 = 0;
}
void serial() interrupt 4
{
//unsigned char i;
EA = 0;
if(RI)
{
RI = 0;
//run_sign = ~run_sign;
/*test*/
/*if(SBUF == 0x0c)
{
run_sign = 0;
}
else if(SBUF == 0xbb)
{
run_sign = 1;
}
/*test end*/
if((!TrStar_sign)&&(SBUF == 0x0c))
{
TrStar_sign = 1;
TrCounter = 0;
//run_sign = ~run_sign;
}
else if(TrStar_sign)
{
if(TrCounter < 5)
{
TrData[TrCounter] = SBUF;
TrCounter++;
}
else if(SBUF == 0xbb)
{
if(TrData[0] == THISADDR)
{
AimData[0] = TrData[0];
AimData[1] = TrData[1];
AimData[2] = TrData[2];
AimData[3] = TrData[3];
AimData[4] = TrData[4];
NewCmd_sign = 1;
TrCounter++;
}
TrCounter = 0;
TrStar_sign = 0;
}
}
}
EA = 1;
}
/*void serial() interrupt 4
{
unsigned char i;
EA = 0;
if(RI)
{
RI = 0;
run_sign = ~run_sign;
}
EA = 1;
}*/
unsigned char isp_read(unsigned int addr)
{
unsigned char nop;
ISP_ADDRH = (addr >> 8);
ISP_ADDRL = (addr & 0x00ff);
EA = 0;
ISP_CONTR = ISP_WAIT;
ISP_CONTR |= 0x80;
ISP_CMD = ISP_READ;
ISP_TRIG = 0x46;
ISP_TRIG = 0xb9;
nop = 1;
ISP_CONTR = 0x00;
ISP_CMD = 0x0;
ISP_TRIG = 0x0;
ISP_ADDRH = 0x0;
ISP_ADDRL = 0x0;
EA = 1;
return ISP_DATA;
}
void isp_erase(unsigned int addr)
{
unsigned char nop;
ISP_ADDRH = (addr >> 8);
ISP_ADDRL = (addr & 0x00ff);
EA = 0;
ISP_CONTR = ISP_WAIT;
ISP_CONTR |= 0x80;
ISP_CMD = ISP_ERASE;
ISP_TRIG = 0x46;
ISP_TRIG = 0xb9;
nop = 1;
ISP_CONTR = 0x00;
ISP_CMD = 0x0;
ISP_TRIG = 0x0;
ISP_ADDRH = 0x0;
ISP_ADDRL = 0x0;
EA = 1;
}
void isp_write(unsigned int addr,unsigned char dat)
{
unsigned char nop;
ISP_DATA = dat;
ISP_ADDRH = (addr >> 8);
ISP_ADDRL = (addr & 0x00ff);
EA = 0;
ISP_CONTR = ISP_WAIT;
ISP_CONTR |= 0x80;
ISP_CMD = ISP_WRITE;
ISP_TRIG = 0x46;
ISP_TRIG = 0xb9;
nop = 1;//無意義 延時操作
ISP_CONTR = 0x00;
ISP_CMD = 0x0;
ISP_TRIG = 0x0;
ISP_ADDRH = 0x0;
ISP_ADDRL = 0x0;
EA = 1;
}
/*void delay(unsigned int kk)
{
unsigned int t1,t2;
for (t1 = 0;t1<60;t1++)
{
for(t2 = 0;t2 < kk;t2++);
}
}*/
Move(int x)
{
unsigned int i,NUM1,NUM2;
x = (x > LIGHTS)?LIGHTS:x;
x = (x < 1)?0:x;
gate1 = 0;
gate2 = 1;
NUM1 = (LIGHTS-x) + (LIGHTS-x)/7;
NUM2 = (x+x/7);
if(!NewCmd_sign)
{
for(i = 0;i < NUM1;i++)
{
clk = 0;
dat = 1;
clk = 1;
}
for(i = 0;i < NUM2;i++)
{
clk = 0;
dat = 0;
clk = 1;
}
gate1 = 1;
gate2 = 0;
}
else
return(0);
}
test_mode()
{ Delay_num = AimData[2];
while(1)
{
if(!NewCmd_sign)
{
Aim_P = (Aim_P == 124)?0:Aim_P+1;
Move(Aim_P);
delay(Delay_num);
}
else
{
Now_P = Aim_P;
return(0);
}
}
}
shake_mode()
{
N = AimData[3];
F=AimData[2];
while(1)
{
if(!NewCmd_sign)
{ De = ~De;
Aim_P = (De)?(Aim_P+F):(Aim_P-F);
Now_P = (De)?(Aim_P-F):(Aim_P+F);
Aim_P = (Aim_P<0)?(0):(Aim_P);
Now_P = (Now_P<0)?(0):(Now_P);
if (De)
{
for ( T_tmp = Now_P; T_tmp < Aim_P ; T_tmp++ )
{
delay(N);
Move( T_tmp);
}
}
else
{
for ( T_tmp= Now_P; T_tmp > Aim_P ; T_tmp-- )
{
delay(Delay_num);
Move( T_tmp);
}
}
}
else
{
Now_P = Aim_P;
return(0);
} }
}
void goto_mode()
{
Move(AimData[2]);
Now_P = AimData[2];
}
void gotime_mode()
{
Aim_P = AimData[2];
Time_D = AimData[3];
if (Aim_P > Now_P)
{
Dis_P = Aim_P - Now_P;
De = 1;
}
else
{
Dis_P = Now_P - Aim_P;
De = 0;
}
Time = (Time_D*1000)/Dis_P;
Delay_num = Time*T;
if (De)
{
for ( T_tmp = Now_P; T_tmp < Aim_P ; T_tmp++ )
{
delay(Delay_num);
Move( T_tmp);
}
}
else
{
for ( T_tmp= Now_P; T_tmp > Aim_P ; T_tmp-- )
{
delay(Delay_num);
Move( T_tmp);
}
}
Now_P = Aim_P;
}
main()
{
AUXR &= 0x1f;
IE = 0x92;
SCON = 0x50;
TMOD = 0x21;
PCON &= 0x7f;
TH1 = UARTBD;
TL1 = UARTBD;
TH0 = 0xFc;
TL0 = 0x6e;
//rg = 0;
TR1 = 1;
//TI = 1;
TR0 = 0;
dat = 1;
gate1 = 1;
gate2 = 0;
Move(0);
//AimData[1] = 0x01;
//AimData[2] = 0x30;
//AimData[3] = 0x46;
//AimData[2] = 0x30;
//AimData[4] = 0x30;
//THISADDR = 0x2A;
THISADDR = isp_read(0x1200);
if((THISADDR == 0xff)||(THISADDR == 0x0))
{
THISADDR = 0x2A;
}
while (1)
{
if (NewCmd_sign)
{
NewCmd_sign = 0;
mode = AimData[1];
if (mode == 0x01)
{
test_mode();
}
else if (mode == 0x02)
{
shake_mode();
}
else if (mode == 0x03)
{
goto_mode();
}
else if (mode == 0x04)
{
gotime_mode();
}
else if (mode == 0x05)
{
isp_erase(0x1200);
isp_write(0x1200,AimData[2]);
THISADDR = AimData[2];
}
else
{}
}
else{}
}
return(0);
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -