|
#include<reg51.h> #include<intrins.h> #define uchar unsigned char #define uint unsigned int sbit M0=P3^0; //八路NPN达林顿连接晶体管连接6线步进电机 sbit M1=P3^1; sbit M2=P3^2; sbit M3=P3^3; sbit sw0=P3^6; //K1开始 sbit sw1=P3^7; //K2 sbit key0=P1^0; //K3 sbit key1=P1^1; //K4 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) //延时ms { 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) //延时1us { uchar i; for(i=0;i<t;i++) { _nop_(); _nop_(); _nop_(); } } void display(void) //数码管显示时间 { uchar i; for(i=0;i<6;i++) { P2=0xff; //全部数码管位选失能 P0=SEG7[Dis_buf[i]]; //第i个数码管显示 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) //检测K3按下 { Delayxms(10); //延时10ms if(key0==0) { Speed++; if(Speed>20) { Speed=20; } } while(key0==0); } if(key1==0) //检测K4按下 { 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) //检测K2是否按下 { cnt=10; flag=1; } if(sw0==0) //检测K1是否按下 { cnt=20; flag=1; } } } |
| 谢谢分享!!! |
qq104542 发表于 2018-10-16 14:37 这个是汇编 |
| 谢谢分亨 |
| 有完整仿真图吗 |
|
楼主你这个是程序,能不能用的? |