113 lines
1.6 KiB
C
113 lines
1.6 KiB
C
|
#include<reg52.h>
|
|||
|
typedef unsigned int u16;
|
|||
|
typedef unsigned char u8;
|
|||
|
|
|||
|
//定义数码管的端口
|
|||
|
sbit D1 = P2^0;
|
|||
|
sbit D2 = P2^1;
|
|||
|
sbit D3 = P2^2;
|
|||
|
sbit D4 = P2^3;
|
|||
|
//定义按键的端口
|
|||
|
sbit K3 = P3^2;
|
|||
|
sbit K2 = P3^3;
|
|||
|
//0~9的段码
|
|||
|
u8 code table[]={0xC0, 0xF9, 0xA4, 0xB0, 0x99, 0x92, 0x82, 0xF8, 0x80, 0x90};
|
|||
|
u8 second;
|
|||
|
u8 key=0;
|
|||
|
|
|||
|
// 1ms*1000=1s
|
|||
|
void delay1ms(u16 t)
|
|||
|
{
|
|||
|
u16 i,j;
|
|||
|
for(i=0;i<t;i++)
|
|||
|
{
|
|||
|
for(j=0;j<120;j++);
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
void ExitInit() //定时器初始化
|
|||
|
{
|
|||
|
TMOD =0X01; //定时器0,工作方式1,16位定时器
|
|||
|
ET0=1;
|
|||
|
EA=1;
|
|||
|
second=0;
|
|||
|
TH0=0xFC;
|
|||
|
TL0=0x18;
|
|||
|
P3=0xff;
|
|||
|
P0=0x00;
|
|||
|
}
|
|||
|
|
|||
|
void Display(u8 s) //数码管显示
|
|||
|
{
|
|||
|
D1=0;D2=1;
|
|||
|
P0=table[s/10];
|
|||
|
delay1ms(5);
|
|||
|
D1=1;D2=0;
|
|||
|
P0=table[s%10];
|
|||
|
delay1ms(5);
|
|||
|
}
|
|||
|
|
|||
|
|
|||
|
void Keyscan()
|
|||
|
{
|
|||
|
if (TR0 == 0) //定时器0关闭
|
|||
|
{
|
|||
|
if(K3==0)
|
|||
|
{
|
|||
|
delay1ms(10);
|
|||
|
if(K3==0)
|
|||
|
{
|
|||
|
TR0=1;
|
|||
|
}
|
|||
|
}
|
|||
|
if (K2==0)
|
|||
|
{
|
|||
|
second = 0;
|
|||
|
}
|
|||
|
|
|||
|
}
|
|||
|
delay1ms(100);
|
|||
|
if (TR0 == 1)
|
|||
|
{
|
|||
|
if(K3==0)
|
|||
|
{
|
|||
|
delay1ms(10);
|
|||
|
if(K3==0)
|
|||
|
{
|
|||
|
TR0=0;
|
|||
|
}
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
}
|
|||
|
|
|||
|
void main()
|
|||
|
{
|
|||
|
ExitInit(); //定时器初始化
|
|||
|
while(1)
|
|||
|
{
|
|||
|
Display(second); //显示秒数
|
|||
|
Keyscan(); //按键扫描
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
void Timer0() interrupt 1 //定时器0中断函数
|
|||
|
{
|
|||
|
static u16 timer;
|
|||
|
TH0=0XFC;
|
|||
|
TL0=0X18;
|
|||
|
timer++;
|
|||
|
//1ms*1000=1s
|
|||
|
if(timer==1000)
|
|||
|
{
|
|||
|
timer=0;
|
|||
|
second++;
|
|||
|
// 当second=100时,second=0,即从0开始计数
|
|||
|
if(second==100)
|
|||
|
second=0;
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
// Path: C\按键计时.c
|
|||
|
|