高级会员 
  
	- 积分
 - 680
 
        - 金钱
 - 680 
 
       - 注册时间
 - 2019-5-18
 
      - 在线时间
 - 101 小时
 
 
 
 | 
 
 
发表于 2019-8-4 20:18:25
|
显示全部楼层
 
 
 
#include "reg52.h"                          
 
typedef unsigned int u16;           
typedef unsigned char u8; 
 
sbit LSA=P2^2; 
sbit LSB=P2^3; 
sbit LSC=P2^4; 
sbit K1=P3^0; 
 
u8 code smgduan[17]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07, 
                                        0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71}; 
 
u8 ssec,sec,min; 
u8 DisplayData[8]; 
 
void delay(u16 i) 
{ 
        while(i--);         
} 
 
 
void Timer0Init() 
{ 
        TMOD|=0X01; 
        TH0=0Xd8; 
        TL0=0Xf0;         
        ET0=1; 
        EA=1; 
        TR0=1;                         
} 
        void Int0Configuration() 
{ 
        IT0=1; 
        EX0=1; 
        EA=1; 
} 
 
 
 
 
 
void DigDisplay() 
{ 
        u8 i; 
        for(i=0;i<8;i++) 
        { 
                switch(i)         
                { 
                        case(0): 
                                LSA=0;LSB=0;LSC=0; break; 
                        case(1): 
                                LSA=1;LSB=0;LSC=0; break; 
                        case(2): 
                                LSA=0;LSB=1;LSC=0; break; 
                        case(3): 
                                LSA=1;LSB=1;LSC=0; break; 
                        case(4): 
                                LSA=0;LSB=0;LSC=1; break; 
                        case(5): 
                                LSA=1;LSB=0;LSC=1; break; 
                        case(6): 
                                LSA=0;LSB=1;LSC=1; break; 
                        case(7): 
                                LSA=1;LSB=1;LSC=1; break;         
                } 
                P0=DisplayData[i]; 
                delay(100);          
                P0=0x00; 
        } 
} 
 
void datapros() 
{ 
        DisplayData[0]=smgduan[ssec%10]; 
        DisplayData[1]=smgduan[ssec/10]; 
        DisplayData[2]=0x40;         
        DisplayData[3]=smgduan[sec%10]; 
        DisplayData[4]=smgduan[sec/10]; 
        DisplayData[5]=0x40; 
        DisplayData[6]=smgduan[min%10]; 
        DisplayData[7]=smgduan[min/10]; 
} 
 
void main() 
{         
        Timer0Init();   
    Int0Configuration(); 
        while(1) 
        { 
                                 
                  if(K1==0) 
                { 
                                        delay(1000); 
                                        if(K1 == 0) 
                                                TR0=~TR0; 
                } 
 
                datapros(); 
                DigDisplay();         
        }  
                 
} 
 
 
void Timer0() interrupt 1 
{ 
        TH0=0Xd8;         
        TL0=0Xf0; 
        ssec++; 
        if(ssec>=100)   
        { 
                ssec=0; 
                sec++; 
                if(sec>=60) 
                { 
                        sec=0; 
                        min++; 
                        if(min>=60) 
                        { 
                                min=0; 
                        } 
                }         
        }         
} 
void Int0() interrupt 0                  
{ 
           
} 
 
 
我发现一个现象:当把按键判断放到主函数中时,你定义的按键是P3^0(串口的TXD)按下不管用, 
当你这时按P3^1(串口RXD)时,发现定时器竟然停了。现象就是这个现象,原因就不知道了。 |   
 
 
 
 |