在线咨询
eetop公众号 创芯大讲堂 创芯人才网
切换到宽版

EETOP 创芯网论坛 (原名:电子顶级开发网)

手机号码,快捷登录

手机号码,快捷登录

找回密码

  登录   注册  

快捷导航
搜帖子
芯片精品文章合集(500篇!) 创芯人才网--重磅上线啦!
查看: 2844|回复: 7

[求助] 高手帮忙修改个单片机C程序

[复制链接]
发表于 2010-8-2 11:30:40 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?注册

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;
           
          }  
      
       }
   
   }

}
发表于 2010-8-2 16:42:32 | 显示全部楼层
LZ把这两句
Sec=sec;
Min=min;
改成
Sec[i]=sec;
Min[i]=min;
应该是你保存数据一直都在同一个位置,后来的把前面的覆盖掉了,当然只有一个数据。
 楼主| 发表于 2010-8-2 20:42:30 | 显示全部楼层
2# lijunping


呵呵,那是修改的时候漏掉的,我原本是这样的,恩,不过这个问题现在已经解决了、、、呵呵
发表于 2010-8-4 11:54:10 | 显示全部楼层
请教LZ  我刚学单片机  不是很明白
定时器初始化时  
首先TMOD=0x01;
然后TMOD=0x10;
这样是不是把定时器0给关了(因为最后TMOD=0x10;了啊)
发表于 2010-8-5 08:38:14 | 显示全部楼层
不好意思 问了个低级问题 现在明白了 最后TMOD=0x11;
发表于 2010-11-14 18:13:24 | 显示全部楼层
高手,多指点!
发表于 2010-12-1 14:48:46 | 显示全部楼层
记下~~有空再看在解决
发表于 2014-8-31 09:23:21 | 显示全部楼层
谢谢 !!!!!!!!
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

站长推荐 上一条 /1 下一条

小黑屋| 手机版| 关于我们| 联系我们| 在线咨询| 隐私声明| EETOP 创芯网
( 京ICP备:10050787号 京公网安备:11010502037710 )

GMT+8, 2024-11-5 21:53 , Processed in 0.049358 second(s), 9 queries , Gzip On, Redis On.

eetop公众号 创芯大讲堂 创芯人才网
快速回复 返回顶部 返回列表