#include<reg52.h> #include<intrins.h> #define uint unsigned int #define uchar unsigned char #include<reg52.h> #include<intrins.h> #define uint unsigned int #define uchar unsigned char sbit fmq=P3^6; sbit k1=P3^2; void delayms(uint); uchar a; uint z; void delayms(uint x) { uint i,j; for(i=x;i>0;i--) for(j=1;j<100;j++); } void delay500us() { unsigned char j; for(j=0;j<57;j++); } void beer() { fmq=0; delay500us(); fmq=1; delay500us(); } void display() { unsigned int t; while(1){ for(t=0;t<500;t++) { beer(); } } } void main() {z=0; EA=1; EX0=1; IT0=1; a=0xfe; P0=a; delayms(500); a=_crol_(a,1); while(1); } void int0() interrupt 0 { while(1){ if(k1==0) { z++; if(z%2==0) { display(); } } } } sbit k1=P3^2; void delayms(uint); uchar a; uint z; void delayms(uint x) { uint i,j; for(i=x;i>0;i--) for(j=1;j<100;j++); } void delay500us() { unsigned char j; for(j=0;j<57;j++); } void beer() { fmq=0; delay500us(); fmq=1; delay500us(); } void display() { unsigned int t; while(1){ for(t=0;t<500;t++) { beer(); } } } void main() {z=0; EA=1; EX0=1; IT0=1; a=0xfe; P0=a; delayms(500); a=_crol_(a,1); while(1); } void int0() interrupt 0 { while(1){ if(k1==0) { z++; if(z%2==0) { display(); } } } } 这个实用中断控制的,比较简单,希望有所帮助,, |
新思路实现 #include <reg51.H> #include <intrins.H> sbit k1=P3^6; sbit k2=P3^7; void main() { unsigned int i=0; unsigned char k; while(1) { if((k1==0)&&(k2==0)) { P1=0xff; } else { if(k1==0) { P1=0x7f; k=1; } if(k2==0) { P1=0xfe; k=2; } } switch(k) { case 1: i++; if(i>13000) { i=0; P1=_cror_(P1,1); } break; case 2: i++; if(i>13000) { i=0; P1=_crol_(P1,1); } break; } } } |
本帖最后由 jiashun 于 2014-12-11 20:45 编辑 #include<reg52.h> //包含头文件,一般情况不需要改动,头文件包含特殊功能寄存器的定义 void Delay(unsigned int t); //函数声明 /*------------------------------------------------ 主函数 ------------------------------------------------*/ void main (void) { unsigned char i; //定义一个无符号字符型局部变量 i 取值范围 0~255 Delay(50000); if(P3.6=0) { P1=0xfe; //赋初始值 while (1) //主循环 { for(i=0;i<8;i++) //加入 for循环,表明for循环大括号中的程序循环执行8次 { Delay(50000); P1<<=1; P1=P1|0x01; //右移后,最右端自动赋值0,所以需要该语句赋值1 } P1=0xfe; //重新赋初始值 //主循环中添加其他需要一直工作的程序 } } else if( P3.7=0) { P1=0x7f; //赋初始值 while (1) //主循环 { for(i=0;i<8;i++) //加入 for循环,表明for循环大括号中的程序循环执行8次 { Delay(50000); P1>>=1; P1=P1|0x80; //右移后,最左端自动赋值0,所以需要该语句赋值1 } P1=0x7f; //重新赋初始值 //主循环中添加其他需要一直工作的程序 } } else if (P3.6=0&&P3.7=0) { P1=0xff; } /*------------------------------------------------ 延时函数,含有输入参数 unsigned int t,无返回值 unsigned int 是定义无符号整形变量,其值的范围是 0~65535 ------------------------------------------------*/ void Delay(unsigned int t) { while(--t); } |
共同学习,抛砖引玉,不要笑: #include <reg51.H> #include <intrins.H> sbit k1=P3^6; sbit k2=P3^7; void delay(int z) { int x,y; for(x=z;x>0;x--) for(y=110;y>0;y--); } void main() { while(1) { if(k1==0&&k2==1) { P1=0xfe; delay(5); if(k1==0&&k2==1) { while(k2) { P1=_crol_(P1,1); delay(500); } } } if(k2==0&&k1==1) { P1=0xfe; delay(5); if(k2==0&&k1==1) { while(k1) { P1=_cror_(P1,1); delay(500); } } } if(k1||k2==0) P1=0xff; } } |