- //.........................................
- //内控自走程序
- //CPU:STC12C2052
- //主频:18.432MHZ(外部晶振144),内部晶振5MHZ
- //日期:2008/11/30
- //.........................................
- #include <reg52.H>
- #include <intrins.h>
- #include <absacc.h>
- #include <string.h>
- #include<stdlib.h> //产生随机数SAND();
-
- #define uchar unsigned char
- #define uint unsigned int
- #define T0_DAH 160;
- #define T0_DAL 160;
- #define Speed_Data 0x2;
-
- void delay(uint);
- void Out_Put (void);
- void Read_Pro1(void);
- void Read_Pro2(void);
- void Pwm_Out (void);
- void Read_Pro_R(uchar QW_Data1);
- ///////////////////////////////
- //////////IO口定义/////////////
- ///////////////////////////////
- sbit ExPort1=P1^0;
- sbit ExPort8=P1^1;//2
- sbit ExPort7=P1^2;//8
- sbit ExPort6=P1^3;//7
- sbit ExPort5=P1^4;//6
- sbit ExPort4=P1^5;//5
- sbit ExPort3=P1^6;//4
- sbit ExPort2=P1^7;//3
- sbit Export9=P3^0;//
- sbit Export10=P3^1;//
-
- //定义RAM
-
- sfr P1M0=0x91;
- sfr P1M1=0x92;
- sfr P3M0=0xB1;
- sfr P3M1=0xB2;
- sfr WDT_CONTR=0xe1;
- sfr ISP_TRIG=0xe6;
- sfr SPSTAT=0x84;
- sfr PCA_PWM0=0xf2;
- sfr unm1=0xf3;
- sfr unm2=0xf4;
- sfr unm3=0xf5;
- sfr unm4=0xf6;
- sfr unm5=0xf7;
- sfr unm6=0xf8;
- bit Time0_Flag;
-
-
- uchar Speed,Time0_Dec,Latch,Add_speed;
- uchar delay_X,Run_S,Run_S1;
- uint delay_z;
- uchar Display_Data[10];
- /////////////////////////////////
- //////////共十六等级/////////////
- /////////////////////////////////
- void timer_0(void) interrupt 1 //共十六等级
- {
- Time0_Flag=1;
- Time0_Dec--;
- }
- //*************************************************//
- // 主函数功能 //
- // 主要产生花样数据 //
- //*************************************************//
- void main(void)
- {
-
- /////////////////////////////////////////////////////
- /////////////////IO口初始化//////////////////////////
- /////////////////////////////////////////////////////
- /*************************读入ID号******************/
- P3M0=0x00;
- P3M1=0x03;
- memset(Display_Data,0x00,sizeof(Display_Data));
- //产生一个随机字符型数据
- TMOD=0x12;
- TR1=1;
- delay_z = ((TH1<<8)|TL1)|((SBUF<<8)|ISP_TRIG)|((SPSTAT<<8)|PCA_PWM0);
- rand();
- srand(delay_z);
- Run_S1=rand()/10; //得到一个数据为25-35做为停留时间
- Run_S=(uchar)Run_S1%10*2+15;
- TMOD=0x02; //系统初始化
- TH0=T0_DAH;
- TL0=T0_DAH;
- ET0=1;
- EA=1;
- TR0=1;
- Time0_Flag=0; //定时器0初始化
- Speed=Speed_Data;
- Time0_Dec=64;
- while(1)
- {
- Read_Pro1();
- delay_z = ((TH1<<8)|TL1)|((SBUF<<8)|ISP_TRIG)|((SPSTAT<<8)|PCA_PWM0);
- srand(delay_z);
- rand();
- Run_S=(uchar)((rand()%10)*2)+15;
- }
- }
- //*************************************************//
- // 花样1:白间七彩右移渐变 //
- // 对10MS到进行处理 //
- //*************************************************//
- void Read_Pro1(void)
- {uchar j,i,B_W;
- Add_speed=1;
- memset(Display_Data,0x00,sizeof(Display_Data));
- for(i=4;i>0;i--) //1短
- {if(i==4)B_W=64;
- if(i==3)B_W=35;
- if(i==2)B_W=10;
- if(i==1)B_W=1;
- Read_Pro_R(B_W);
- }
- for(i=Run_S;i>0;i--)
- {Read_Pro_R(0);
- }
-
- for(j=0;j<2;j++)
- {for(i=7;i>0;i--) //2长
- {
- if(i==7)B_W=64;
- if(i==6)B_W=63;
- if(i==5)B_W=62;
- if(i==4)B_W=60;
- if(i==3)B_W=55;
- if(i==2)B_W=40;
- if(i==1)B_W=15;
- Read_Pro_R(B_W);
- }
- for(i=Run_S;i>0;i--)
- {Read_Pro_R(0);
- }
- }
- for(j=0;j<2;j++)
- {for(i=5;i>0;i--) //2中
- {
- if(i==5)B_W=64;
- if(i==4)B_W=63;
- if(i==3)B_W=55;
- if(i==2)B_W=40;
- if(i==1)B_W=15;
- Read_Pro_R(B_W);
- }
- for(i=Run_S;i>0;i--)
- {Read_Pro_R(0);
- }
- }
- }
- //*************************************************//
- void Read_Pro_R(uchar QW_Data1)
- {
- Display_Data[9]=Display_Data[8];
- Display_Data[8]=Display_Data[7];
- Display_Data[7]=Display_Data[6];
- Display_Data[6]=Display_Data[5];
- Display_Data[5]=Display_Data[4];
- Display_Data[4]=Display_Data[3];
- Display_Data[3]=Display_Data[2];
- Display_Data[2]=Display_Data[1];
- Display_Data[1]=Display_Data[0];
- Display_Data[0]=QW_Data1;
- Out_Put();
- Out_Put();
- Out_Put();
- Out_Put();
- Out_Put();
- Out_Put();
- }
- //*************************************************//
- // 花样输出功能 //
- // 对10MS到进行处理 //
- //*************************************************//
- void Out_Put(void)
- {uchar S;
- bit Time0_Zear;
- for(S=0;S<Speed*Add_speed;S++)
- {
- Time0_Zear=1;
- Time0_Flag=0;
- while(Time0_Zear)
- {
- if(Time0_Flag) //中斷時間到,灰度輸出
- {
- Time0_Flag=0;
- WDT_CONTR=0x30;
- Pwm_Out();
- }
- if(Time0_Dec==0)
- {EA=0;
- Time0_Zear=0;
- Time0_Dec=64;
- TH0=T0_DAH;
- TL0=T0_DAH;
- EA=1;
- }
- }
- }
- }
- //***********
- //*************************************************//
- // PWM输出功能 //
- // 将Display_Data[]数组内数据与16等级进行比较 //
- //*************************************************//
- void Pwm_Out ()
- {
- Latch=Time0_Dec;
- if(Display_Data[0]>Latch) ExPort1=1; else ExPort1=0;
- if(Display_Data[1]>Latch) ExPort2=1; else ExPort2=0;
- if(Display_Data[2]>Latch) ExPort3=1; else ExPort3=0;
- if(Display_Data[3]>Latch) ExPort4=1; else ExPort4=0;
- if(Display_Data[4]>Latch) ExPort5=1; else ExPort5=0;
- if(Display_Data[5]>Latch) ExPort6=1; else ExPort6=0;
- if(Display_Data[6]>Latch) ExPort7=1; else ExPort7=0;
- if(Display_Data[7]>Latch) ExPort8=1; else ExPort8=0;
- if(Display_Data[8]>Latch) Export9=1; else Export9=0;
- if(Display_Data[9]>Latch) Export10=1; else Export10=0;
- }
|