- #include <reg52.h>
- #define uchar unsigned char
- #define uint unsigned int
- sbit START = P3^3;
- sbit CLK = P3^2;
- sbit OE= P3^1;
- sbit EOC = P3^0;
- uint light;
- uchar state=0;
- void timer0()interrupt 1;
- void delay(uint z)
- {
- uint x,y;
- for(x=z;x>0;x--)
- for(y=110;y>0;y--);
- }
- void timer0()interrupt 1
- {
- TH0=(65536-6)/256;
- TL0=(65536-6)%256;
- CLK=~CLK;
- }
- void transfer()
- {
- START=0;
- OE=0;
- delay(5);
- while(!EOC);
- OE=1;
- light=P0;
- OE=0;
- START=1;
- }
- void init()
- {
- TMOD=0x01;
- TH0=(65536-6)/256;
- TL0=(65536-6)%256;
- EA=1;
- ET0=1;
- TR0=1;
- P2=0x0f;
- }
- void move(uchar step)
- {
- uchar i;
- P2=0x0f;
- for(i=0;i<step;i++)
- {
- P2=~0x03;
- delay(200);
- P2=~0x06;
- delay(200);
- P2=~0x0c;
- delay(200);
- P2=~0x09;
- delay(200);
- }
- }
- void reserve(uchar step)
- {
- uchar i;
- P2=0x0f;
- for(i=0;i<step;i++)
- {
- P2=~0x09;
- delay(200);
- P2=~0x0c;
- delay(200);
- P2=~0x06;
- delay(200);
- P2=~0x03;
- delay(200);
- }
- }
- void movestep(uchar level)
- {
- switch(level)
- {
- case0:switch(state)
- {
- case0:break;
- case1:reserve(1);break;
- case2:reserve(2);break;
- case3:reserve(3);break;
- }state=0;break;
- case1:switch(state)
- {
- case0:move(1);break;
- case1:break;
- case2:reserve(1);break;
- case3:reserve(2);break;
- }state=1;break;
- case2:switch(state)
- {
- case0:move(2);break;
- case1:move(1);break;
- case2:break;
- case3:reserve(1);break;
- }state=2;break;
- case3:switch(state)
- {
- case0:move(3);break;
- case1:move(2);break;
- case2:move(1);break;
- case3:break;
- }state=3;break;
- }
- }
- void main()
- {
- init();
- while(1)
- {
- delay(1000);
- transfer();
- P0=~light;
- if(light>=0&&light<40)movestep(0);
- if(light>=40&&light<125)movestep(1);
- if(light>=125&&light<210)movestep(2);
- if(light>=210&&light<255)movestep(3);
- }
- }
- 能帮忙看下这个程序有什么问题吗 老是在keil uVision4中编译错误 老实说第19行少“;”。求各位大神帮下忙找出错误并告诉下怎么改
|