找回密码
 立即注册
查看: 73|回复: 2

一个i/o口驱动发光二极管并扫描按键

[复制链接]
  • TA的每日心情
    无聊
    6 天前
  • 签到天数: 7 天

    [LV.3]偶尔看看II

    3

    主题

    1

    回帖

    65

    积分

    注册会员

    积分
    65
    发表于 2024-4-16 19:46:47 | 显示全部楼层 |阅读模式
    小弟学习51,单片机,根据网上资料试验了用STC15W204S做 一个i/o口驱动发光二极管并扫描按键的电路,程序烧入后按键没反应,请各位大侠不吝赐教程序有何问题,谢谢。
    无标题ss.png


    #include <STC15.H>
    #include <intrins.h>
    #define uchar unsigned char
    #define uint unsigned int

    sbit LED1 = P1^0;        //LED端口声明
    sbit LED2 = P1^1;
    sbit LED3 = P1^2;
    sbit LED4 = P1^3;

    uchar KeySec=0;//键值变量

    /**********************************
      1ms延时程序(仅限于STC15W 1T MCU)
    **********************************/
    void Delay1ms()                //@12.000MHz
    {
            unsigned char i, j;
            i = 12;
            j = 169;
            do
            {
                    while (--j);
            } while (--i);
    }  



    /**********************************
            按键扫描程序
    **********************************/
    void key_scan()
    {
            static uchar count=0;//静态计数变量
            static bit sign_key=0;                        //静态标志位
           uchar time_key,time_LED;//临时变量

        //    P1M0=0x00;//P1.0~3设置弱上拉
         //   P1M1=0x00;//P1.0~3设置弱上拉

            time_LED=P1&0x0f;//保存4个LED状态

            P1M0=0x00;//P1.0~3设置弱上拉
            P1M1=0x00;//P1.0~3设置弱上拉
            P1|=0x0f; //P1.0~3置高电平      
            if(P1&0x0f!=0x0f)//有键按下
            {
                    if(++count>=10 && sign_key==0)//消抖
                    {
                            sign_key=1;//自锁
                            time_key=P1&0x0f;//保存P1.0~3状态
                            switch(time_key)
                            {
                                    case 0x0e: KeySec=1; break;//输出键值
                                    case 0x0d: KeySec=2; break;
                                    case 0x0b: KeySec=3; break;
                                    case 0x07: KeySec=4; break;
                            }
                    }
            }
            else //抬起
            {
                    count=0;//计数变量清0
                    sign_key=0;//键态标志清0
            }
            P1&=0xf0;    //P1.0~3清0
            P1|=time_LED;//还原4个LED状态
            P1M0=0x0f;   //还原P1.0~3推挽设置
            P1M1=0x00;   //还原P1.0~3推挽设置
    }
    /*********************************
            按键服务程序
    *********************************/
    void key_service()
    {
            switch(KeySec)
            {
                    case 1:        LED1=~LED1;KeySec=0;break;
                    case 2:        LED2=~LED2;KeySec=0;break;
                    case 3:        LED3=~LED3;KeySec=0;break;
                    case 4:        LED4=~LED4;KeySec=0;break;
            }                  
    }
    /********************************
            主程序
    ********************************/
    void main()
    {       
            P1M0=0x0f;//P1.0~3设置推挽
            P1M1=0x00;//P1.0~0设置推挽

                    LED1=0;
                    LED2=0;
                    LED3=0;
                    LED4=0;
            while(1)
            {
                    key_scan();
                    key_service();
                    Delay1ms();//控制主循环周期约1ms
            }
    }


    回复 送花

    使用道具 举报

  • TA的每日心情
    开心
    6 天前
  • 签到天数: 90 天

    [LV.6]常住居民II

    68

    主题

    569

    回帖

    1852

    积分

    超级版主

    积分
    1852
    QQ
    发表于 2024-4-17 08:52:26 | 显示全部楼层
    热线19952583534
    www.STCAI.com
    回复 支持 反对 送花

    使用道具 举报

  • TA的每日心情
    无聊
    6 天前
  • 签到天数: 7 天

    [LV.3]偶尔看看II

    3

    主题

    1

    回帖

    65

    积分

    注册会员

    积分
    65
     楼主| 发表于 2024-4-18 11:35:11 | 显示全部楼层
    bae0e19c4568bf74cebc36b1e39ed1a.jpg




    程序修改了一下,弄好了
    回复 支持 反对 送花

    使用道具 举报

    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    QQ|手机版|深圳国芯人工智能有限公司 ( 粤ICP备2022108929号-2 )

    GMT+8, 2024-4-30 21:29 , Processed in 0.065356 second(s), 40 queries .

    Powered by Discuz! X3.5

    © 2001-2024 Discuz! Team.

    快速回复 返回顶部 返回列表