找回密码
 立即注册
查看: 830|回复: 11

STC8h2k08u IO输入无效

[复制链接]
  • 打卡等级:以坛为家I
  • 打卡总天数:204
  • 最近打卡:2025-04-02 13:56:58

19

主题

37

回帖

236

积分

中级会员

积分
236
发表于 2024-4-23 11:36:55 | 显示全部楼层 |阅读模式
示波器检测电压正常,IO输出控制正常,唯有作为输入时检测不到IO状态,一共用了三个按键,都检测不到,图上是测试程序和初始化IO,请大佬帮看看
截图202404231133289172.jpg
截图202404231133502361.jpg
截图202404231136329551.jpg
回复

使用道具 举报 送花

  • 打卡等级:以坛为家I
  • 打卡总天数:204
  • 最近打卡:2025-04-02 13:56:58

19

主题

37

回帖

236

积分

中级会员

积分
236
发表于 2024-4-23 11:38:07 | 显示全部楼层
仿真时按按键就没进if里,但是程序也在扫着
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家I
  • 打卡总天数:294
  • 最近打卡:2025-03-06 09:25:41

8

主题

318

回帖

1835

积分

金牌会员

积分
1835
发表于 2024-4-23 13:12:42 | 显示全部楼层
代码贴全一点
盲猜while(1);
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:519
  • 最近打卡:2025-05-02 07:55:51
已绑定手机

46

主题

1694

回帖

2544

积分

金牌会员

积分
2544
发表于 2024-4-23 14:10:17 | 显示全部楼层
star串了10k电阻?
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:519
  • 最近打卡:2025-05-02 07:55:51
已绑定手机

46

主题

1694

回帖

2544

积分

金牌会员

积分
2544
发表于 2024-4-23 14:10:51 | 显示全部楼层
是不是编译优化掉了?
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家I
  • 打卡总天数:338
  • 最近打卡:2025-04-25 16:31:21
已绑定手机

14

主题

600

回帖

2199

积分

荣誉版主

积分
2199
发表于 2024-4-23 15:17:09 | 显示全部楼层
使能内部上拉试试
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家I
  • 打卡总天数:204
  • 最近打卡:2025-04-02 13:56:58

19

主题

37

回帖

236

积分

中级会员

积分
236
发表于 2024-4-23 17:19:19 | 显示全部楼层
Lkck*** 发表于 2024-4-23 13:12
代码贴全一点
盲猜while(1);

#include "stc8h.h"
#include "intrins.h"

sbit Sda = P3^7;
sbit STAR = P3^4;
sbit keyjia = P3^3;
sbit keyjian = P3^2;



void Timer0_Init(void)                //1毫秒@5.5296MHz
{
        AUXR |= 0x80;                        //定时器时钟1T模式
        TMOD &= 0xF0;                        //设置定时器模式
        TL0 = 0x66;                                //设置定时初始值
        TH0 = 0xEA;                                //设置定时初始值
        TF0 = 0;                                //清除TF0标志
        TR0 = 1;                                //定时器0开始计时
        ET0 = 1;                                //使能定时器0中断
}
void Delay1ms(void)        //@5.5296MHz
{
        unsigned char data i, j;

        _nop_();
        _nop_();
        i = 8;
        j = 43;
        do
        {
                while (--j);
        } while (--i);
}

void Delay100us(void)        //@5.5296MHz
{
        unsigned char data i;

        _nop_();
        i = 182;
        while (--i);
}

void Delay20ms(void)        //@5.5296MHz
{
        unsigned char data i, j;

        _nop_();
        _nop_();
        i = 144;
        j = 157;
        do
        {
                while (--j);
        } while (--i);
}
void delayms(unsigned int ms)
{
        while(--ms)
        {
                Delay1ms();
        }
}
void Wait(unsigned int us)
{
        while(--us)
        {
        Delay100us();
        }
}
void on_line(unsigned char Addr)
{
        char i;
        Wait(30);
        for(i=0;i<8;i++)
        {
                Sda=1;
                if(Addr&1)
                {
                        Wait(15);Sda=0;Wait(5);
                }
                else{
                        Wait(5);
                        Sda=0;
                        Wait(15);
                }Addr>>=1;
        }Sda=1;
}

bit star_bofang = 0;
void key_star()
{
        if(STAR == 0)
                {
                        Wait(300);
                        if(STAR == 1)
                        {
                                star_bofang =! star_bofang;
                        }
                }
}
unsigned int jia_time = 0,jian_time = 0;
unsigned char keyjia_flag = 0,keyjian_flag = 0;
unsigned char jia_key = 0,jian_key = 0;//按键值
void key_jia()
{
        if(keyjia == 0)
        {
                keyjia_flag = 1;
        }
                if(keyjia == 1 && jia_time<1000 && keyjia_flag == 1)
                {
                        keyjia_flag = 0;
                        jia_time = 0;
                        jia_key = 1;//短按
                }
                if(keyjia == 1 && jia_time>2000 && keyjia_flag == 1)
                {
                        keyjia_flag = 0;
                        jia_time = 0;
                        jia_key = 2;//长按
                }

}
void key_jian()
{
        if(keyjian == 0)
        {
                keyjia_flag = 1;
        }
                if(keyjian == 1 && jian_time<1000 && keyjian_flag == 1)
                {
                        keyjian_flag = 0;
                        jian_time = 0;
                        jian_key = 1;//短按
                }
                if(keyjian == 1 && jia_time>2000 && keyjian_flag == 1)
                {
                        keyjian_flag = 0;
                        jian_time = 0;
                        jian_key = 2;//长按
                }

}

void pwm_init(unsigned int zhouqi,unsigned int zhankongbi)
{
          P_SW2 = 0x80;
    PWMA_CCER1 = 0x00;                          //写CCMRx前必须先清零CCERx关闭通道
    PWMA_CCMR1 = 0x60;                          //设置CC1为PWMA输出模式
    PWMA_CCER1 = 0x01;                          //使能CC1通道
    PWMA_CCR1 = zhankongbi;                            //设置占空比时间
    PWMA_ARR = zhouqi;                             //设置周期时间
    PWMA_ENO = 0x01;                            //使能PWM1P端口输出
    PWMA_BKR = 0x80;                            //使能主输出
    PWMA_CR1 = 0x01;                            //开始计时
}
unsigned int PWM_zhouqi,PWM_zhankongbi = 0,zhendong =  0;
void Delay300ms(void)        //@5.5296MHz
{
        unsigned char data i, j, k;

        _nop_();
        _nop_();
        i = 9;
        j = 107;
        k = 90;
        do
        {
                do
                {
                        while (--k);
                } while (--j);
        } while (--i);
}

void main()
{
       
        unsigned char yinliang = 0xe3;
            P0M0 = 0x00;
    P0M1 = 0x00;
    P1M0 = 0x00;
    P1M1 = 0x00;
    P2M0 = 0x00;
    P2M1 = 0x00;
    P3M0 = 0x00;
    P3M1 = 0x00;
    P4M0 = 0x00;
    P4M1 = 0x00;
    P5M0 = 0x00;
    P5M1 = 0x00;
                    P3M0 = 0x20; P3M1 = 0x00; //电机口推挽

    P3M0 &= ~0x10; P3M1 &= ~0x10;
//   P3M0 |= 0x10; P3M1 |= 0x10;

       
        on_line(0xf1);//切换到u盘
        Wait(500);
        on_line(0xf7);//循环播放
        Wait(500);
        on_line(0xe3);//音量设置        d2-f0
        Timer0_Init();//1毫秒定时
        EA = 1;
        //pwm_init(100,PWM_zhankongbi);
        while(1)
        {
//                 key_star();
//                 key_jia();
//                key_jian();
//                if(!STA )
//                {
//                                on_line(0xfa);//播放
//                        zhendong = 1;
//                }else{ on_line(0xfb);zhendong = 0;}//暂停
               
                if(jia_key == 1)//短按
                {
                        jia_key = 0;
                        PWM_zhankongbi++;
                        pwm_init(100,PWM_zhankongbi);
                }
                if(jian_key == 1)//短按
                {
                        jia_key = 0;
                        PWM_zhankongbi--;
                        pwm_init(100,PWM_zhankongbi);
                }
               
                if(jia_key == 2)//长按
                {
                        jia_key = 0;
                        yinliang++;
                        on_line(yinliang);//音量设置        d2-f0
                }
                if(jian_key == 2)//长按
                {
                        jia_key = 0;
                        yinliang--;
                        on_line(yinliang);//音量设置        d2-f0
                }

                if(P33 == 0)
                {
                        Delay20ms();
                        if(P33 == 0)
                        {
                                zhendong =! zhendong;
                        }
                }
        }
}

void Timer0_Isr(void) interrupt 1
{
        static int i,pwm_time;
        i++;
        if(i>500)
        {
                P15 =! P15;
                i = 0;
        }
        if(keyjia_flag == 1)//判断按下的时间
        {
                jia_time++;
        }
        if(keyjian_flag == 1)//判断按下的时间
        {
                jian_time++;
        }
        if(zhendong == 1){
                pwm_time++;
                if(pwm_time<PWM_zhankongbi)
                P35 = 1;
                if(pwm_time>PWM_zhankongbi&&pwm_time<PWM_zhouqi)
                P35 = 0;
                if(pwm_time>PWM_zhouqi)
                pwm_time = 0;
        }else  P35 = 0;
       
}
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:偶尔看看I
  • 打卡总天数:14
  • 最近打卡:2025-04-17 23:22:52

2

主题

14

回帖

110

积分

注册会员

积分
110
发表于 2024-4-23 23:29:25 来自手机 | 显示全部楼层
P3=0xff;
回复

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:417
  • 最近打卡:2025-04-30 21:39:09
已绑定手机

34

主题

2096

回帖

2206

积分

荣誉版主

积分
2206
发表于 2024-4-23 23:49:37 | 显示全部楼层
脱离仿真环境,直接下载固件到单机全速运行试试
睁开眼睛做场梦~~~
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家I
  • 打卡总天数:395
  • 最近打卡:2025-05-02 05:31:55

16

主题

702

回帖

2474

积分

金牌会员

积分
2474
发表于 2024-4-24 07:58:24 | 显示全部楼层

可以在初始化程序中,加入P3=0xff试试
回复 支持 反对

使用道具 举报 送花

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

本版积分规则

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

GMT+8, 2025-5-2 20:34 , Processed in 0.200293 second(s), 116 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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