OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 5954|回复: 5

急,求助:看看程序问题;通过按键实现秒表开始,暂停,清零

[复制链接]

9

主题

40

帖子

0

精华

初级会员

Rank: 2

积分
89
金钱
89
注册时间
2017-5-4
在线时间
23 小时
发表于 2017-5-6 17:57:51 | 显示全部楼层 |阅读模式
8金钱
#include "reg52.h"       
typedef unsigned int u16;
typedef unsigned char u8;
sbit LSA=P2^2;
sbit LSB=P2^3;
sbit LSC=P2^4;
sbit k2=P3^0;
sbit k3=P3^2;
sbit k4=P3^3;
u8 code duanxuan[17]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,
                                        0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};

u8 s1,s2,s3,sum;
u8 MBXS[4];
void delay(u16 i)
{
        while(i--);       
}
void Timer0Init()
{
        TMOD|=0X01;
        TH0=0Xd8;
        TL0=0Xf0;       
        ET0=1;
        EA=1;
        TR0=1;
}

void DigDisplay()
{
        u8 i;
        for(i=0;i<4;i++)
        {
                switch(i)
                {
                        case(0)SA=0;LSB=0;LSC=0; break;
                        case(1)SA=1;LSB=0;LSC=0; break;
                        case(2)SA=0;LSB=1;LSC=0; break;
                        case(3)SA=1;LSB=1;LSC=0; break;       
                }
                P0=MBXS[i];
                delay(100);
                P0=0x00;
        }
}

void datapros()
{
        MBXS[0]=duanxuan[s1/10];       
        MBXS[1]=duanxuan[s2%10];
        MBXS[2]=duanxuan[s2/10];
        MBXS[3]=duanxuan[s3%10];
}

void key2()
{
        if(k2==0)
        {
                delay(1000);
                if(k2==0)
                {
                        Timer0Init();
      sum++;
                                        switch(sum)
                        {
                                case(2):TR0=0;
                                case(3):s1=0;s2=0;s3=0;
                                default:sum=0;
                        }
                }
                while(!k2);
        }       
}
void main()
{       
        while(1)
        {
                key2();
                datapros();
                DigDisplay();       
        }               
}

void Timer0() interrupt 1
{
        TH0=0Xd8;
        TL0=0Xf0;
        s1++;
        if(s1>=100)
        {
                s1=0;
                s2++;
                if(s2>=100)
                {
                        s2=0;
                        s3++;
                        if(s3>=10)
                        {
                                s3=0;
                        }
                }       
        }       
}

正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

16

主题

409

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1292
金钱
1292
注册时间
2014-12-20
在线时间
534 小时
发表于 2017-5-6 20:41:27 | 显示全部楼层
本帖最后由 BMN李 于 2017-5-6 20:44 编辑

void key2()
{
    if (k2 == 0)
    {
        delay(1000);
        if (k2 == 0)
        {
            //Timer0Init();
            sum++;
            switch (sum)
            {
            case (2)://暂停
                TR0 = 0;
                break;
            case (3)://清零
                s1 = 0;
                s2 = 0;
                s3 = 0;
                break;
            default://开始
                Timer0Init();
                sum = 0;
                break;
            }
        }
        while (!k2);
    }
}
回复

使用道具 举报

32

主题

883

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
3990
金钱
3990
注册时间
2015-11-14
在线时间
541 小时
发表于 2017-5-6 20:45:42 | 显示全部楼层
请问有什么问题
回复

使用道具 举报

9

主题

40

帖子

0

精华

初级会员

Rank: 2

积分
89
金钱
89
注册时间
2017-5-4
在线时间
23 小时
 楼主| 发表于 2017-5-6 22:28:07 | 显示全部楼层

程序不对,不能通过单键操控
回复

使用道具 举报

9

主题

40

帖子

0

精华

初级会员

Rank: 2

积分
89
金钱
89
注册时间
2017-5-4
在线时间
23 小时
 楼主| 发表于 2017-5-6 22:43:53 | 显示全部楼层
BMN李 发表于 2017-5-6 20:41
void key2()
{
    if (k2 == 0)

还是只有启动功能,没有暂停和清零
回复

使用道具 举报

16

主题

409

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1292
金钱
1292
注册时间
2014-12-20
在线时间
534 小时
发表于 2017-5-7 11:04:25 | 显示全部楼层
15116493876 发表于 2017-5-6 22:43
还是只有启动功能,没有暂停和清零

你是直接加的break?还是复制我改后的key2函数?我不仅仅是加了break,还改了点其他地方。标记break,是因为这个错误太低级了。
回复

使用道具 举报

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

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2024-11-23 22:31

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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