/*数码管显示分钟秒钟;LED循环右移*/
/*用定时器设计一个秒表00-59;开始显示00按下key1加1,key2减1,key3清零key4启动暂停按钮*/
#include
#include
#define uchar unsigned char
#define uint unsigned int
sbit key1=P3^0;
sbit key2=P3^1;
sbit key3=P1^5;
sbit key4=P1^6;
sbit we0=P3^4;
sbit we1=P3^5;
sbit we2=P3^6;
sbit we3=P3^7;
sbit led0=P2^0;
sbit led1=P2^1;
sbit led2=P2^2;
sbit led3=P2^3;
sbit led4=P2^4;
sbit led5=P2^5;
sbit led6=P2^6;
sbit led7=P2^7;
uchar code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,
0x07f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};//0123456789ABCDEF
uchar m,n,temp;
char num ;
void delayms(uint x)
{
uint i,j;
for(i=x;i>0;i--)
for(j=240;j>0;j--);
}
void init()
{
temp=0x7f;
num=0;
TMOD=0x01; //定时器0工作方式1
TH0=(65536-50000)/256; //装入初值 50ms TL0=(65536-50000)%256;
TH1=(65536-50000)/256; //装入初值 50ms TL1=(65536-50000)%256;
EA=1; //开总中断
ET0=1; //开定时器0中断
ET1=1;
// TR0=1; //启动定时器0 中断
TR1=1;
}
void display()
{
uchar shi,ge;
shi=num/10;
ge=num%10;
we3=0;
P0=0xff;
P0=~table[shi];
delayms(1);
we3=1;
we2=0;
P0=0xff;
P0=~table[ge];
delayms(1);
we2=1;
}
keyscan()
{
if(key1==0)
{
delayms(5);
if(key1==0)
{
led3=0;
num++;
if(num==60)
num=0;
while(!key1);
}
led3=1;
}
if(key2==0)
{
delayms(5);
if(key2==0)
{
led2=0; num--;
if(num==-1) num=59; }
while(!key2); led2=1;
}
if(key3==0)
{
delayms(5);
if(key3==0)
{
led1=0; num=0; }
while(!key3); led1=1;
}
if(key4==0)
{
delayms(5); if(key4==0) {
led0=0;
TR0=~TR0; }
}
while(!key4); led0=1;
}
void main()
{
init();
while(1)
{
keyscan();
display();
led4=0;
}
}
void timer0() interrupt 1 {
TH0=(65536-50000)/256; TL0=(65536-50000)%256; n++;
if(n==20)
{
n=0;
num++;
if(num==60) {
num=0; }
}
} void timer1() interrupt 3 {
TH1=(65536-50000)/256; TL1=(65536-50000)%256; m++;
if(m==160) 有13位吗
{
m=0;
temp=_cror_(temp,1); P2=temp; }
} //装入初值 50ms //装入初值 50ms //为什么要达到定时器0的8倍才同步,是因为定时器1只
/*数码管显示分钟秒钟;LED循环右移*/
/*用定时器设计一个秒表00-59;开始显示00按下key1加1,key2减1,key3清零key4启动暂停按钮*/
#include
#include
#define uchar unsigned char
#define uint unsigned int
sbit key1=P3^0;
sbit key2=P3^1;
sbit key3=P1^5;
sbit key4=P1^6;
sbit we0=P3^4;
sbit we1=P3^5;
sbit we2=P3^6;
sbit we3=P3^7;
sbit led0=P2^0;
sbit led1=P2^1;
sbit led2=P2^2;
sbit led3=P2^3;
sbit led4=P2^4;
sbit led5=P2^5;
sbit led6=P2^6;
sbit led7=P2^7;
uchar code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,
0x07f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};//0123456789ABCDEF
uchar m,n,temp;
char num ;
void delayms(uint x)
{
uint i,j;
for(i=x;i>0;i--)
for(j=240;j>0;j--);
}
void init()
{
temp=0x7f;
num=0;
TMOD=0x01; //定时器0工作方式1
TH0=(65536-50000)/256; //装入初值 50ms TL0=(65536-50000)%256;
TH1=(65536-50000)/256; //装入初值 50ms TL1=(65536-50000)%256;
EA=1; //开总中断
ET0=1; //开定时器0中断
ET1=1;
// TR0=1; //启动定时器0 中断
TR1=1;
}
void display()
{
uchar shi,ge;
shi=num/10;
ge=num%10;
we3=0;
P0=0xff;
P0=~table[shi];
delayms(1);
we3=1;
we2=0;
P0=0xff;
P0=~table[ge];
delayms(1);
we2=1;
}
keyscan()
{
if(key1==0)
{
delayms(5);
if(key1==0)
{
led3=0;
num++;
if(num==60)
num=0;
while(!key1);
}
led3=1;
}
if(key2==0)
{
delayms(5);
if(key2==0)
{
led2=0; num--;
if(num==-1) num=59; }
while(!key2); led2=1;
}
if(key3==0)
{
delayms(5);
if(key3==0)
{
led1=0; num=0; }
while(!key3); led1=1;
}
if(key4==0)
{
delayms(5); if(key4==0) {
led0=0;
TR0=~TR0; }
}
while(!key4); led0=1;
}
void main()
{
init();
while(1)
{
keyscan();
display();
led4=0;
}
}
void timer0() interrupt 1 {
TH0=(65536-50000)/256; TL0=(65536-50000)%256; n++;
if(n==20)
{
n=0;
num++;
if(num==60) {
num=0; }
}
} void timer1() interrupt 3 {
TH1=(65536-50000)/256; TL1=(65536-50000)%256; m++;
if(m==160) 有13位吗
{
m=0;
temp=_cror_(temp,1); P2=temp; }
} //装入初值 50ms //装入初值 50ms //为什么要达到定时器0的8倍才同步,是因为定时器1只