欧美极品高清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