找回密码
 立即注册

QQ登录

只需一步,快速开始

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

STC15F101W单片机独立按键程序跑飞

[复制链接]
跳转到指定楼层
楼主
ID:93126 发表于 2020-12-20 18:27 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
#include<reg52.h>
#define uint unsigned int
#define uchar unsigned char
sbit key=P3^5;
sbit shuchu=P3^3;
void delay(uint n)
{
    uint i=0,j=0;
    for(i=0;i<n;i++)
        for(j=0;j<123;j++);
}
void main()
{
        uchar i;
        while(1)
        {
                        if(key==0)
                                                        delay(100);
                                                if(key==0)
                                                {
                                                        i++;
                                                        if(i==2)
                                                        {
                                                                i=0;
                                                                shuchu=1;
                                                        }
                                                        while(!key);
                                                }
                                                if(i<2)
                  
                        shuchu=0;
        }
}
上面的的程序仿真时正常下载到单片机中就不行了,程序思路是独立按键按动两次才有一次输出,可是实际按动按键时有时候三次才有输出,有时候连着两次输出,延时函数应该没有问题,请教各位大师指点一下
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:213173 发表于 2020-12-20 21:18 | 只看该作者
1T的单片机延时函数与12T单片机不一样。改了你试试·。
  1. #include<reg52.h>
  2. #define uint unsigned int
  3. #define uchar unsigned char
  4. sbit key=P3^5;
  5. sbit shuchu=P3^3;

  6. void delayms(uint k)//1T 11.0592MHz
  7. {
  8.         uint i,j;
  9.         for(i=k;i>0;i--)
  10.                 for(j=829;j>0;j--);//12T/j=110
  11. }

  12. void main()
  13. {
  14.         uchar i;
  15.         shuchu=0;
  16.         while(1)
  17.         {
  18.                 if(key==0)
  19.                 {
  20.                         delayms(10);
  21.                         if(key==0)
  22.                         {
  23.                                 i++;
  24.                                 if(i==2)
  25.                                 {
  26.                                         i=0;
  27.                                         shuchu=~shuchu;
  28.                                 }
  29.                                 while(!key);
  30.                         }
  31.                 }
  32.         }
  33. }
复制代码
回复

使用道具 举报

板凳
ID:278179 发表于 2020-12-20 23:33 | 只看该作者
改一下顺序看看
#include<reg52.h>
#define uint unsigned int
#define uchar unsigned char
sbit key=P3^5;
sbit shuchu=P3^3;
void delay(uint n)
{
    uint i=0,j=0;
    for(i=0;i<n;i++)
        for(j=0;j<123;j++);
}
void main()
{
        uchar i;
        while(1)
        {
                        if(key==0)
                                                        delay(100);
                                                if(key==0)
                                                {
                                                      
                                                     while(!key);
                                                        i++;
                                                        if(i==2)
                                                        {
                                                                i=0;
                                                                shuchu=1;
                                                        }
                                                      
                                                }
                                                if(i<2)  shuchu=0;
        }
}
回复

使用道具 举报

地板
ID:93126 发表于 2020-12-21 10:59 | 只看该作者
wulin 发表于 2020-12-20 21:18
1T的单片机延时函数与12T单片机不一样。改了你试试·。

谢谢了,就是延时函数出问题了
回复

使用道具 举报

5#
ID:93126 发表于 2020-12-21 11:00 | 只看该作者
huwqly 发表于 2020-12-20 23:33
改一下顺序看看
#include
#define uint unsigned int

谢谢问题解决了
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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