|
給51黑電子論壇的朋友分享一個51單片機做的豆?jié){機的控制仿真,帶源代碼.下面是仿真原理圖
0.png (52.95 KB, 下載次數(shù): 123)
下載附件
2016-9-26 19:23 上傳
0.png (56.04 KB, 下載次數(shù): 115)
下載附件
2016-9-26 18:01 上傳
所有資料下載:
豆?jié){機.zip
(44.96 KB, 下載次數(shù): 166)
2016-9-26 18:57 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
下面是部分源程序預(yù)覽:
- #include<reg51.h>
- #include<intrins.h>
- #define uchar unsigned char
- #define uint unsigned int
- sbit M0=P3^0;
- sbit M1=P3^1;
- sbit M2=P3^2;
- sbit M3=P3^3;
- sbit sw0=P3^6;
- sbit sw1=P3^7;
- sbit key0=P1^0;
- sbit key1=P1^1;
- sbit f=P3^4;
- uchar Speed=1;
- uchar m;
- uchar t=0;
- uchar n=0;
- uchar Date=0;
- uchar Ledplay[6];
- uchar bn=0;
- uchar code SEG7[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x38,0x77,0x40,0x00};
- uchar code Scan_bit[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf};
- uchar data Dis_buf[]={0,0,10,10,10,10};
- uchar z;
- void Delayxms(uint t)
- {
- unsigned char i,j,k;
- for(k=0;k<t;k++)
- {
- _nop_();
- _nop_();
- _nop_();
- i = 11;
- j = 190;
- do
- {
- while (--j);
- } while (--i);
- }
- }
- void Delay1us(uchar t)
- {
- uchar i;
- for(i=0;i<t;i++)
- {
- _nop_();
- _nop_();
- _nop_();
- }
- }
- void display(void)
- {
- uchar i;
-
- for(i=0;i<6;i++)
- {
- P2=0xff; //全部數(shù)碼管位選失能
- P0=SEG7[Dis_buf[i]]; //第i個數(shù)碼管顯示
- P2= Scan_bit[i];
- Delayxms(1);
- }
- }
- void Timer0_init(void)
- {
- TMOD=0x51;
- TH0=(65535-50000)/256;
- TL0=(65535-50000)%256;
- EA=1;
- ET0=1;
- TR0= 1;
- }
- uchar cnt=100;
- void Timer0_int(void) interrupt 1 using 1
- {
- t++;
- TH0=(65535-50000)/256;
- TL0=(65535-50000)%256;
- if(t==20)
- {
- t=0;
- Date=n;
- n=0;
- cnt--;
- if(cnt==0)
- {
- while(1)
- {
- f=0;
- f=1;
- }
-
- }
- }
- if(key0==0)
- {
- Delayxms(10);
- if(key0==0)
- {
- Speed++;
- if(Speed>20)
- {
- Speed=20;
- }
- }
- while(key0==0);
- }
- if(key1==0)
- {
- Delayxms(10);
- if(key1==0)
- {
- Speed--;
- if(Speed==0)
- {
- Speed=1;
- }
- }
- while(key1==0);
- }
- }
- void delay()
- {
- uchar i=5+Speed;
- while(--i!=0)
- {
- Dis_buf[0]=13;
- Dis_buf[1]=cnt%10;
- Dis_buf[2]=cnt/10;
- Dis_buf[3]=12;
- Dis_buf[4]=Speed%10;
- Dis_buf[5]=Speed/10;
- display();
- }
- }
- void R_rotation()
- {
- M3=0;
- M0=1;
- delay();
- n++;
- M0=0;
- M1=1;
- delay();
- n++;
- M1=0;
- M2=1;
- delay();
- n++;
- M2=0;
- M3=1;
- delay();
- n++;
- }
- /*void F_rotation()
- {
- M0=0;
- M3=1;
- delay();
- n++;
- M3=0;
- M2=1;
- delay();
- n++;
- M2=0;
- M1=1;
- delay();
- n++;
- M1=0;
- M0=1;
- delay();
- n++;
- }*/
- void main()
- { int flag = 0;
- Timer0_init();
-
- while(1)
- {
- if(flag == 1)
- R_rotation();
-
- if(sw1==0)
- {
- cnt=10;
- flag = 1;
- }
- if(sw0==0)
- {
- cnt=20;
- flag=1;
- }
- }
- }
復(fù)制代碼
|
|