|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?注册
x
程序功能:
按key1开始记时
按key2记录一个数据,存储到数组中,存储8组
按key3和key4翻看存储在数组的数据
问题就是这个程序存储到数组中的都是最后存储的那个数,也就是说只能记录下最后按下键时的那个数
程序如下,大家帮我看看
#include<reg52.h>
code unsigned char tab[]= {0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
//共阴数码管 0-9
code unsigned char tab1[]={0xBF,0x86,0xDB,0xCF,0xE6,0xED,0xFD,0x87,0xFF,0xEF} ;//共阴数码管0-9带小数点
static unsigned char ms,sec,min;
static unsigned char sec1,min1,sec2,min2,sec3,min3,sec4,min4,sec5,min5,sec6,min6,sec7,min7,sec8,min8;
static unsigned char Sec[8],Min[8];
static
char i=0,j=0,ID;
sbit KEY1=P3^0; //开始、暂停
sbit KEY2=P3^1; //记录
sbit KEY3=P3^2; //上翻
sbit KEY4=P3^3; //下翻
void delay(unsigned char cnt)
{
while(--cnt)
;
}
main()//主函数
{
TMOD |=0x01;//定时器0 10ms in 12M crystal 用于计时
TH0=0xd8;
TL0=0xf0;
ET0=1;
TR0=0;
TMOD |=0x10; //定时器1用于动态扫描
TH1=0xF8;
TL1=0xf0;
ET1=1;
TR1=1;
EA =1;
//display();
while(1)//主循环
{
/////////////////////////////////////////////////////////////////
if(!KEY1) //按键1去抖以及动作
{
delay(10000);
if(!KEY1)
{
TR0=!TR0; //正常时间 小时 加1
}
}
////////////////////////////////////////////////////////////////
if(!KEY2) //按键2去抖以及动作
{
delay(10000);
if(!KEY2)
{
Sec=sec;
Min=min;
delay(10);
i++;
if(i==8)
i=0;
}
}
////////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////
if(!KEY3) //按键去抖以及动作
{
delay(10000);
if(!KEY3)
{
TR0=0;
sec=Sec[j];
min=Min[j];
j++;
if(j==8)
j=0;
}
}
/////////////////////////////////////////////////////////////////
if(!KEY4) //按键去抖以及动作
{
delay(10000);
if(!KEY4)
{
if(j==0)
j=7;
TR0=0;
sec=Sec[j];
min=Min[j];
j--;
}
}
}
}
////////////////////////////////////////////////////////////////
/********************************/
/* 定时中断1 */
/********************************/
void time1_isr(void) interrupt 3
using
0//定时器1用来动态扫描
{
static unsigned char num;
TH1=0xF8;//重入初值
TL1=0xf0;
switch (num){
case
02=00=tab[min/10];break; //分别调用缓冲区的值进行扫描
case
12=10=tab1[min%10];break;
case
22=20=tab[sec/10];break;
case
3:P2=3;P0=tab[sec%10];break;
default:break;
}
num++; //扫描8次,使用8个数码管
if(num==4)
num=0;
}
//////////////////////////////////////////////////////////////////
/********************************/
/* 定时中断0 */
/********************************/
void tim(void) interrupt 1
using
1
{
TH0=0xd8;//重新赋值
TL0=0xf0;
ms++;
if (ms==100)
{
ms=0;
sec++;//秒加1
if(sec==60)
{
sec=0;
min++; //分加1
if(min==60)
{
min=0;
}
}
}
} |
|