• 已解决 73482 个问题
  • 已帮助 5993 位优秀工程师

STC12C5A60S2单片机的EEPROM程序怎么写

huihui163 2016-09-22 浏览量:1139
现在不知道数码管每变化一次就保存到eeprom中,还是断电时保存,写程序时怎么把两个程序结合起来,显示的数据放到e2prom的地址里,上电时再把这个数据从e2prom地址里读取出来并通过数码管显示。谁有类似的源代码最好有注解,非常感谢
                        
2 0 收起

我来回答

上传资料:
选择文件 文件大小不超过15M(格式支持:doc、ppt、xls、pdf、zip、rar、txt)
其他答案 数量:11
  • 本帖最后由 汉云 于 2016-10-5 18:51 编辑


    • 发布于2016-09-22
    • 举报
    • 评论 0
    • 1
    • 0

  • 程序不知道怎么回事贴不上去,显示错误代码
    • 发布于2016-09-22
    • 举报
    • 评论 0
    • 0
    • 0

  • 是内部EEPROM还是外部的EEPROM芯片?
    • 发布于2016-09-22
    • 举报
    • 评论 0
    • 0
    • 0

  • #include 
    #define uchar unsigned char
    #define uint unsigned int
    uchar code xianshi[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8, 
            0x80,0x90};//共阳数码管0到9显示BCD码
    uchar second=0;//秒计数定义并初始化变量
    uchar min=0;//分计数
    uchar hour=0;//时计数
    uchar m=0;//中断计数
    sbit a1=P0^0;// 秒按键
    sbit a2=P0^1;//分按键
    sbit a3=P0^2;//时按键
    void delay(uchar k);//延时函数
    void timechuli();//时间处理函数
    void anjian();//按键扫描函数
    void timexianshi();//时间显示函数
    void delay(uchar k)
    {
            uchar i;
            while((k--)!=0)
            {
            for(i=0;i<100;i++);
            
            }
    }
    void timechuli()
    {
            if(second==60)
            {
                    second=0;
                    min++;
                    if(min==60)
                    {
                            min=0;
                            hour++;
                            if(hour==24)
                            {hour=0;}
                            
                    }
            }
    }
    void anjian()
    {
            if(a1==0)
            {
                    delay(30);//按键消抖
                    if(a1==0)
                    {
                    second++;
            }
    }
            if(a2==0)
            {
                    delay(30);
                    if(a2==0)
                    {
                            min++;
            }
    }
            if(a3==0)
            {
                    delay(30);
                    if(a3==0)
                    {
                            hour++;
                    }
            }
    }
            void timexianshi()                                
            {
                    P2=0x01;
                    P1=xianshi[second%10];//显示秒的个位
                    delay(5);
                    P2=0x02;
                    P1=xianshi[second/10];//显示秒的十位
                    delay(5);
                    P2=0x08;
                    P1=(xianshi[min%10])|0x80;//显示分的个位
                    delay(5);
                    P2=0x10;
                    P1=xianshi[min/10];//显示分的十位
                    delay(5);
                    P2=0x40;
                    P1=(xianshi[hour%10])|0x80;//显示时的个位
                    delay(5);
                    P2=0x80;
                    P1=xianshi[hour/10];//显示时的个位
                    delay(5);
            }
            void timer0() interrupt 1
            {
                    TH0=(65536-45872)/256;         //放入初值,11.0592M,50ms
              TL0=(65536-45872)%256;
                    m++;
                    if(m==20)
                    {
                            m=0;
                            second++;
                    }
            }
            void main()
            {
                    P0=0xff;
            AUXR &= 0x7F;                //定时器时钟12T模式
            TMOD &= 0xF0;                //设置定时器模式
            TMOD |= 0x01;                //设置定时器模式
            TH0=(65536-45872)/256;         //放入初值,11.0592M,50ms
            TL0=(65536-45872)%256;
            TF0 = 0;                //清除TF0标志
            TR0 = 1;                //定时器0开始计时
            EA=1;                //开总中断
            EX0=1;
            ET0=1;                        //开定时器0中断
            
                            while(1)
                            {
                            timexianshi();//时间显示函数
                            anjian();//按键扫描函数
                            timechuli();//时间处理函数
                            
                            }
                    }
    • 发布于2016-09-22
    • 举报
    • 评论 0
    • 0
    • 0

  • 上面是电子时钟的程序,我要保存时.分的数据,该怎么去保存并读取啊,感觉自己太笨了
    • 发布于2016-09-22
    • 举报
    • 评论 0
    • 0
    • 0

  • huihui163 发表于 2016-9-22 18:20
    上面是电子时钟的程序,我要保存时.分的数据,该怎么去保存并读取啊,感觉自己太笨了 ...

    有时间帮你写下,但是手上没有硬件,只能等你自己去验证了……
    • 发布于2016-09-23
    • 举报
    • 评论 0
    • 0
    • 0

  • 版主讲的很详细,你用的是每隔一段时间写一次eeprom,为了断电保存,这个时间不能太长,这样写eeprom次数太多了吧,有没其他方式
    • 发布于2016-09-23
    • 举报
    • 评论 0
    • 0
    • 0

  • huihui163 发表于 2016-9-23 16:46
    版主讲的很详细,你用的是每隔一段时间写一次eeprom,为了断电保存,这个时间不能太长,这样写eeprom次数太 ...

    其他方式就要在硬件上做文章了,正在实现掉电的时候才保存,也就是在单片机的电源处要接一个大电容,看网上说的好像要2000UF左右吧,具体要试了才知道,然后用单片机的低压检测功能,这样才能实现正在掉电的时候才保存数据。具体不是三言两语能说清楚的,呵呵……有点复杂……
    • 发布于2016-09-23
    • 举报
    • 评论 0
    • 0
    • 0

相关问题

问题达人换一批

STC12C5A60S2单片机的EEPROM程序怎么写