這是自己寫的萬年歷,擁有顯示萬年歷、鬧鐘、溫度上下限報警功能,鬧鐘有一分鐘的響鈴時間。有4個按鍵,仿真里從左到右依次代表 【確定】【加鍵】【減鍵】【返回】
仿真原理圖如下(proteus仿真工程文件可到本帖附件中下載)
單片機源程序如下:
- #include<ds1302.h>
- #include<intrins.h>
- //******寄存器地址,順序為秒分時日月周年七位******//
- uchar code ADDR_READ[7] = {0x81, 0x83, 0x85, 0x87, 0x89, 0x8b, 0x8d};
- uchar code ADDR_WRITER[7] = {0x80, 0x82, 0x84, 0x86, 0x88, 0x8a, 0x8c};
- //*****顯示初始值******//
- //順序為秒分時日月周年七位//
- uchar time[7]={0,0,0x12,0x25,0x10,0x01,0x17}; //初始化時間為2017年10月23日周一 12點00分00秒
- //*****DS1302寫函數*****//
- void DS1302_Writer(uchar addr , uchar dat)
- {
- uint i;
- RST=0;
- _nop_();
- SCLK=0;
- _nop_();
- RST=1;
- for(i=0;i<8;i++)
- {
- temp=addr&0x01;
- addr=addr>>1;
- SCLK=1;
- _nop_();
- SCLK=0;
- _nop_();
- }
- for(i=0;i<8;i++)
- {
- temp=dat&0x01;
- dat=dat>>1;
- SCLK=1;
- _nop_();
- SCLK=0;
- _nop_();
- }
- RST=0;
- _nop_();
- }
- //********DS1302讀函數*********//
- uchar DS1302_Read(uchar addr)
- {
- uint i;
- uchar dat,dat1;
- RST=0;
- _nop_();
- SCLK=0;
- _nop_();
- RST=1;
- for(i=0;i<8;i++)
- {
- temp=addr&0x01;
- addr=addr>>1;
- SCLK=1;
- _nop_();
- SCLK=0;
- }
- _nop_();
- for(i=0;i<8;i++)
- {
- dat1=temp;
- dat = (dat>>1) | (dat1<<7);
- SCLK=1;
- _nop_();
- SCLK=0;
- _nop_();
- }
- RST = 0;
- _nop_(); //以下為DS1302復位的穩定時間,必須的。
- SCLK = 1;
- _nop_();
- temp = 0;
- _nop_();
- temp = 1;
- _nop_();
- return dat;
- }
- //******初始化函數********//
- void DS1302_INIT()
- {
- int i;
- DS1302_Writer(0x8e,0x00);//當對日歷、時鐘寄存器或片內RAM進行寫時WP應清零
- for(i=0;i<7;i++)
- {
- DS1302_Writer(ADDR_WRITER[i],time[i]); //初始化時分秒
- }
- DS1302_Writer(0x8e,0x80);//當對日歷、時鐘寄存器或片內RAM進行讀時WP一般置1
- }
- //*********DS1302時鐘暫停函數***************//
- void DS1302_STOP()
- {
- int i;
- DS1302_Writer(0x8e,0x00);//當對日歷、時鐘寄存器或片內RAM進行寫時WP應清零
- DS1302_Writer(0x80,time[0]|0x80);
- for(i=1;i<7;i++)
- {
- DS1302_Writer(ADDR_WRITER[i],time[i]); //初始化時分秒
- }
- DS1302_Writer(0x8e,0x80);//當對日歷、時鐘寄存器或片內RAM進行讀時WP一般置1
- }
- //******讀取DS1302計時*******//
- void DS1302_ReadTime()
- {
- int i;
- for(i=0;i<7;i++)
- {
- time[i]=DS1302_Read(ADDR_READ[i]); //讀取秒分時日月周年七位儲存到全局變量time中
- ……………………
- …………限于本文篇幅 余下代碼請從51黑下載附件…………
復制代碼
所有資料51hei提供下載:
LCD1602萬年歷 溫度報警顯示 鬧鐘.zip
(118.13 KB, 下載次數: 567)
2017-11-5 20:33 上傳
點擊文件名下載附件
|