欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136

標(biāo)題: 單片機(jī)+AT24C02模塊重新上電后保存原先設(shè)置數(shù)據(jù)顯示1602為什么還是沒變,是原來的 [打印本頁(yè)]

作者: ac133    時(shí)間: 2020-5-5 22:54
標(biāo)題: 單片機(jī)+AT24C02模塊重新上電后保存原先設(shè)置數(shù)據(jù)顯示1602為什么還是沒變,是原來的
/********************************************************
函數(shù)名稱:void main()
函數(shù)作用:主函數(shù)
參數(shù)說明:
********************************************************/
void main()
{
        LCD_init();   //LCD1602初始化
        T0_init();    //定時(shí)器0初始化
        Int0_init();  //外部中斷初始化

        if(key_jian==0)                  //手動(dòng)復(fù)位初始默認(rèn)價(jià)格
        {
                delayms(100);
                if(key_jian==0)
                {
                        AT24C02_write_date(128,white_price);    //寫入【公里價(jià)】數(shù)據(jù)保存,地址0~255均可
                        AT24C02_write_date(5,start_price/100);    //寫入【起步價(jià)】數(shù)據(jù)保存
                }
        }        
        
        white_price=AT24C02_read_date(128);    //讀取存儲(chǔ)的【公里價(jià)】數(shù)據(jù)
        start_price=AT24C02_read_date(5)*100;//讀取存儲(chǔ)的【起步價(jià)】數(shù)據(jù)
        lcd1602_write_pic(0x01,pic2);        //將自定義字符“¥”寫入LCD1602
        while(1)                                                         //死循環(huán)
        {
                scan();                                         //按鍵檢測(cè)處理
                Read_time();                                         //讀取時(shí)間
                if(strat_f==1)                                         //非初始界面顯示下
                {
                        if(set_f==0)                     //未設(shè)置時(shí)
                        {
                                if(start==1)             //當(dāng)處于計(jì)價(jià)模式下
                                {
                                        display();                         //顯示開始計(jì)價(jià)界面
                                        if(moto_f==1&&TR0==0)//判斷是否滿足開啟電機(jī)的條件
                                                TR1=1;                         //打開定時(shí)器1開始控制開啟電機(jī)
                                        else                                 
                                        {
                                                moto=1;                         //關(guān)閉電機(jī)
                                                TR1=0;                         //關(guān)閉定時(shí)器1
                                        }
                                }
                                else                             //否則,在結(jié)束計(jì)價(jià)模式
                                        display2();                         //顯示結(jié)算總價(jià)錢
                        }
                        else                           
                                if(set_f<3)                     //在設(shè)置計(jì)價(jià)參數(shù)模式
                                        display3();                         //顯示計(jì)價(jià)參數(shù)設(shè)置界面
                                else                             //否則,在校準(zhǔn)時(shí)間
                                {
                                        Read_time();                 //讀取時(shí)間
                                        display4();                         //顯示校準(zhǔn)時(shí)間界面
                                }
                }
                else
                {
                        if(f==1)                                         //長(zhǎng)時(shí)間未操作或設(shè)置完成,自動(dòng)恢復(fù)初始界面,同時(shí)保存設(shè)置
                        {
                                if(set_f!=0)                         //在設(shè)置退出時(shí)需要保存數(shù)據(jù)
                                {
                                        set_f=0;                         //清除設(shè)置標(biāo)志
        
                                        AT24C02_write_date(128,white_price);          //寫入【公里價(jià)】數(shù)據(jù)保存
                                        AT24C02_write_date(5,start_price/100);//寫入【起步價(jià)】數(shù)據(jù)保存
        
                                        Writeds1302 (WRITE_MINUTE,(time[1]/10)*16+time[1]%10);//將設(shè)置的分鐘寫入DS1302
                                        Writeds1302 (WRITE_SECOND,(time[0]/10)*16+time[0]%10);//將設(shè)置的秒鐘寫入DS1302
                                }
                                LCD_write_command(0X01);                          //清除屏幕顯示
                                delay_n40us(100);                                          //延時(shí)等待清除完成
                                f=0;                                                                  //重置變量
                        }
                        lcd1602_write_character(4,1,"THE TAXI");  //顯示"THE TAXI"
                        LCD_disp_char(4,2,ASCII[time[2]/10]);          //顯示當(dāng)前時(shí)間
                        LCD_disp_char(5,2,ASCII[time[2]%10]);
                        LCD_disp_char(6,2,':');
                        LCD_disp_char(7,2,ASCII[time[1]/10]);
                        LCD_disp_char(8,2,ASCII[time[1]%10]);
                        LCD_disp_char(9,2,':');
                        LCD_disp_char(10,2,ASCII[time[0]/10]);
                        LCD_disp_char(11,2,ASCII[time[0]%10]);
                }
        }
}


/*************************************************************
                      AT24C02頭文件

實(shí)現(xiàn)功能:AT24C02的控制

補(bǔ)充說明:
***************************************************************/
#ifndef _AT24C02_H_
#define _AT24C02_H_
#include<reg52.h>
#include<intrins.h>

#define uchar unsigned char
#define uint unsigned int

/*********************AT24C02引腳定義*********************/
sbit sda=P3^6;                 //數(shù)據(jù)輸出線
sbit scl=P3^5;                //時(shí)鐘線

/*********************AT24C02函數(shù)定義*********************/
void  AT24C02_delay(uint n);                                            //延時(shí)40*n微秒
void  AT24C02_start();                                                           //開始信號(hào)
void  AT24C02_stop();                                                           //停止信號(hào)
void  AT24C02_respons();                                                   //應(yīng)答信號(hào)
void  AT24C02_write(uchar date);                                   //寫數(shù)據(jù)
uchar AT24C02_read();                                                           //讀數(shù)據(jù)
void  AT24C02_write_date(uchar address,uchar date);//向address地址寫輸date數(shù)據(jù)
uchar AT24C02_read_date(uchar address);                           //向address讀出數(shù)據(jù)并返回

/********************************************************
函數(shù)名稱:void AT24C02_delay(uint n)
函數(shù)作用:AT24C02延時(shí)函數(shù)
參數(shù)說明:延時(shí)40*n微秒
********************************************************/
void AT24C02_delay(uint n)
{
        uint i;
        uchar j;
        for(i=n;i>0;i--)
        for(j=0;j<2;j++);   
}

/*********************************************************
函數(shù)名稱:void AT24C02_start()
函數(shù)作用:AT24C02開始信號(hào)
參數(shù)說明:
*********************************************************/
void AT24C02_start()
{
        sda=1;
        _nop_();
        _nop_();
        scl=1;
        _nop_();
        _nop_();
        _nop_();
        _nop_();
        sda=0;
        _nop_();
        _nop_();
}

/*********************************************************
函數(shù)名稱:void AT24C02_stop()
函數(shù)作用:AT24C02停止信號(hào)
參數(shù)說明:
*********************************************************/
void AT24C02_stop()
{
        sda=0;
        _nop_();
        _nop_();
        scl=1;
        _nop_();
        _nop_();
        _nop_();
        _nop_();
        sda=1;
        _nop_();
        _nop_();
}

/*********************************************************
函數(shù)名稱:void AT24C02_respons()
函數(shù)作用:AT24C02應(yīng)答信號(hào)
參數(shù)說明:
*********************************************************/
void AT24C02_respons()
{
        uchar i;
        scl=1;
        _nop_();
        _nop_();
        while((sda=1)&&(i<250))           //8個(gè)停止命令
                i++;
        scl=0;               
        _nop_();
        _nop_();
}

/*********************************************************
函數(shù)名稱:void AT24C02_write(uchar date)
函數(shù)作用:AT24C02寫一個(gè)字節(jié)數(shù)據(jù)
參數(shù)說明:
*********************************************************/
void AT24C02_write(uchar date)
{
         uchar i;
         scl=0;
         for(i=0;i<8;i++)
         {
                 sda = (bit)(date&0x80);        //讀取最高位
                 _nop_();                 
                 scl=1;                 //拉高時(shí)鐘線,制造上升沿,將sda引腳數(shù)據(jù)送入EEPROM
                 _nop_();
                 _nop_();
                 scl=0;                    //制造下降沿讀取數(shù)據(jù)
                 date<<=1;           //左移一位
         }
}

/*********************************************************
函數(shù)名稱:uchar AT24C02_read()
函數(shù)作用:AT24C02讀一個(gè)字節(jié)數(shù)據(jù)
參數(shù)說明:
*********************************************************/
uchar AT24C02_read()
{
        uchar i,k;
        for(i=0;i<8;i++)
        {
                scl=1;                //鎖定sda引腳使其數(shù)據(jù)穩(wěn)定不變化
                k=(k<<1)|sda;  //讀取sda引腳數(shù)據(jù)
                scl=0;          //刷新sda數(shù)據(jù)
        }
        return k;
}

/*********************************************************
函數(shù)名稱:void AT24C02_write_date(uchar address,uchar date)
函數(shù)作用:AT24C02寫數(shù)據(jù)
參數(shù)說明:將數(shù)據(jù)date寫入到address地址里
器件地址:主器件在發(fā)送啟動(dòng)命令后開始傳送,主器件發(fā)送相應(yīng)的
         從器件的地址,8位從器件地址的高4位固定為1010。接
                 下來的3位用來定義存儲(chǔ)器的地址,由于器件A2,A1,A0引
                 腳都接地,所以均為0。最后一位為讀寫控制位。“1”表
                 示對(duì)從器件進(jìn)行讀操作,“0”表示對(duì)從器件進(jìn)行寫操作。
                 因此向器件寫入數(shù)據(jù)時(shí)地址為0xa0,讀數(shù)據(jù)時(shí)地址為0xa1
*********************************************************/
void AT24C02_write_date(uchar address,uchar date)  
{
        AT24C02_start();                //開始信號(hào)
        AT24C02_write(0xa0);         //寫時(shí)候器件地址為0xa0
        AT24C02_respons();                //應(yīng)答信號(hào)
        AT24C02_write(address); //寫入將要存放數(shù)據(jù)的地址
        AT24C02_respons();                //應(yīng)答信號(hào)
        AT24C02_write(date);    //寫入數(shù)據(jù)
        AT24C02_respons();                //應(yīng)答信號(hào)
        AT24C02_stop();                        //停止信號(hào)
        AT24C02_delay(150);
}

/*********************************************************
函數(shù)名稱:uchar AT24C02_read_date(uchar address)
函數(shù)作用:AT24C02讀數(shù)據(jù)
參數(shù)說明:向address地址里讀出一個(gè)數(shù)據(jù),并返回
*********************************************************/
uchar AT24C02_read_date(uchar address)
{
        uchar date;
        AT24C02_start();                           //開始信號(hào)
        AT24C02_write(0xa0);                    //寫時(shí)候器件地址為0xa0
        AT24C02_respons();                           //應(yīng)答信號(hào)
        AT24C02_write(address);//寫入將要讀取數(shù)據(jù)的地址
        AT24C02_respons();                           //應(yīng)答信號(hào)
        AT24C02_start();                           //開始信號(hào)
        AT24C02_write(0xa1);                   //讀時(shí)候器件地址為0xa1
        AT24C02_respons();                           //應(yīng)答信號(hào)
        date=AT24C02_read();                    //讀取數(shù)據(jù)
        AT24C02_stop();
        AT24C02_delay(150);
        return date;                                   //返回?cái)?shù)據(jù)
}

#endif






歡迎光臨 (http://m.raoushi.com/bbs/) Powered by Discuz! X3.1