找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索

请教大侠们仿制ID95809大侠制做的STC15计数器为什么不能计数

查看数: 1842 | 评论数: 35 | 收藏 0
关灯 | 提示:支持键盘翻页<-左 右->
    组图打开中,请稍候......
发布时间: 2024-9-13 17:55

正文摘要:

仿制了ID95809大侠制做的STC15计数器,数码管可以正常显示,但是按按键无法计数没有反应,要把程序里的K3按键程删除才能正常计数,各位大侠们帮忙看下程序是哪里的问题单片机源程序如下:     #include < ...

回复

ID:352736 发表于 2024-9-23 00:44
wl20020807 发表于 2024-9-21 18:59
void keyscan()
{
        if(K1==0)

程序这样改了可以正常计数了
ID:352736 发表于 2024-9-23 00:43
wl20020807 发表于 2024-9-21 19:09
while(1)
        {
                display();

各位大师帮忙看下这个蜂鸣器程序怎么改下让计数器只是每计满100的整数时蜂鸣器响一次 ,加减计数都一样。
ID:352736 发表于 2024-9-21 19:09
  while(1)
        {
                display();
                keyscan();
                delay_ms(10);
                if(Num>=100)
                {
                        FMQ=0;
                }
                if(Num>=101)
                {
                        FMQ=1;
                }
        }
}
ID:352736 发表于 2024-9-21 18:59
void keyscan()
{
        if(K1==0)
        {
                if(flag_KEY==1)//?????1?
                {
                        flag_KEY=0;

                       {if(Num==9999)Num=0;}
                        {
                                Num++;
                        }
                }
        }
        else if(K2==0)
        {
                if(flag_KEY==1)//?????1?
                {
                        flag_KEY=0;

                       {if(Num==0)Num=9999;}
                        {
                                Num--;
                        }
                }
        }
                                 else if(K3==0)
            {
                    if(flag_KEY==1)//?????1?
                    {
                            flag_KEY=0;

                            {
                                    Num=0;
                            }
                    }
            }
                                 
                        
                                 
  else//????
  {      
          flag_KEY=1;
  }
}
ID:352736 发表于 2024-9-21 11:13
xiaobendan001 发表于 2024-9-19 06:54
给他加个上拉电阻怎样?

加了也一样,还是一样没有反应
ID:1109793 发表于 2024-9-19 06:54
wl20020807 发表于 2024-9-18 22:45
对 ,加了k3这段程序,k2 (减健)就是低压平了,

给他加个上拉电阻怎样?
ID:352736 发表于 2024-9-18 23:06
老董 发表于 2024-9-17 17:19
不信邪的我用搭载stc15的板子测试也可以运行啊 你再查查硬件吧

大师你的stc15芯片的晶振设置的多少?我设置的11.0592MHZ
ID:352736 发表于 2024-9-18 22:55
老董 发表于 2024-9-17 17:19
不信邪的我用搭载stc15的板子测试也可以运行啊 你再查查硬件吧

大师有电路图吗?我也是用的stc15w408as搭载的板子但是它就是无法运行
ID:352736 发表于 2024-9-18 22:45
xiaobendan001 发表于 2024-9-18 07:44
你的意思是加了这段代码,K2就等于一直按着了?

对 ,加了k3这段程序,k2 (减健)就是低压平了,
ID:1109793 发表于 2024-9-18 07:44
wl20020807 发表于 2024-9-17 18:48
只要加了K3这段程序,K1(加键)为高电平,K2(减键)为低电平,KI K2按键都没有反应,把K3这段程序删了 ...

你的意思是加了这段代码,K2就等于一直按着了?
ID:352736 发表于 2024-9-17 18:48

只要加了K3这段程序,K1(加键)为高电平,K2(减键)为低电平,KI K2按键都没有反应,把K3这段程序删了,K1 K2 都为高电平了,K1 K2按键都正常可以计数,不知程序是那里出错了
ID:849913 发表于 2024-9-17 17:19
不信邪的我用搭载stc15的板子测试也可以运行啊 你再查查硬件吧
ID:1109793 发表于 2024-9-17 15:21
wl20020807 发表于 2024-9-17 13:24
原程序K1和K3定义在一个IO口了,我把K1改在另外的IO口把K3这段程序删了加减按键计数都是正常的,把K3的这 ...

你可以尝试在main开始的地方加上一个num = 50;然后运行看看实际上显示多少,如果是0,说明你的key3的部分代码是有作用的。
ID:161164 发表于 2024-9-17 15:03
wl20020807 发表于 2024-9-17 13:34
大师这个是原代码我直接贴出来的,实际我改了IO口的,把K1改在P3^4   K3还是在原来的P3^2
FMQ改在P3^7, ...

量一下K3的电压
ID:965189 发表于 2024-9-17 13:59
除了改代码,实际电路也要改到相应的端口上。
ID:352736 发表于 2024-9-17 13:34
君工创 发表于 2024-9-17 12:35
不好意思,没详细看。按键加和复位键不能共用。重新定义这两个键的其中一个到其它端口就不用改代码。

大师这个是原代码我直接贴出来的,实际我改了IO口的,把K1改在P3^4   K3还是在原来的P3^2
FMQ改在P3^7,因为蜂鸣器没有用就随便改了个IO口
ID:352736 发表于 2024-9-17 13:24
xiaobendan001 发表于 2024-9-17 10:46
人家前边有条件的。
不过实际上这个复位按键就是清零按键。这个if是多此一举的,直接num = 0;就好了嘛。 ...

原程序K1和K3定义在一个IO口了,我把K1改在另外的IO口把K3这段程序删了加减按键计数都是正常的,把K3的这段程序加入就不正常了,加减按键都没有反应K3还是定义在原来的p3^2
ID:965189 发表于 2024-9-17 12:35
不好意思,没详细看。按键加和复位键不能共用。重新定义这两个键的其中一个到其它端口就不用改代码。
ID:965189 发表于 2024-9-17 12:02
把第三个按键这里改一下,

if(Num>9999);
{
  Num=0;
}
ID:352736 发表于 2024-9-17 11:42
君工创 发表于 2024-9-17 08:41
if(Num>0);{Num=0;} 这里就是要Num永远等于0。

这个K3是复位按键则断程序不知要怎么该了,大师麻烦指点一下!
ID:352736 发表于 2024-9-17 11:36
老董 发表于 2024-9-16 23:16
else if(K3==0)
            {
                    if(flag_KEY==1)//按键只响应1次

检查了没有漏电,现在把单片机的引脚悬空都是一样的结果
ID:1109793 发表于 2024-9-17 10:46
君工创 发表于 2024-9-17 08:41
if(Num>0);{Num=0;} 这里就是要Num永远等于0。

人家前边有条件的。
不过实际上这个复位按键就是清零按键。这个if是多此一举的,直接num = 0;就好了嘛。
不过就算有if(num>0)这个脱裤子放屁的举动,也不影响结果,软件仿真是对的。
如12楼所说倒是有可能,但是有个问题,楼主刚开始是把K1和K3定义在一个IO上面了,这样这个说法似乎就不成立了。
ID:965189 发表于 2024-9-17 08:41
if(Num>0);{Num=0;} 这里就是要Num永远等于0。
ID:849913 发表于 2024-9-16 23:16
else if(K3==0)
            {
                    if(flag_KEY==1)//按键只响应1次
                    {
                            flag_KEY=0;
                            if(Num>0)
                            {
                                    Num=0;
                            }
                    }
            }
你的程序没问题 检查一下硬件 是不是这个按键漏电了 程序一直认为你是按住了K3 这样flag_KEY==1的机会就没有了 你可以用万用表测一下K3的电压和K1 K2是不是一样 就可以判断出来
ID:352736 发表于 2024-9-16 12:02
xiaobendan001 发表于 2024-9-15 14:35
软件模拟了一下,不用删除,也好用啊,话说你这都没有消斗,是不是和按键抖动有关?

大师程序需要改那里?麻烦指点一下!
ID:352736 发表于 2024-9-16 10:04
xiaobendan001 发表于 2024-9-15 14:35
软件模拟了一下,不用删除,也好用啊,话说你这都没有消斗,是不是和按键抖动有关?

不删除的话按k1和k2计数按键没反应,要把k3按键这段程序删除按k1和k2计数按键才能正常计数,k3按键原程序是复位按键
ID:1109793 发表于 2024-9-16 08:40
老董 发表于 2024-9-15 20:09
P0M0 = 0x00;
    P0M1 = 0x00;
    P1M0 = 0x00;

他包含的是STC15,默认好像就标准IO的吧
ID:849913 发表于 2024-9-15 20:09

        P0M0 = 0x00;
    P0M1 = 0x00;
    P1M0 = 0x00;
    P1M1 = 0x00;
    P2M0 = 0x00;
    P2M1 = 0x00;
    P3M0 = 0x00;
    P3M1 = 0x00;
    P5M0 = 0x00;
    P5M1 = 0x00;
   P3口没设置 设置一下试试
ID:849913 发表于 2024-9-15 20:08
#在         P0M0 = 0x00;     P0M1 = 0x00;     P1M0 = 0x00;     P1M1 = 0x00;     P2M0 = 0x00;     P2M1 = 0x00;     P3M0 = 0x00;     P3M1 = 0x00;     P5M0 = 0x00;     P5M1 = 0x00;    这里快速回复#
ID:1109793 发表于 2024-9-15 14:35
软件模拟了一下,不用删除,也好用啊,话说你这都没有消斗,是不是和按键抖动有关?
ID:352736 发表于 2024-9-15 07:22
wpppmlah 发表于 2024-9-14 08:18
key1 和 key3 都定义成了P32,是不是这个原因呢?

改了还是一样,要把k3的那段程序删了才能计数,不删的话按键没反应
ID:1109793 发表于 2024-9-14 09:31
wpppmlah 发表于 2024-9-14 08:18
key1 和 key3 都定义成了P32,是不是这个原因呢?

就算一样,也只是只执行KEY1的部分吧。
ID:68189 发表于 2024-9-14 08:18
key1 和 key3 都定义成了P32,是不是这个原因呢?
ID:352736 发表于 2024-9-13 17:58
要将这段程序删了才能正常计数,麻烦大侠们帮忙改下
  else if(K3==0)
        {
                if(flag_KEY==1)//按键只响应1次
                {
                        flag_KEY=0;
                        
                        if(Num>0)
                        {
                                Num=0;
                        }
                }
        }

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

Powered by 单片机教程网

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