新手上路 
 
	- 积分
 - 47
 
        - 金钱
 - 47 
 
       - 注册时间
 - 2016-5-23
 
      - 在线时间
 - 8 小时
 
 
 
 | 
 
5金钱 
 本帖最后由 mssjwb 于 2016-5-24 14:27 编辑  
 
/*能暂停,但是暂停后不能开始了,请前辈帮看一下,万分感谢*/ 
#include<reg51.h>       
#include<intrins.h> 
#define uint unsigned int                        // 宏定义 
#define uchar unsigned char 
#define dula P0         
#define wela P2 
sbit k4 = P3^6;                                 //  位定义 
sbit k5 = P3^7; 
uint aa,qian,bai,shi,ge,temp; 
bit stop = 1; 
uchar code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,  
                           0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71}; 
uchar code table1[]={0xbf,0x86,0xdb,0xcf,0xe6,0xed,0xfd,0x87,0xff,0xef}; 
void delay(uint z);                                    //子函数声明 
void display(uint qian,uint bai,uint shi,uint ge); 
void init(); 
void start_timer(); 
void stop_timer(); 
 
void main()                                          //主函数 
{         
        init();                                 //初始化           
        while(1)                              
        { 
                if(k4 == 0)               //判断是否按下K4  ,暂停和开始 
                { 
                        delay(10);        //消抖 
                        if(k4 == 0)       //再次判断是否按下K4按键 
                        { 
                                while(k4 == 0);   //直到按键判断松开 
                                { 
                                        if(stop) 
                                                start_timer();                  //打开定时器        
                                        else         
                                        stop_timer();                        //关闭定时器 
                                        stop = ~ stop;                         
                                } 
                        } 
                } 
                else        if(k5 == 0)     //按下K5清零 
                { 
                        delay(10);        //消抖 
                        if(k5 == 0)        //再次判断是否按下K5按键 
                        { 
                                while(k5 == 0); 
                                {         
                                        init(); 
                                        stop_timer(); 
                                        stop = 1; 
                                        qian=0; 
                                        bai=0; 
                                        shi=0; 
                                        ge=0; 
 
                                } 
                        } 
                } 
                if(aa==2)                          //数码管显示               
                { 
                        aa=0; 
                        temp++; 
                        if(temp==9999) 
                                { 
                                temp=0; 
                                } 
                                qian=temp/1000%10;    //数码管千位 
                                bai=temp/100%10;       //数码管百位 
                                shi=temp/10%10;        //数码管十位 
                                ge=temp%10;            //数码管个位 
                        } 
                display(qian,bai,shi,ge); 
        } 
} 
         
 
void delay(uint z)                //延时子程序 
        { 
        uint x,y; 
        for(x=z;x>0;x--) 
                for(y=114;y>0;y--); 
        } 
 
         
void display(uint qian,uint bai,uint shi,uint ge)       //数码管显示子程序  
{                 
                dula=table[qian]; 
                wela=0x18; 
                delay(1); 
                 
                dula=table1[bai]; 
                wela=0x28; 
                delay(1); 
                 
                dula=table[shi]; 
                wela=0x48; 
                delay(1); 
                 
                dula=table[ge];         
                wela=0x88;         
                delay(1); 
} 
 
void start_timer()         //开启定时器子程序                   
{ 
           ET0=1;                         
        EA=1;                         
        TR0=1;                         
} 
 
void stop_timer()         //关闭定时器子程序 
{ 
           ET0=0;                        
        EA=0;                         
        TR0=0;                         
} 
 
void init()            //初始化子程序                                     
{                 
                temp=0; 
                TMOD = 0x01; 
                TH0=(65536-4608)/256; 
                TL0=(65536-4608)%256; 
 
} 
void timer0() interrupt 1       //定时器延时子程序                                  
{ 
                TH0=(65536-4608)/256; 
                TL0=(65536-4608)%256; 
                aa++; 
} 
 
 |   
 
 
最佳答案
查看完整内容[请看2#楼] 
暂停、启动部分的程序没有问题,应该是6楼说的原因,实际是不能刷新显示了。
void timer0() interrupt 1       //定时器延时子程序                                 
{
                TH0=(65536-4608)/256;
                TL0=(65536-4608)%256;
                aa++;
}
其中的aa++应该修改为temp++,因为你需要显示的是temp。
uint aa,qian,bai,shi,ge,temp,temp1;
temp1=0xff00;
把if(aa==2) 修改成:
if (te ... 
 
 
 
 
 
 
 |