找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 1711|回復(fù): 1
打印 上一主題 下一主題
收起左側(cè)

用pic想做一個掉電保存,低于4V保存數(shù)據(jù),要么就死在里面,要么讀出來的數(shù)據(jù)亂七八...

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:261626 發(fā)表于 2017-12-15 15:54 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
#include"pic.h"
__CONFIG(0xe824);
void Init();
void dis(void);
void display();
void ep_write();
void delay(unsigned int ms);
unsigned int flag_254us,value;
unsigned int n;
const unsigned char number[10] ={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f}; //0~9共陽數(shù)碼管段碼表
unsigned char led7;
unsigned char led8;
unsigned char ge,shi;

void delay(unsigned int ms)
{
    unsigned int i,j;
    for(i=0;i<ms;i++)
    for(j=0;j<120;j++);   
}

void Init()
{
    TRISC = 0x00;
    PORTC = 0x7f;//段選口

    TRISA5 = 1;
    ANSEL = 0x00;   

    TRISB = 0x01;
    ANSELH = 0x00;//位選口

    //AD轉(zhuǎn)換
    TRISA1 = 1;
    ANS1 = 1;
    ADCON0 = 0x44;//AN1  f8
    ADCON1 = 0x80;//右對齊,VDD VSS
    ADIE = 0;//中斷關(guān)


    T2CON = 0x01;//16分頻
    PR2 = 250;
    TMR2 = 0;//1*16*250*500ns =254us
    TMR2IE = 1;
    TMR2IF = 0;
    PEIE = 1;//外設(shè)中斷
    TMR2ON = 1;
}
unsigned int AD_convert()
{
    value = 0;
    ADON = 1;
    GODONE = 1;
    while(!GODONE);
    NOP();
    NOP();
    value = ADRESH;
    value = value << 8;
    value += ADRESL;
    return value;
}
void interrupt t0()
{
    if(TMR2IF)
    {
        TMR2IF = 0;
        flag_254us++;
        if(flag_254us>1000)
        {
            flag_254us = 0;
            n++;

       }
    }
}
//void ep_write()
//{
//    shi = n/10;
//    ge = n%10;
//   
//    EEPROM_WRITE(0x05,ge);//保存?zhèn)位
//    EEPROM_WRITE(0x06,shi);//保存十位
//}
//unsigned long ep_read()
//{
//    ge = EEPROM_READ(0x05);
//    shi = EEPROM_READ(0x06);
//    n = ge + (shi*10) ;
//    return n;
//}
void display(led8,led7)
{
    RB3 = 1;
    PORTC = number[led8];
    delay(1);
    RB3 = 0;
    PORTC = 0x00;

    RB2 = 1;
    PORTC = number[led7];
    delay(1);
    RB2 = 0;
    PORTC = 0x00;

}
void dis(void)
{

    led8 = n/10;
    led7 = n%10;
    display(led8,led7);
}
void main()
{
    GIE = 1;
    TMR2IE = 1;
    Init();
    n=EEPROM_READ(0x05);
    while(1)
    {
        if(!RA5)
        {
            n=10;
        }  
        dis();
        if(n==100) n=0;
        if(AD_convert() < 400)
        {
            EEPROM_WRITE(0x05,n);
        }      
    }
}


分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復(fù)

使用道具 舉報

沙發(fā)
ID:261626 發(fā)表于 2017-12-15 15:57 | 只看該作者
直接調(diào)用pic.h文件的EEPROM。沒有自己寫
回復(fù)

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表