登录|立即注册|使用QQ帐号登录
论坛 > 24小时必答区
发帖|
看2321|回4|收藏
楼主 ID:858009 只看他
2021-8-19 11:20
#include "CH552.h"
#include "GPIO.h"

sbit LED1=P1^3;
sbit LED2=P3^4;

sbit KEY1=P1^5;
sbit KEY2=P1^6;

unsigned int k;

void KEY()
{
       
        if(KEY1==0)
        {
                k++;
                if(k>3)
                        k=0;
        }
}
void delay(unsigned int a)
{
  unsigned int i,j,k;
  for(i=0;i<a;i++)
    for(j=0;j<200;j++)
      for(k=0;k<200;k++)
        ;
}
void main(void)
{
  P1_OUT(PIN3+PIN5+PIN6);  //控制 LEDs 亮
  P3_OUT(PIN4);   //按键 KEYs
        k=0;
  while(1)
    {
                switch(k)
                {
                        case 0:
                {
                    LED1=1;
                        LED2=1;
                }break;
                        case 1:
                {
                        LED1=0;
                        LED2=1;
                }break;
                        case 2:
                {
                        LED1=1;
                        LED2=0;
                }break;
                        case 3:
                {
                        LED1=0;
                        LED2=0;
                }break;
    }
}
}


沙发 ID:328014 只看他
2021-8-19 16:28
原理图呢?是不是电路有问题?  现在什么现象?
板凳 ID:161164 只看他
2021-8-19 19:45
没冇运行KEY()函数
地板 ID:592807 只看他
2021-8-20 11:51
我之前用CH423S拓展IO口做按键矩阵时,将其中两个OC口用于控制LED灯,其中有两个问题需要解决,都是CH开头的,希望对你有用吧。
1 就是拓展IO口时,需要确保对用的IO口已经被初始化成对应的模式  例如in  out  oc模式
2 控制IO口时千万要注意别将其他IO口的参数改变,
例如指令 0X4F00 | 0X0001是IO口1输出1  
例如指令 0X4F00 | 0X0002是IO口2输出1  
。。。
例如指令 0X4F00 | 0X0080是IO口8输出1  
当你要IO口8输出1时,就必须注意其他IO口会不会被强制归0
还有就是2楼说的,有没有可能是你没周期调用key函数

5# ID:624769 只看他
2021-8-29 23:49
switch 里面的case都不需要{}  最后加一个 default: break; 看看是不是K值超出了 0-3 的范围的关系。

51黑电子论坛

Powered by Discuz! X3.1

首页|标准版|触屏版|电脑版