[疑难问答]

单片机按键时如何不让数码管闪呀

[复制链接]
2861|11
手机看帖
扫描二维码
随时随地手机跟帖
laslison|  楼主 | 2010-4-15 16:32 | 显示全部楼层 |阅读模式
本帖最后由 laslison 于 2010-4-15 16:34 编辑

程序如下

数码管不好使,按下键以后老闪,还有就是按下启动后,他等一会才开始计时
我自学单片机已经不短了,还是菜鸟一个
高手们帮我看看
#include <reg52.h>
#define zheng unsigned int
#define xiao unsigned char
sbit duan=P1^2;
sbit w1=P1^3;
sbit w2=P1^4;
sbit w3=P1^5;
sbit w4=P1^6;
sbit w5=P1^7;
sbit zo=P1^0;//正转
sbit fo=P1^1;//反转
sbit gj=P2^0;//功能键
sbit jiaj=P2^4;//加键
sbit jianj=P2^2;//减键
sbit qd=P2^1;//启动键
sbit tz=P2^3;//停止键
xiao tt=0,sj,yqd=0,a=0,b=0,c=0,d=3,e=0,fd=0,fe=2,ff=0,g=0,i=0,j,k,l=0,m=0,n=0,zd=0,ze=2,zf=0,z,zt=0,f=0,jishu=0,jishu1=0;jishu2=0;
xiao code table[]={0x7E,0x30,0x6D,0x79,0x33,0x5B,0x5F,0x70,0x7F,0x7B,0x7e};//数码管0-9
xiao code qq[]={/*9,*/0x20,/*9,*/0x10,/*9,*/0x08,/*9,*/0x04,/*9,*/0x02,/*9,*/0x40};
void xh1(zheng z);//循环函数定义
void main()
{        
                P2=0x00;
                P3=0x00;
                gj=1;
                jiaj=1;
                jianj=1;
                qd=1;
                tz=1;
                w1=1;
                w2=1;
                w3=1;
                w4=1;
                w5=1;
                duan=0;
                zo=1;
                fo=1;
                k=1;
        TMOD=0x01;//设置定时器0为工作方式1
        TH0=(65536-50000)/256;
        TL0=(65536-50000)%256;
        EA=1;//开总中断
        ET0=1;//开定时器0中断
        TR0=1;//启动定时器0

while(1)
        {        
                if(yqd==1)
                {
                for(j=1;j<=k;j++)
                {
                if(yqd==1)        
                {
                sj=zd+ze*10+zf*100;
                                while(sj>0)
                                {
                                if(tt==20)
                                {
                                        tt=0;
                                        sj--;
                                        m++;
                                }
                                a=sj%100%10;
                                b=sj%100/10;
                                c=sj/100;
                                yqd=1;
                                zo=0;
                                fo=1;
                                if(tz==0)
                                {
                                sj=0;
                                }
                                if(m==6)
                                m=0;
                                duan=1;
                                P3=table[a];
                                duan=0;
                                w1=0;
                                xh1(1);        
                                w1=1;
                                duan=1;
                                P3=table;
                                duan=0;
                                w2=0;
                                xh1(1);
                                w2=1;
                                duan=1;
                                P3=table[c];
                                duan=0;
                                w3=0;
                                xh1(1);
                                w3=1;
                                duan=1;
                                P3=qq[m];
                                duan=0;
                                w4=0;
                                xh1(1);
                                w4=1;
                                duan=1;
                                P3=table[yqd];
                                duan=0;
                                w5=0;
                                xh1(1);
                                w5=1;
                                }
                                
                                
                                yqd=2;
                                zo=1;
                                fo=1;
                        
                                       
                   }
/*************************/
laslison|  楼主 | 2010-4-15 16:34 | 显示全部楼层
               if(yqd==2)        
                {
                                sj=d+e*10;
                                while(sj>0)
                                {
                                if(tt==20)
                                {
                                        tt=0;
                                        sj--;
                                        m++;
                                }
                                a=sj%100%10;
                                b=sj%100/10;
                                c=0;
                                yqd=2;
                                zo=1;
                                fo=1;
                                if(tz==0)
                                {
                                        sj=0;
                                }
                                if(m==6)
                                m=0;
                                duan=1;
                                P3=table[a];
                                duan=0;
                                w1=0;
                                xh1(1);        
                                w1=1;
                                duan=1;
                                P3=table;
                                duan=0;
                                w2=0;
                                xh1(1);
                                w2=1;
                                duan=1;
                                P3=table[c];
                                duan=0;
                                w3=0;
                                xh1(1);
                                w3=1;
                                duan=1;
                                P3=qq[m];
                                duan=0;
                                w4=0;
                                xh1(1);
                                w4=1;
                                duan=1;
                                P3=table[yqd];
                                duan=0;
                                w5=0;
                                xh1(1);
                                w5=1;
                                }
                                
                                
                                yqd=3;
                                zo=1;
                                fo=1;
                        
                                
                   }
/**************************/
                if(yqd==3)        
                {
                                sj=fd+fe*10+ff*100;
                                while(sj>0)
                                {
                                if(tt==20)
                                {
                                        tt=0;
                                        sj--;
                                        m++;
                                }
                                a=sj%100%10;
                                b=sj%100/10;
                                c=sj/100;
                                yqd=3;
                                zo=1;
                                fo=0;
                                if(tz==0)
                                {
                                        sj=0;
                                }
                                if(m==6)
                                m=0;
                                duan=1;
                                P3=table[a];
                                duan=0;
                                w1=0;
                                xh1(1);        
                                w1=1;
                                duan=1;
                                P3=table;
                                duan=0;
                                w2=0;
                                xh1(1);
                                w2=1;
                                duan=1;
                                P3=table[c];
                                duan=0;
                                w3=0;
                                xh1(1);
                                w3=1;
                                duan=1;
                                P3=qq[m];
                                duan=0;
                                w4=0;
                                xh1(1);
                                w4=1;
                                duan=1;
                                P3=table[yqd];
                                duan=0;
                                w5=0;
                                xh1(1);
                                w5=1;
                                }
                                
                                
                                yqd=4;
                                zo=1;
                                fo=1;
                                i=0;
                                
                   }
                                if(yqd==4)        
                {
                                sj=d+e*10;
                                while(sj>0)
                                {
                                if(tt==20)
                                {
                                        tt=0;
                                        sj--;
                                        m++;
                                }
                                a=sj%100%10;
                                b=sj%100/10;
                                c=sj/100;
                                yqd=4;
                                zo=1;
                                fo=1;
                                if(tz==0)
                                {
                                        sj=0;
                                }
                                if(m==6)
                                m=0;
                                duan=1;
                                P3=table[a];
                                duan=0;
                                w1=0;
                                xh1(1);        
                                w1=1;
                                duan=1;
                                P3=table;
                                duan=0;
                                w2=0;
                                xh1(1);
                                w2=1;
                                duan=1;
                                P3=table[c];
                                duan=0;
                                w3=0;
                                xh1(1);
                                w3=1;
                                duan=1;
                                P3=qq[m];
                                duan=0;
                                w4=0;
                                xh1(1);
                                w4=1;
                                duan=1;
                                P3=table[yqd];
                                duan=0;
                                w5=0;
                                xh1(1);
                                w5=1;
                                }
                                
                                
                                yqd=1;
                                zo=1;
                                fo=1;
                        
                                
                   }
                }
                yqd=0;
                jishu++;//计数
                if(jishu==10)
                {
                        jishu=0;
                        jishu1++;
                        if(jishu1==10)
                                {
                                        jishu1=0;
                                                jishu2++;
                                                        if(jishu2==10)
                                                                {
                                                                        
                                                                        jishu2=0;
                                                                        jishu1=0;
                                                                        jishu=0;

                                                                }
                                }
                }
                }
/**************************/

使用特权

评论回复
laslison|  楼主 | 2010-4-15 16:35 | 显示全部楼层
/****************************/
                if(gj!=1)//功能键按下
                {
                        xh1(50);
                        if(gj!=1)
                        
                        g++;
                        
                }
                        if(g>5)
                        g=0;
/*******************************/
                        if(qd==0)//启动
                        yqd=1;
/******************************/
                duan=1;
                P3=table[a];
                duan=0;
                w1=0;
                xh1(1);        
                w1=1;
                duan=1;
                P3=table;
                duan=0;
                w2=0;
                xh1(1);
                w2=1;
                duan=1;
                P3=table[c];
                duan=0;
                w3=0;
                xh1(1);
                w3=1;
                duan=1;
                P3=table[g];
                duan=0;
                w5=0;
                xh1(1);
                w5=1;
/****************************************/
                if(g==1)//正转时间
                {
                        a=zd;
                        b=ze;
                        c=zf;
                        if(jiaj==0)
                        {
                                xh1(50);
                                if(jiaj==0)
                                {
                                        zd++;
                                        if(zd==10)
                                        {
                                                zd=0;
                                                ze++;
                                                if(ze==10)
                                                {
                                                        ze=0;
                                                        zf++;
                                                        if(zf==10)
                                                        zd=0;
                                                        ze=0;
                                                        zf=0;
                                                }
                                        }
                                }
                        }
                        if(jianj==0)
                        {
                                xh1(50);
                                if(jianj==0)
                                {
                                        zd--;
                                        if(zd==-1)
                                        {
                                                zd=9;
                                                ze--;
                                       
                                                if(ze==-1)
                                                {
                                                        ze=9;
                                                        zf--;
                                                
                                                if(ze>0&&zf>0)
                                                        {
                                                                zd=9;
                                                                ze=9;
                                                                zf=9;
                                                        }        
                                                }
                                                
                                        }
                                }
                        }
                }
/******************************/
                if(g==3)//反转时间
                {
                        a=fd;
                        b=fe;
                        c=ff;
                        if(jiaj==0)
                        {
                                xh1(50);
                                if(jiaj==0)
                                        fd++;
                                if(fd==10)
                                {
                                                fd=0;
                                                fe++;
                                        if(fe==10)
                                        {
                                                fe=0;
                                                ff++;
                                                if(ff==9&&fe==9&&fd==9)
                                                {
                                                        ff=0;
                                                        fe=0;
                                                        fd=0;
                                                }
                                        }
                                }
                        }
                if(jianj==0)
                        {
                                xh1(50);
                                if(jianj==0)
                                {
                                        fd--;
                                        if(fd==-1)
                                        {
                                                fd=9;
                                                fe--;
                                       
                                                if(fe==-1)
                                                {
                                                        fe=9;
                                                        ff--;
                                                
                                                if(fe>0&&ff>0)
                                                        {
                                                                fd=9;
                                                                fe=9;
                                                                ff=9;
                                                        }        
                                                }
                                                
                                        }
                                }
                        }
                }
/**********************/
                if(g==2)//转换间歇时间
                {
                        a=d;
                        b=e;
                        c=0;
                        if(jiaj==0)
                        {        
                                xh1(50);
                                if(jiaj==0)
                                        d++;        
                                if(d==10)
                                {
                                        d=0;
                                        e++;
                                       
                                        if(d==9&&e==9)
                                        {
                                                d=0;
                                                e=0;
                                        }
                                }
                        }
                        if(jianj==0)
                        {
                                xh1(50);
                                if(jianj==0)
                                d--;
                                if(d==-1)
                                {
                                        d=9;
                                        e--;
                                
                                if(e==-1)
                                        {
                                                d=9;
                                                e=9;
                                        }
                                }
                        }
                }
        if(g==4)//反正转次数
        {
                a=k;
                b=0;
                c=0;

                if(jiaj==0)
                {
                        xh1(50);
                        if(jiaj==0)
                        {
                                k++;
                                if(k==10)
                                k=1;
                        }
                }
                if(jianj==0)
                {
                        xh1(50);
                        if(jianj==0)
                        {
                                k--;
                                if(k==0)
                                {
                                        k=9;
                                }
                        }
                }
        }
        if(g==5)
        {
                a=jishu;
                b=jishu1;
                c=jishu2;
                if(jiaj==0)
                {
                        jishu=0;
                        jishu1=0;
                        jishu2=0;
                }
        }
        if(g==0)
        {
                a=zd;
                b=ze;
                c=zf;
        }
/********************/               
        }
}
void xh1(zheng z)//循环函数
{
        zheng x,y;
        for(x=z;x>0;x--)
                for(y=300;y>0;y--);
}
void clock() interrupt 1 //中断服务程序
{
                TH0=(65536-50000)/256;
                TL0=(65536-50000)%256;
                tt++;
}

使用特权

评论回复
laslison|  楼主 | 2010-4-15 16:35 | 显示全部楼层
麻烦,一下子还发不上来

使用特权

评论回复
David_ming| | 2010-4-15 20:41 | 显示全部楼层
发关键的吧,这么多估计吓着了很多人,还有,延时部分可以采用我前两天发过的那个方法

使用特权

评论回复
wangwo| | 2010-4-15 22:40 | 显示全部楼层
检查看有没有消抖

使用特权

评论回复
happytiger2010| | 2010-4-16 17:28 | 显示全部楼层
这么长的程序~~
LZ还是把最关键的发上来吧

使用特权

评论回复
huamunv| | 2010-4-16 21:13 | 显示全部楼层
把显示加在中断里面试试

使用特权

评论回复
liliang9554| | 2010-4-16 22:40 | 显示全部楼层
这程序长的

使用特权

评论回复
yidou| | 2010-4-17 21:35 | 显示全部楼层
晕了,够长的

使用特权

评论回复
linhai2009| | 2010-4-17 21:37 | 显示全部楼层
真够长的,LZ辛苦了~~~

使用特权

评论回复
chuxh| | 2010-4-17 21:51 | 显示全部楼层
:dizzy:

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

95

主题

791

帖子

1

粉丝