找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 973|回复: 12
打印 上一主题 下一主题
收起左侧

新手求教 单片机P0.3和P0.2没动作,没找到原因

[复制链接]
跳转到指定楼层
楼主
P0.3和P0.2没动作,没找到原因,拜托大神指点

//STC15W408AS(LQFP32)

#include<reg52.h>
#define uint unsigned int

sbit led1h=P2^5;  //输出至ULN2803
sbit led1l=P2^6;
sbit led2h=P2^7;
sbit led2l=P2^2;
sbit led3h=P2^3;
sbit led3l=P2^4;
sbit led4h=P3^7;
sbit led4l=P2^0;
sbit led5h=P2^1;
sbit led5l=P3^4;
sbit led6h=P3^5;
sbit led6l=P3^6;

sbit key1=P1^3; //输出功率强弱控制
sbit key2=P1^5;
sbit key3=P1^2;
sbit key4=P1^1;
sbit key5=P1^4;
sbit key6=P1^0;

uint h1,h2,h3,h4,h5,h6;
uint l1,l2,l3,l4,l5,l6;


uint onof;  //状态变量

sbit st=P1^6;   //定时器输出
sbit star=P1^7;  //定时器启动
sbit stop=P5^4;  //定时器停止

sbit ss=P5^5;   //来自遥控器,控制定时器启动、停止
sbit yy=P0^2;   //语音芯片触发
sbit fm=P0^3;   //蜂鸣器控制

void delayms(uint xms)
      {
        uint i,j;
        for(i=xms;i>0;i--)
            for(j=110;j>0;j--);
      }

void yycan(uint m)  //5段语音触发
      {
                uint n;
                n=0;
                while(n<=m)
          {
                yy=1;
                delayms(1);
                yy=0;
        delayms(1);
                n++;
          }
}

void keycan()
{      
    if(st==1&&onof==0)
    {
        delayms(10);   
        if(st==1&&onof==0)
        {   
            led1h=h1;
            led1l=l1;
            led2h=h2;
            led2l=l2;
            led3h=h3;
            led3l=l3;
            led4h=h4;
            led4l=l4;
            led5h=h5;
            led5l=l5;
            led6h=h6;
            led6l=l6;
            onof=1;
            yycan(1);
            delayms(10);
        }
    }






/***********************************/   

    if(st==0&&onof==1)
    {
        delayms(10);
        if(st==0&&onof==1)
        {
            h1=led1h;
            l1=led1l;
            h2=led2h;
            l2=led2l;
            h3=led3h;
            l3=led3l;
            h4=led4h;
            l4=led4l;
            h5=led5h;
            l5=led5l;
            h6=led6h;
            l6=led6l;
            led1h=1;
            led1l=1;
            led2h=1;
            led2l=1;
            led3h=1;
            led3l=1;
            led4h=1;
            led4l=1;
            led5h=1;
            led5l=1;
            led6h=1;
            led6l=1;
            onof=0;
            stop=0;
            delayms(200);
            stop=1;
            yycan(5);
            fm=1;
            delayms(4000);
            fm=0;
            delayms(10);


        }
    }

/********************************/

    if(ss==0&&onof==0)
    {
        delayms(10);
        if(ss==0&&onof==0)
        {
            star=0;            
            delayms(300);
            star=1;
            onof=1;
            while(!ss);
            delayms(10);
        }

    }

/*******************************/
    if(ss==0&&onof==1)
    {
        delayms(10);
        if(ss==0&&onof==1)
        {
            stop=0;            
            delayms(300);
            stop=1;
            onof=0;
            while(!ss);
            delayms(10);
        }

    }

/*******************************/


        if(key1==0&&st==1)
        {
                delayms(10);
                if(key1==0&&st==1)        

                {
                        if((led1h==1)&&(led1l==1))
                        {
                                led1h=0;
                                led1l=1;
                                while(!key1);
                yycan(2);
                                delayms(10);
                        }
                }

                if(key1==0&&st==1)
                {
                        if((led1h==0)&&(led1l==1))
                        {
                                led1h=1;
                                led1l=0;
                                while(!key1);
                yycan(3);
                                delayms(10);
                        }
                }

                if(key1==0&&st==1)        

                {        
            if((led1h==1)&&(led1l==0))
                        {
                                led1h=1;
                                led1l=1;
                                while(!key1);
                yycan(4);
                                delayms(10);
                        }
                 }
        }
        delayms(10);

/*********************************/

        if(key2==0&&st==1)
        {
                delayms(10);
                if(key2==0&&st==1)        
                {
                        if((led2h==1)&&(led2l==1))
                        {
                                led2h=0;
                                led2l=1;
                                while(!key2);
                yycan(2);
                                delayms(10);
                        }
                }

                if(key2==0&&st==1)
                {
                        if((led2h==0)&&(led2l==1))
                        {
                                led2h=1;
                                led2l=0;
                                while(!key2);
                yycan(3);
                                delayms(10);
                        }
                }

                if(key2==0&&st==1)        

                {        if((led2h==1)&&(led2l==0))
                        {
                                led2h=1;
                                led2l=1;
                                while(!key2);
                yycan(4);
                                delayms(10);
                        }
                 }
        }
        delayms(10);
               
/*******************************/

  if(key3==0&&st==1)
        {
                delayms(10);
                if(key3==0&&st==1)        
                {
                        if((led3h==1)&&(led3l==1))
                        {
                                led3h=0;
                                led3l=1;
                                while(!key3);
                yycan(2);
                                delayms(10);
                        }
                }

                if(key3==0&&st==1)
                {
                        if((led3h==0)&&(led3l==1))
                        {
                                led3h=1;
                                led3l=0;
                                while(!key3);
                yycan(3);
                                delayms(10);
                        }
                }

                if(key3==0&&st==1)        

                {        if((led3h==1)&&(led3l==0))
                        {
                                led3h=1;
                                led3l=1;
                                while(!key3);
                yycan(4);
                                delayms(10);
                        }
                 }
        }
        delayms(10);

/*********************************/

        if(key4==0&&st==1)
        {
                delayms(10);
                if(key4==0&&st==1)        
                {
                        if((led4h==1)&&(led4l==1))
                        {
                                led4h=0;
                                led4l=1;
                                while(!key4);
                yycan(2);
                                delayms(10);
                        }
                }

                if(key4==0&&st==1)
                {
                        if((led4h==0)&&(led4l==1))
                        {
                                led4h=1;
                                led4l=0;
                                while(!key4);
                yycan(3);
                                delayms(10);
                        }
                }

                if(key4==0&&st==1)        

                {        
                    if((led4h==1)&&(led4l==0))
                        {
                                led4h=1;
                                led4l=1;
                                while(!key4);
                yycan(4);
                                delayms(10);
                        }
                 }
        }
        delayms(10);

/********************************/

           if(key5==0&&st==1)
        {
                delayms(10);
                if(key5==0&&st==1)        
                {
                        if((led5h==1)&&(led5l==1))
                        {
                                led5h=0;
                                led5l=1;
                                while(!key5);
                yycan(2);
                                delayms(10);
                        }
                }

                if(key5==0&&st==1)
                {
                        if((led5h==0)&&(led5l==1))
                        {
                                led5h=1;
                                led5l=0;
                                while(!key5);
                yycan(3);
                                delayms(10);
                        }
                }

                if(key5==0&&st==1)        

                {        
                    if((led5h==1)&&(led5l==0))
                        {
                                led5h=1;
                                led5l=1;
                                while(!key5);
                yycan(4);
                                delayms(10);
                        }
                 }
        }
        delayms(10);

/************************************/

           if(key6==0&&st==1)
        {
                delayms(10);
                if(key6==0&&st==1)        
                {
                        if((led6h==1)&&(led6l==1))
                        {
                                led6h=0;
                                led6l=1;
                                while(!key6);
                yycan(2);
                                delayms(10);
                        }
                }

                if(key6==0&&st==1)
                {
                        if((led6h==0)&&(led6l==1))
                        {
                                led6h=1;
                                led6l=0;
                                while(!key6);
                yycan(3);
                                delayms(10);
                        }
                }

                if(key6==0&&st==1)        

                {        
                    if((led6h==1)&&(led6l==0))
                        {
                                led6h=1;
                                led6l=1;
                                while(!key6);
                yycan(4);
                                delayms(10);
                        }
                 }
        }
        delayms(10);
}

/*************************************/

IO_Init()
{
        P0M1=0x00;
        P0M0=0xc0;
        P1M1=0x00;
        P1M0=0x80;
        P2M1=0x00;
        P2M0=0x00;
        P3M1=0x00;
        P3M0=0x00;
        P5M1=0x00;
        P5M0=0x10;

}   

/*************************************/

void main()
{   
        led1h=1;
        led1l=1;
        led2h=1;
        led2l=1;
        led3h=1;
        led3l=1;
        led4h=1;
        led4l=1;
        led5h=1;
        led5l=1;
        led6h=1;
        led6l=1;

    h1=0;
    l1=1;
    h2=0;
    l2=1;
    h3=0;
    l3=1;
    h4=0;
    l4=1;
    h5=0;
    l5=1;
    h6=0;
    l6=1;

        key1=1;
        key2=1;
        key3=1;
        key4=1;
        key5=1;
        key6=1;

        star=1;
    stop=1;
    ss=1;
    yy=0;
    fm=0;
    onof=0;

    delayms(10);

        while(1)
        {
                keycan();
        delayms(5);
               
        }
}

12345.png (300.86 KB, 下载次数: 0)

12345.png
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:1133081 发表于 2025-8-22 11:23 | 只看该作者
STC15W408AS本来就没有P0,当然也没有P0.3和P0.2。
回复

使用道具 举报

板凳
ID:1109793 发表于 2025-8-22 12:18 | 只看该作者
WL0123 发表于 2025-8-22 11:23
STC15W408AS本来就没有P0,当然也没有P0.3和P0.2。

资料里面没有408
但是有404S


回复

使用道具 举报

地板
ID:774370 发表于 2025-8-22 12:36 | 只看该作者
如果是STC15W408AS,此型号无P0端口。如果是STC89系列,P0口需外接上拉电阻
回复

使用道具 举报

5#
ID:217075 发表于 2025-8-22 12:48 | 只看该作者
LQFP32有P0.0到P0.3
回复

使用道具 举报

6#
ID:217075 发表于 2025-8-22 12:49 | 只看该作者
WL0123 发表于 2025-8-22 11:23
STC15W408AS本来就没有P0,当然也没有P0.3和P0.2。

LQFP32有P0.0至P0.3
回复

使用道具 举报

7#
ID:774370 发表于 2025-8-22 15:14 | 只看该作者

我又仔细的看了一下STC15W408AS手册,未见P0口。
回复

使用道具 举报

8#
ID:1133081 发表于 2025-8-22 15:28 | 只看该作者

程序中没有调用IO_Init(),也就是没有配置端口模式。
回复

使用道具 举报

9#
ID:1153607 发表于 2025-8-22 17:14 | 只看该作者
 P0M0=0xc0;改成 P0M0= 0X0C 试试。不知道你那句什么意思。
回复

使用道具 举报

10#
ID:1109793 发表于 2025-8-22 17:59 | 只看该作者
jintaiyang 发表于 2025-8-22 15:14
我又仔细的看了一下STC15W408AS手册,未见P0口。

我下载的PDF里面没找到这个,至少目录里面没有
回复

使用道具 举报

11#
ID:1153607 发表于 2025-8-22 22:39 | 只看该作者
15W408AS 没有32脚封装产品,15W408S有LQFP32产品。
回复

使用道具 举报

12#
ID:217075 发表于 2025-8-25 09:55 | 只看该作者
确定了,STC15W408AS LQFP32 P0.0-P0.3 不能用,P0口只是样子,产品手册上根本没提,愁死了,刚发现STC居然如此垃圾
回复

使用道具 举报

13#
ID:217075 发表于 2025-8-25 10:45 | 只看该作者
用STC15W1K24S-35I-LQFP32替代,工作正常
回复

使用道具 举报

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

本版积分规则

小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

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