#include<STC15.H> //包含单片机寄存器的头文件
#include<intrins.h>
#define uint unsigned int
#define uchar unsigned char
//74ls164IO口定义
sbit CLK=P3^2;
sbit DAT=P3^3;
sbit key=P3^4;
bit key_1=0,key_2=0;
uint num,llxs,temp, Cnt_ms;
uchar code tab[]={ 0xBB, 0x28, 0x73, 0x79, 0xE8, 0xD9, 0xDB, 0x38, 0xFB, 0xF9,0xef,0x7f,0xdf,0xef,0Xbf,0xff,0X00, };
uchar G,S,bai,Q;
void dispbyte(uchar byte);
void delay(uint z);
void count();
void delay(uint z)
{
uint x,y;
for(x=0;x<z;x++)
for(y=0;y<100;y++);
}
void dispbyte(uchar byte)
{
uchar num2,i;
num2=tab[byte];//取出段码
for(i=0;i<8;i++) //循环八次送至led数码管
{
CLK=0;
if(num2&0x01) DAT=1;//判断最高位,并取出最高位
else DAT=0;//
CLK=1; //上升沿有效
num2>>=1; //左移一位(每次移动一位,共8次)
}
}
void count() //把每一位数字都单独存到一个变量中
{
G = num%10;
S = num/10%10;
bai = num/100%10;
Q = num/1000%10;
}
void Timer0Init(void) //4毫秒@12.000MHz
{
AUXR &= 0x7F; //定时器时钟12T模式
TMOD &= 0xF0; //设置定时器模式
TL0 = 0x60; //设置定时初始值
TH0 = 0xF0; //设置定时初始值
TF0 = 0; //清除TF0标志
TR0 = 1; //定时器0开始计时
}
main()
{
Timer0Init();
EA=1;
ET0=1;
num=0;
Cnt_ms=0;
while(1)
{
count();
}
}
/******定时器0中断服务程序******/
void timer0() interrupt 1
{
Cnt_ms++;
llxs++;
if(Cnt_ms>=250)
{ Cnt_ms=0;}
if(llxs>4)
{llxs=0;}
switch(llxs)
{
case 0:
dispbyte(10);
dispbyte(G);
break;
case 1:
dispbyte(12);
dispbyte(S);
break;
case 2:
dispbyte(11);
dispbyte(bai);
break;
case 3:
dispbyte(14);
dispbyte(Q);
break;
}
}
|