说白了,时钟的功能就好像是一个小开关,你要用什么寄存器就先对应的打开开关,即:使能对应的时钟。
实际上,在这里面还涉及到一个时钟门控技术,而这又涉及到同步电路,我们都知道(默认你们都知道)在同步电路中总是有一个时钟控制。这里就不赘述了,如果你是一个强迫症患者,请你回去翻翻一本叫《数字电子技术基础》的书,可以找到答案。//程序如下
#include <pich>
#define _XTAL_FREQ 4000000
__CONFIG(INTIO & WDTDIS & PWRTDIS& MCLRDIS & UNPROTECT & BORDIS & IESODIS & FCMDIS);
void main(void){
ANSEL =0x00;
ANSELH=0x00;
ADCON0=0x00;
inta=0,b=0,c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0;
if(RB5==0){
TRISA =0x00;
TRISB =0x30;
TRISC =0x00;
while(1){
if(RB4==1){
PORTC=0xb6;PORTA=0x01;
__delay_ms(100); __delay_ms(100);
if(RB4==0){
a+=1;j+=1;
__delay_ms(100);__delay_ms(100);__delay_ms(100);__delay_ms(100);__delay_ms(100); //在改个函数,程序更紧凑
if(a==3){
PORTA=0x20;PORTC=0xb7;
break; //不要使用, 不然会跳循环。程序结束。
}
if(j==3){
PORTC=0xfe;PORTA=0x00;
break;
}
}
PORTC=0x0c;PORTA=0x01;
__delay_ms(100);__delay_ms(100);
if(RB4==0){
b+=1;j+=1;
__delay_ms(100);__delay_ms(100);__delay_ms(100);__delay_ms(100);__delay_ms(100);
if(b==3){
PORTA=0x20;PORTC=0x0d;
break;
}
if(j==3){
PORTC=0xfe;PORTA=0x00;
break;
}
}
PORTC=0x24;PORTA=0x01;
__delay_ms(100);__delay_ms(100);
if(RB4==0){
c+=1;j+=1;
__delay_ms(100);__delay_ms(100);__delay_ms(100);__delay_ms(100);__delay_ms(100);
if(c==3){
PORTA=0x20;PORTC=0x25;
break;
}
if(j==3){
PORTC=0xfe;PORTA=0x00;
break;
}
}
PORTC=0xb0;PORTA=0x01;
__delay_ms(100);__delay_ms(100);
if(RB4==0){
d+=1;j+=1;
__delay_ms(100);__delay_ms(100);__delay_ms(100);__delay_ms(100);__delay_ms(100);
if(d==3){
PORTA=0x20;PORTC=0xb1;
break;
}
if(j==3){
PORTC=0xfe;PORTA=0x00;
break;
}
}
PORTC=0x60;PORTA=0x01;
__delay_ms(100);__delay_ms(100);
if(RB4==0){
e+=1;j+=1;
__delay_ms(100);__delay_ms(100);__delay_ms(100);__delay_ms(100);__delay_ms(100);
if(e==3){
PORTA=0x20;PORTC=0x61;
break;
}
if(j==3){
PORTC=0xfe;PORTA=0x00;
break;
}
}
PORTC=0x40;PORTA=0x01;
__delay_ms(100);__delay_ms(100);
if(RB4==0){
f+=1;j+=1;
__delay_ms(100);__delay_ms(100);__delay_ms(100);__delay_ms(100);__delay_ms(100);
if(f==3){
PORTA=0x20;PORTC=0x41;
break;
}
if(j==3){
PORTC=0xfe;PORTA=0x00;
break;
}
}
PORTC=0x36;PORTA=0x01;
__delay_ms(100);__delay_ms(100);
if(RB4==0){
g+=1;j+=1;
__delay_ms(100);__delay_ms(100);__delay_ms(100);__delay_ms(100);__delay_ms(100);
if(g==3){
PORTA=0x20;PORTC=0x37;
break;
}
if(j==3){
PORTC=0xfe;PORTA=0x00;
break;
}
}
PORTC=0x00;PORTA=0x01;
__delay_ms(100);__delay_ms(100);
if(RB4==0){
h+=1;j+=1;
__delay_ms(100);__delay_ms(100);__delay_ms(100);__delay_ms(100);__delay_ms(100);
if(h==3){
PORTA=0x20;PORTC=0x01;
break;
}
if(j==3){
PORTC=0xfe;PORTA=0x00;
break;
}
}
PORTC=0x20;PORTA=0x01;
__delay_ms(100);__delay_ms(100);
if(RB4==0){
i+=1;j+=1;
__delay_ms(100);__delay_ms(100);__delay_ms(100);__delay_ms(100);__delay_ms(100);
if(i==3){
PORTA=0x20;PORTC=0x21;
break;
}
if(j==3){
PORTC=0xfe;PORTA=0x00;
break;
}
}
}
}
}
}
// 按键使用break,,你就一层while会直接结束。显示小数点是跟你的赋值有关要连硬件调试下参数。
修改后的
#include <pich>
#define _XTAL_FREQ 4000000
__CONFIG(INTIO & WDTDIS & PWRTDIS& MCLRDIS & UNPROTECT & BORDIS & IESODIS & FCMDIS);
void delu(int i)
{
while(i--)
__delay_ms(100);
}
void main(void){
unsigned char flg=1; //去掉break,而增加的 是否进入循环的标志。
ANSEL =0x00;
ANSELH=0x00;
ADCON0=0x00;
inta=0,b=0,c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0;
if(RB5==0){
TRISA =0x00;
TRISB =0x30;
TRISC =0x00;
while(1){
//打开flg 的条件也要增加上
if(RB4==0)flg=1;
if(RB4==1&&flg==1){ PORTC=0xb6;PORTA=0x01;delu(2); //
if(RB4==0){ a+=1;j+=1; delu(5);
if(a==3) { PORTA=0x20;PORTC=0xb7; flg=0; }
if(j==3) { PORTC=0xfe;PORTA=0x00; flg=0; }
}
PORTC=0x0c;PORTA=0x01;delu(2); //
if(RB4==0){ b+=1;j+=1; delu(5);
if(b==3) { PORTA=0x20;PORTC=0x0d; flg=0; }
if(j==3) { PORTC=0xfe;PORTA=0x00; flg=0; }
}
PORTC=0x24;PORTA=0x01;delu(2); //
if(RB4==0){ c+=1;j+=1; delu(5);
if(c==3) { PORTA=0x20;PORTC=0x25; flg=0;}
if(j==3) { PORTC=0xfe;PORTA=0x00; flg=0;}
}
PORTC=0xb0;PORTA=0x01;delu(2); //
if(RB4==0){ d+=1;j+=1;delu(5);
if(d==3) { PORTA=0x20;PORTC=0xb1; flg=0;}
if(j==3) { PORTC=0xfe;PORTA=0x00; flg=0;}
}
PORTC=0x60;PORTA=0x01;delu(2); //
if(RB4==0){ e+=1;j+=1; delu(5);
if(e==3) { PORTA=0x20;PORTC=0x61; flg=0; }
if(j==3) { PORTC=0xfe;PORTA=0x00; flg=0;}
}
PORTC=0x40;PORTA=0x01;delu(2); //
if(RB4==0){ f+=1;j+=1; delu(5);
if(f==3) { PORTA=0x20;PORTC=0x41; flg=0; }
if(j==3) { PORTC=0xfe;PORTA=0x00; flg=0; }
}
PORTC=0x36;PORTA=0x01;delu(2); //
if(RB4==0){ g+=1;j+=1;delu(5);
if(g==3){ PORTA=0x20;PORTC=0x37; flg=0;}
if(j==3){ PORTC=0xfe;PORTA=0x00; flg=0;}
}
PORTC=0x00;PORTA=0x01;delu(2); //
if(RB4==0){ h+=1;j+=1;delu(5);
if(h==3) { PORTA=0x20;PORTC=0x01; flg=0;}
if(j==3) { PORTC=0xfe;PORTA=0x00; flg=0;}
}
PORTC=0x20;PORTA=0x01;delu(2); //
if(RB4==0) { i+=1;j+=1;delu(5);
if(i==3) { PORTA=0x20;PORTC=0x21; flg=0;}
if(j==3) { PORTC=0xfe;PORTA=0x00; flg=0;}
}
}
}
}
}
//meiyou
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)