久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 2033|回復: 0
打印 上一主題 下一主題
收起左側

單片機+AT24C02模塊重新上電后保存原先設置數據顯示1602為什么還是沒變,是原來的

[復制鏈接]
跳轉到指定樓層
樓主
ID:725584 發表于 2020-5-5 22:54 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
/********************************************************
函數名稱:void main()
函數作用:主函數
參數說明:
********************************************************/
void main()
{
        LCD_init();   //LCD1602初始化
        T0_init();    //定時器0初始化
        Int0_init();  //外部中斷初始化

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

實現功能:AT24C02的控制

補充說明:
***************************************************************/
#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;                 //數據輸出線
sbit scl=P3^5;                //時鐘線

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

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

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

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

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

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

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

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

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

#endif

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

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 午夜手机在线 | 国产一二区视频 | 国产成人91| 日韩精品成人一区二区三区视频 | 国产高清视频一区 | 午夜视频免费在线观看 | 天天操天天射综合 | 亚洲精品一区二区三区中文字幕 | aaaaaa大片免费看最大的 | 欧美成人一区二区 | 亚洲综合小视频 | 久久国产精品一区二区三区 | 欧美日韩在线一区二区三区 | 激情婷婷成人 | 亚洲国产精品久久久 | 午夜影院在线观看免费 | 狠狠狠色丁香婷婷综合久久五月 | 日韩免费毛片视频 | 黄毛片 | 紧缚调教一区二区三区视频 | 亚洲欧美一区二区三区情侣bbw | 日日操操 | 亚洲高清av | 九一在线观看 | 97成人精品 | 日韩电影一区 | 国产一级一片免费播放 | 99精品欧美一区二区三区综合在线 | 亚洲日本视频 | 二区三区视频 | 国产福利在线 | 嫩草影院网址 | 一本色道久久综合亚洲精品高清 | 男人的天堂亚洲 | 国产偷自视频区视频 | 欧美aⅴ片 | 国产亚洲精品精品国产亚洲综合 | 少妇黄色 | 日韩久久久一区二区 | 日韩一区二区免费视频 | 日本网站在线看 |