找回密码
 立即注册

QQ登录

只需一步,快速开始

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

单片机秒表不能清零问题

[复制链接]
跳转到指定楼层
楼主
ID:138144 发表于 2017-4-7 11:30 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
#include<reg52.h>
#include<intrins.h>

#define uchar unsigned char
#define uint unsigned int
#define dula P1
#define wela P2

sbit key=P3^7;
sbit key1=P3^4;
sbit key2=P3^5;
sbit key3=P3^6;

uchar code table[]={
0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71,0};
uchar t0,t1,bai,shi,ge;
uint num;

void inter();
void display(uchar aa,uchar bb,uchar cc);
void Dispaley10ms(uint ms);

void main()
{
        inter();
        while(1)
        {
                display(bai,shi,ge);
                if(key2==0)   //开始计数
                {
                        Dispaley10ms(1);
                        if(key2==0)
                                TR0=1;
                        while(!key2)
                                display(bai,shi,ge);                                                                                
                }
                if(key1==0)//计数暂停
                {
                        Dispaley10ms(1);
                        if(key1==0)
                                TR0=0;
                        while(!key1)
                                display(bai,shi,ge);                                       
                }
                if(key3==0)//计数清零
                {
                        Dispaley10ms(1);
                        if(key3==0)
                        {
                                num=0;
                                TR0=0;                        
                        }
                        while(!key3)
                                display(bai,shi,ge);                                
                }
        }
}

void inter()
{
        TMOD=0x01;
        TH0=(65535-10000)/256;
        TL0=(65535-10000)%256;
        EA=1;
        ET0=1;
}

void timer0() interrupt 1
{
        TH0=(65535-10000)/256;
        TL0=(65535-10000)%256;
                num++;
                bai=num/100;
                shi=num%100/10;
                ge=num%10;
                if(num==1000)
                        num=0;
}

void display(uchar aa,uchar bb,uchar cc)
{
        dula=table[aa];
        wela=0xfe;
        Dispaley10ms(1);

        dula=table[bb];
        wela=0xfd;
        Dispaley10ms(1);

        dula=table[cc];
        wela=0xfb;
        Dispaley10ms(1);
}


void Dispaley10ms(uint ms)
{
        uchar a,b;
        for(;ms>0;ms--)
        {
                for(a=38;a>0;a--)
                        for(b=130;b>0;b--);
        }
}


计数没法清零!大神们请赐教!谢谢!

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:82765 发表于 2017-4-7 12:36 | 只看该作者
提示: 作者被禁止或删除 内容自动屏蔽
回复

使用道具 举报

板凳
ID:82765 发表于 2017-4-7 12:37 | 只看该作者
提示: 作者被禁止或删除 内容自动屏蔽
回复

使用道具 举报

地板
ID:138144 发表于 2017-4-7 13:38 | 只看该作者
cjjcjj1 发表于 2017-4-7 12:37
bai=num/100;
                shi=num%100/10;
                ge=num%10;

不行兄弟,松手之后原值
回复

使用道具 举报

5#
ID:82765 发表于 2017-4-7 13:40 | 只看该作者
提示: 作者被禁止或删除 内容自动屏蔽
回复

使用道具 举报

6#
ID:138144 发表于 2017-4-7 13:40 | 只看该作者
cjjcjj1 发表于 2017-4-7 12:36
代码给你改了一下,你试试吧
#include
#include

兄弟我明白了,谢谢,兄弟!
显示数码管函数赋值num/100,num%100/10,num%10;
谢谢兄弟提醒!
回复

使用道具 举报

7#
ID:138144 发表于 2017-4-7 13:42 | 只看该作者
cjjcjj1 发表于 2017-4-7 13:40
你是仿真还是用的实物?

可以了,兄弟!显示数码管赋值,就不会有原值了
回复

使用道具 举报

8#
ID:138144 发表于 2017-4-7 13:43 | 只看该作者
cjjcjj1 发表于 2017-4-7 13:40
你是仿真还是用的实物?

可以了,兄弟!显示数码管赋值,就不会有原值了
回复

使用道具 举报

9#
ID:82765 发表于 2017-4-7 13:46 | 只看该作者
提示: 作者被禁止或删除 内容自动屏蔽
回复

使用道具 举报

10#
ID:138144 发表于 2017-4-7 13:46 | 只看该作者

谢谢,兄弟提醒!
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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