//------------------------------------------------
效果應該是按下k2,開始倒計時,按k3加5
但是按k2為什么數碼管只亮一下
/********************************/
/* 簡單的定時器 */
/********************************/
#include <reg52.h>
//定義IO
sbit smg1 = P0^0;
sbit smg2 = P0^1;
sbit smg3 = P0^2;
sbit smg4 = P0^3;
sbit k1 = P3^3;
sbit k2 = P3^6;
sbit k3 = P3^7;
//宏定義
#define SMG_table P1
//定義全局變量
unsigned int djs_n = 5, flag2 = 0, flag1 = 0, flag3 = 0, i = 1,
k2_count = 0, key2_flag = 0;
unsigned char table[ ]={0xc0 , 0xf9 , 0xa4 , 0xb0 , 0x99 , 0x92 ,0x82 , 0xf8 , 0x80 , 0x90 , 0x88 , 0x83 , 0xc6 , 0xa1 , 0x86 , 0x8e};
//函數申明
void init_time0();
void delay(int t); //4
void djs_display(); //5
void key_djs(); //6
//main-----------------------------------------------------
void main()
{
init_time0();
while (1)
{
if (k2 == 0)
{
k2_count++;
if (k2_count == 10)
{
key2_flag = 1;
}
}
if (k2 == 1)
{
if (key2_flag == 1)
{
key2_flag = 0;
flag1 = 1;
}
}
}
}
//
//開機數碼管計時器--------------------------------------
//數碼管顯示
//定時器中斷初始化
void init_time0()//3
{
TMOD =0x01;//定時器0工作方式1
TH0 = 0xf8;
TL0 = 0x30;
ET0=1; //定時器中斷允許位
EA = 1;
TR0=1;
}
//延時函數/
void delay(int t)//4
{
int i;
while(t--)
{
for (i = 0; i < 110; i++);
}
}
void key_djs()//6
{
if (k3 == 0)
{
delay(10);
if (k3 == 1)
{
djs_n = djs_n + 5;
}
}
}
//定時器中斷
void timer0()interrupt 1
{
static timer_count2 = 0;
if (flag1 == 1)
{
P2 = 0;
TH0 = 0xf8;
TL0 = 0x30;
timer_count2++;
if (timer_count2 == 500)
{
timer_count2 = 0;
djs_n--;
}
switch (i)
{
case 1:
smg4=1;SMG_table = table[djs_n / 1000];smg1 = 0;i++;break;
case 2:
smg1 = 1;SMG_table = table[djs_n / 100 % 10];smg2= 0;i++; break;
case 3:
smg2=1;SMG_table = table[djs_n / 10 % 10];smg3=0;i++;break;
case 4:
smg3=1;SMG_table = table[djs_n % 10];smg4=0;i=1;break;
}
if (djs_n == -1)
{
djs_n = 5;
}
}
}
//------------------------------------------------
效果應該是按下k2,開始倒計時,按k3加5
但是按k2為什么數碼管只亮一下
|