#include "reg51.h" //此文件中定义了单片机的一些特殊功能寄存器
#include "intrins.h"
typedef unsigned int u16; //对数据类型进行声明定义
typedef unsigned char u8;
u8 ledNum;
u8 led,s,f,m,aa,xf,xfg,xm,xmg,xs,xsg,b; //
//--定义使用的IO口--//
sbit SRCLK=P3^4;
sbit SR=P1^2;
sbit RCLK=P1^3; // st
sbit SER=P3^5;
sbit jf=P3^7;//加分
sbit js=P3^6;//加时
void delay(u8 z)//子程序
{
u8 x,y;
for(x=100;x>0;x--)
for(y=z;y>0;y--);
}
u8 ziz[]={0xbf,0x86,0xdb,0xcf,0xe6,0xed,0xfd,0x87,0xff,0xef}; //显示数组
u8 zi []={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f}; //
void Hc595SendByte(u8 dat)
{
u8 a;
// 发送8位数 sbit SRCLK=P3^1;
SRCLK = 1;
RCLK = 1; //sbit RCLsK=P3^3; st
for(a=0;a<8;a++) //
{
SER = dat >> 7; //从最高位开始发送
dat <<= 1;
SRCLK = 0; //发送时序
_nop_();
_nop_();
SRCLK = 1;
}
RCLK = 0;
_nop_();
_nop_();
RCLK = 1;
}
void Hc(u8 dat)
{
u8 a;
// 发送8位数 sbit SRCLK=P3^1;
SR = 1;
RCLK = 1; //sbit RCLsK=P3^3; st
for(a=0;a<8;a++) //
{
SER = dat >> 7; //从最高位开始发送
dat <<= 1;
SR = 0; //发送时序
_nop_();
_nop_();
SR = 1;
}
RCLK = 0;
_nop_();
_nop_();
RCLK = 1;
}void main()
{
TMOD =0x01;
TH0=(65536-5000)/250;
TL0=(65536-5000)%250;
EA=1;
ET0=1;
TR0=1;
// ledNum = 0x00;//全部显示几位数码管{0Xfe,0Xfd,0Xfb, 0Xef ,0Xdf,0Xbf};
// led = 0x3f;//显 {0x3f,0x03,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
while(1)
{
if(jf==0) //判断是否按下键盘
{ delay(200);
if(jf==0)
{f++;}
while (!jf);
}
if(js==0) //判断是否按下键盘
{ delay(200);
if(js==0)
{s++;}
while (!js);
}
Hc595SendByte(0xfe);
Hc(zi [xsg]);
delay(10);
Hc595SendByte(0xfd);
Hc(ziz [xs]);
delay(10);
Hc595SendByte(0xef); // (0xfb);
Hc(zi [xfg]);
delay(10);
Hc595SendByte(0xdf); // (0xef);
Hc(ziz [xf]);
delay(100);
Hc595SendByte(0xfb); // (0xdf);
Hc(zi [xmg]);
delay(10);
Hc595SendByte(0xbf); // (0xbf);
Hc(zi [xm]);
delay(10);
Hc595SendByte(0x00);
Hc(0x00);
delay(10);
xf=f%10;
xfg=f/10;
xs=s%10;
xsg=s/10;
xm=m%10;
xmg=m/10;
//led = _crol_(led, 1);
// ledNum = _crol_(ledNum, 1);
}
}
void timer0()interrupt 1
{
TH0=(65536-5000)/250;
TL0=(65536-5000)%250;
aa++;
if(aa==20) //
{m++;
if(m==60) //
{m=0;f++;
if(f==60) //
{f=0;s++;
if(s>=24)
{s=0;}}}
}
}
|