新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > 51單片機+ds1302+ds18b20+1602液晶萬年歷

        51單片機+ds1302+ds18b20+1602液晶萬年歷

        作者: 時間:2016-11-29 來源:網絡 收藏
        //****************************************************************************************************//<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>//****************************************************************************************************#define WRITE_SECOND 0x80//*****寫**秒寄存器地址#define WRITE_MINUTE 0x82//*****寫**分寄存器地址#define WRITE_HOUR 0x84//*******寫**時寄存器地址#define WRITE_DAY 0x86//********寫**天寄存器地址#define WRITE_MONTH 0x88//******寫**月寄存器地址#define WRITE_YEAR 0x8c//*******寫**年寄存器地址#define WRITE_WEEK 0x8A//*******寫**周寄存器地址#define READ_SECOND 0x81//******讀**秒寄存器地址#define READ_MINUTE 0x83//******讀**分寄存器地址#define READ_HOUR 0x85//********讀**時寄存器地址#define READ_DAY 0x87//*********讀**天寄存器地址#define READ_MONTH 0x89//*******讀**月寄存器地址#define READ_YEAR 0x8d//********讀**年寄存器地址#define READ_WEEK 0x8b//********讀**周寄存器地址#define WRITE_PROTECT 0x8E//****寫保護寄存器sbit ACC_7=ACC^7;sbit CLCK=P2^1;sbit RST=P2^4;sbit IO=P2^0;//****************************************************************************************************void write_1302(uint8 addr,uint8 dat)//向1302寫入地址和數據{uint8 i=0;RST=0;CLCK=0;RST=1;for(i=8;i>0;i--){CLCK=0;if((addr&0x01)==1)IO=1;else IO=0;addr>>=1;CLCK=1;}for(i=8;i>0;i--){CLCK=0;if((dat&0x01)==1)IO=1;else IO=0;dat>>=1;CLCK=1;}RST=0;}//****************************************************************************************************uint8 read_1302(uint8 addr)//先向1302寫地址,再讀數據{ uint8 i=0,dat;RST=0;CLCK=0;RST=1;for(i=8;i>0;i--){CLCK=0;if((addr&0x01)==1)IO=1;else IO=0;addr>>=1;CLCK=1;}for(i=8;i>0;i--){ACC_7=IO;CLCK=1;ACC>>=1;CLCK=0;}dat=ACC;dat=(dat>>4)*10+(dat&0x0f);//有BCD碼轉換成十進制數return(dat);RST=0;}//*****************************************************************************************************void ds1302_init()//1302初始化{write_1302(WRITE_PROTECT,0x00);//*******取消寫保護write_1302(WRITE_SECOND,0x00);//********00秒//NUM_BCD(0)write_1302(WRITE_MINUTE,0x00);//********00分鐘//NUM_BCD(0) write_1302(WRITE_HOUR,0x16);//**********16小時//NUM_BCD(0)write_1302(WRITE_DAY,0x21);//***********21天write_1302(WRITE_MONTH,0x11);//*********11月write_1302(WRITE_YEAR,0x12);//**********2012年write_1302(WRITE_WEEK,0x03);//**********星期三 write_1302(WRITE_PROTECT,0x80);//*******打開寫保護}//****************************************************************************************************void timer0_init()//幾十毫秒的延時{TMOD|=0x01;TMOD&=0xfd;TH0=0x3c;TL0=0xaf;TR0=1;}//****************************************************************************************************void dushu()//從1302讀取數據并將其轉換成顯示函數直接用到的數字{second=read_1302(READ_SECOND);minute=read_1302(READ_MINUTE);hour=read_1302(READ_HOUR);day=read_1302(READ_DAY);month=read_1302(READ_MONTH);year=read_1302(READ_YEAR);week=read_1302(READ_WEEK);}//****************************************************************************************************** void jishi0()//每一段時間會進行一次讀取數字{if(TF0==1){TF0=0;TH0=0x3c;TL0=0xaf;counter_1++;}dushu();if(counter_1==2){counter_1=0;get_temp();beginchange();} }//****************************************************************************************************//<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<1602>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>//****************************************************************************************************sbit RS=P1^0;//**************數據命令選擇端sbit RW=P1^1;//**************讀寫選擇端sbit ENLCD=P2^5;//***********使能端sbit shang=P2^6;//***********數碼管數據輸入控制端sbit xia=P2^7;//*************數碼管共陰極控制端sbit busy=P0^7;//************判斷忙標志

        評論


        技術專區

        關閉
        主站蜘蛛池模板: 泰来县| 乌兰浩特市| 绥滨县| 张掖市| 济阳县| 藁城市| 江陵县| 平遥县| 余姚市| 京山县| 嘉鱼县| 绵竹市| 涟源市| 福贡县| 个旧市| 华宁县| 水城县| 荃湾区| 江安县| 唐河县| 吉水县| 柳河县| 萨嘎县| 新干县| 密云县| 柘城县| 双辽市| 广河县| 宝山区| 康定县| 隆尧县| 高密市| 万荣县| 余姚市| 射洪县| 沾益县| 荃湾区| 中宁县| 台北市| 星座| 承德县|