使能 PORTA 口时钟 是什么意思啊

使能 PORTA 口时钟 是什么意思啊,第1张

就是打开GPIO的时钟。stm32对每个外设的时钟都设置了开关,让用户可以精确地控制,关闭不需要的设备,达到节省供电的目的。如果不用的就完全关闭,尽可能降低芯片功耗。
说白了,时钟的功能就好像是一个小开关,你要用什么寄存器就先对应的打开开关,即:使能对应的时钟。
实际上,在这里面还涉及到一个时钟门控技术,而这又涉及到同步电路,我们都知道(默认你们都知道)在同步电路中总是有一个时钟控制。这里就不赘述了,如果你是一个强迫症患者,请你回去翻翻一本叫《数字电子技术基础》的书,可以找到答案。

//程序如下
#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


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zz/13501975.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-08-20
下一篇 2023-08-20

发表评论

登录后才能评论

评论列表(0条)

保存