数码之家

 找回密码
 立即注册

QQ登录

只需一步,快速开始

微信登录

微信扫一扫,快速登录

搜索
查看: 1213|回复: 10

[C51] 大侠们帮忙看下这个计数器咋个不能正常计数

[复制链接]
发表于 2024-9-16 15:04:08 来自手机浏览器 | 显示全部楼层 |阅读模式

爱科技、爱创意、爱折腾、爱极致,我们都是技术控

您需要 登录 才可以下载或查看,没有账号?立即注册 微信登录

x
本帖最后由 wl771217 于 2024-9-16 15:13 编辑

仿制了ID95809大侠制做的STC15计数器,数码管可以正常显示,但是按按键无法计数没有反应,要把程序里的K3按键程删除才能正常计数,各位大侠们帮忙看下程序是哪里的问题单片机源程序如下:
    #include <STC15.h>
    #define uchar unsigned char
    #define uint unsigned int
    sbit FMQ=P3^7;//蜂鸣器
    sbit K1=P3^4; //按键加
    sbit K2=P3^5; //按键减
    sbit K3=P3^2; //复位
    bit flag_KEY=0; //按键松开标志位
    sbit DS1=P1^3;//数码管第1位
    sbit DS2=P1^1;//数码管第2位
    sbit DS3=P1^0;//数码管第3位
    sbit DS4=P1^2;//数码管第4位
    unsigned char ScanTime=1;
    unsigned int Num=0;
    //共阴数码管段码表,段接P2.0-2.7,位接P1.0-1.3
    unsigned char code SEG_Tab[]={
            0x3F,/*0*/
            0x06,/*1*/
            0x5B,/*2*/
            0x4F,/*3*/
            0x66,/*4*/
            0x6D,/*5*/
            0x7D,/*6*/
            0x07,/*7*/
            0x7F,/*8*/
            0x6F,/*9*/
    };
    /*---------------------数码管显示---------------------------------------*/
    void display()
    {        //数码管初始化
            P2=0x00;//P2=00000000
            P1=0xFF;//P1=11111111
      switch(ScanTime)
            {
              //----------数码管第1位--------------
                    case 1:
                            if(Num==0)
                            {
                                    P2=0x40;
                            }
                            else
                            {
                                    P2=SEG_Tab[Num/1000];
                            }
                                    DS1=0;
                    break;
              //-----------数码管第2位-------------
                    case 2:
                            if(Num==0)
                            {
                                    P2=0x40;
                            }
                            else
                            {
                                    P2=SEG_Tab[Num/100%10];
                            }
                            DS2=0;
                    break;
                    //-----------数码管第3位-------------
                    case 3:
                            if(Num==0)
                            {
                                    P2=0x40;
                            }
                            else
                            {
                                    P2=SEG_Tab[Num/10%10];
                            }
                              DS3=0;
                    break;
                    //-----------数码管第4位-------------
                    case 4:
                            if(Num==0)
                            {
                                    P2=0x40;
                            }
                            else
                            {
                                    P2=SEG_Tab[Num%10];
                            }
                            DS4=0;
                    break;
             //------------------default---------------
                    default: break;
            }
            //-----数码管循环------
            ScanTime++;
            if(ScanTime>4)
            {
                    ScanTime=1;//循环扫描
            }
    }
    /*-------------------------------------
                                按键扫描
    ---------------------------------------*/
    void keyscan()
    {
            if(K1==0)
            {
                    if(flag_KEY==1)//按键只响应1次
                    {
                            flag_KEY=0;
                            if(Num<999)
                            {
                                    Num++;
                            }
                    }
            }
            else if(K2==0)
            {
                    if(flag_KEY==1)//按键只响应1次
                    {
                            flag_KEY=0;
                            if(Num>0)
                            {
                                    Num--;
                            }
                    }
            }
                    else if(K3==0)
            {
                    if(flag_KEY==1)//按键只响应1次
                    {
                            flag_KEY=0;
                            if(Num>0)
                            {
                                    Num=0;
                            }
                    }
            }
      else//按键松开
      {
              flag_KEY=1;
      }
    }
    void delay_ms(unsigned int ms)// 延时子程序
    {
      unsigned int a,b;
      for(a=ms;a>0;a--)
      for(b=123;b>0;b--);
    }
    /*-------------------------------------
                                主函数
    ---------------------------------------*/
    void main()
    {
            P1M1 = 0x00; P1M0 = 0xFF; //P1口推挽模式
            P2M1 = 0x00; P2M0 = 0xFF; //P2口推挽模式
            while(1)
            {
                    display();
                    keyscan();
                    delay_ms(10);
                    if(Num>=100)
                    {
                            FMQ=0;
                    }
                    else
                    {
                            FMQ=1;
                    }
            }
    }
 楼主| 发表于 2024-9-16 15:09:09 来自手机浏览器 | 显示全部楼层
游客请登录后查看回复内容
回复 支持 反对

使用道具 举报

发表于 2024-9-16 16:52:35 | 显示全部楼层
游客请登录后查看回复内容
回复 支持 反对

使用道具 举报

发表于 2024-9-16 18:50:02 | 显示全部楼层
游客请登录后查看回复内容
回复 支持 反对

使用道具 举报

发表于 2024-9-16 21:51:27 | 显示全部楼层
游客请登录后查看回复内容
回复 支持 反对

使用道具 举报

 楼主| 发表于 2024-9-16 23:41:13 来自手机浏览器 | 显示全部楼层
游客请登录后查看回复内容
回复 支持 反对

使用道具 举报

发表于 2024-9-17 10:09:59 | 显示全部楼层
游客请登录后查看回复内容
回复 支持 反对

使用道具 举报

 楼主| 发表于 2024-9-17 15:09:42 来自手机浏览器 | 显示全部楼层
游客请登录后查看回复内容
回复 支持 反对

使用道具 举报

发表于 2024-9-17 15:33:59 | 显示全部楼层
游客请登录后查看回复内容
回复 支持 反对

使用道具 举报

 楼主| 发表于 2024-9-17 19:01:33 | 显示全部楼层
游客请登录后查看回复内容
回复 支持 反对

使用道具 举报

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

本版积分规则

APP|手机版|小黑屋|关于我们|联系我们|法律条款|技术知识分享平台

闽公网安备35020502000485号

闽ICP备2021002735号-2

GMT+8, 2025-12-24 02:46 , Processed in 0.187201 second(s), 11 queries , Gzip On, Redis On.

Powered by Discuz!

© 2006-2025 MyDigit.Net

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