#include <REGX52.H>
void Timer1Init(void);
unsigned int fen=0;miao=0,opq=0;
void Delay(unsigned int xms);
void panduan(unsigned char n);
unsigned char code SMG_duanma[16]=
{0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90,0x88,0x80,0xC6,0xC0,0x86,0x8E}; 数组从0-F
void Init_HC138(unsigned char n) 38译码器,控制对应Yn的口
{
switch(n) // 4,5,6,7分别开启的是4个对应的锁存器
{
case 4 : P2=(P2 & 0x1F) | 0x80; break;
case 5 : P2=(P2 & 0x1F) | 0xA0; break;
case 6 : P2=(P2 & 0x1F) | 0xC0; break;
case 7 : P2=(P2 & 0x1F) | 0xE0; break;
}
}
void showSMG_(unsigned dat)
{
Init_HC138(6); //数码管的位置
P0=0x01;
Init_HC138(7); //数码管的内容
P0=dat;
}
void Delay(unsigned int xms)
{
unsigned char i,j;
while(xms--)
{
i = 12;
j = 169;
do
{
while (--j);
} while (--i);
}
}
int anjian()
{
if(P3_0==0)
{
Delay(10);
if(P3_0==0)
{
while(P3_0==0);
return 0;
}
}
if(P3_1==0)
{
Delay(10);
if(P3_1==0)
{
while(P3_1==0);
return 1;
}
}
if(P3_2==0)
{
Delay(10);
if(P3_2==0)
{
while(P3_2==0);
return 2;
}
}
if(P3_3==0)
{
Delay(10);
if(P3_3==0)
{
while(P3_3==0);
return 3;
}
}
}
void panduan(unsigned char n)
{
switch(n)
{
case 0:EA=1;break;
case 1:EA=0;break;
case 2:miao=0;EA=0;break;
case 3:miao+=1;EA=0;break;
}
}
void main()
{
Timer1Init();
while(1)
{
opq=anjian();
panduan(opq);
showSMG_(SMG_duanma[miao]);
Delay(100);
}
}
unsigned int men=0;
void Timer1Init_(void) interrupt 3
{
TR1=0;
TL1=0;
TH1=0x4C;
// TL1 = 0xCD; //设置定时初值
// TH1 = 0xD4; //设置定时初值
men++;
if(men>=20)
{
men=0;
miao++;
if(miao>9)
{
miao=0;
}
}
TR1=1;
}