//------------------------------------------------
效果应该是按下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为什么数码管只亮一下
|