|
這是自己寫(xiě)的萬(wàn)年歷,擁有顯示萬(wàn)年歷、鬧鐘、溫度上下限報(bào)警功能,鬧鐘有一分鐘的響鈴時(shí)間。有4個(gè)按鍵,仿真里從左到右依次代表 【確定】【加鍵】【減鍵】【返回】
仿真原理圖如下(proteus仿真工程文件可到本帖附件中下載)
0.png (29.64 KB, 下載次數(shù): 109)
下載附件
2017-11-6 04:05 上傳
0.png (50.78 KB, 下載次數(shù): 101)
下載附件
2017-11-6 04:05 上傳
單片機(jī)源程序如下:
- #include<ds1302.h>
- #include<intrins.h>
- //******寄存器地址,順序?yàn)槊敕謺r(shí)日月周年七位******//
- uchar code ADDR_READ[7] = {0x81, 0x83, 0x85, 0x87, 0x89, 0x8b, 0x8d};
- uchar code ADDR_WRITER[7] = {0x80, 0x82, 0x84, 0x86, 0x88, 0x8a, 0x8c};
- //*****顯示初始值******//
- //順序?yàn)槊敕謺r(shí)日月周年七位//
- uchar time[7]={0,0,0x12,0x25,0x10,0x01,0x17}; //初始化時(shí)間為2017年10月23日周一 12點(diǎn)00分00秒
- //*****DS1302寫(xiě)函數(shù)*****//
- 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讀函數(shù)*********//
- 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復(fù)位的穩(wěn)定時(shí)間,必須的。
- SCLK = 1;
- _nop_();
- temp = 0;
- _nop_();
- temp = 1;
- _nop_();
- return dat;
- }
- //******初始化函數(shù)********//
- void DS1302_INIT()
- {
- int i;
- DS1302_Writer(0x8e,0x00);//當(dāng)對(duì)日歷、時(shí)鐘寄存器或片內(nèi)RAM進(jìn)行寫(xiě)時(shí)WP應(yīng)清零
- for(i=0;i<7;i++)
- {
- DS1302_Writer(ADDR_WRITER[i],time[i]); //初始化時(shí)分秒
- }
- DS1302_Writer(0x8e,0x80);//當(dāng)對(duì)日歷、時(shí)鐘寄存器或片內(nèi)RAM進(jìn)行讀時(shí)WP一般置1
- }
- //*********DS1302時(shí)鐘暫停函數(shù)***************//
- void DS1302_STOP()
- {
- int i;
- DS1302_Writer(0x8e,0x00);//當(dāng)對(duì)日歷、時(shí)鐘寄存器或片內(nèi)RAM進(jìn)行寫(xiě)時(shí)WP應(yīng)清零
- DS1302_Writer(0x80,time[0]|0x80);
- for(i=1;i<7;i++)
- {
- DS1302_Writer(ADDR_WRITER[i],time[i]); //初始化時(shí)分秒
- }
- DS1302_Writer(0x8e,0x80);//當(dāng)對(duì)日歷、時(shí)鐘寄存器或片內(nèi)RAM進(jìn)行讀時(shí)WP一般置1
- }
- //******讀取DS1302計(jì)時(shí)*******//
- void DS1302_ReadTime()
- {
- int i;
- for(i=0;i<7;i++)
- {
- time[i]=DS1302_Read(ADDR_READ[i]); //讀取秒分時(shí)日月周年七位儲(chǔ)存到全局變量time中
- ……………………
- …………限于本文篇幅 余下代碼請(qǐng)從51黑下載附件…………
復(fù)制代碼
所有資料51hei提供下載:
LCD1602萬(wàn)年歷 溫度報(bào)警顯示 鬧鐘.zip
(118.13 KB, 下載次數(shù): 567)
2017-11-5 20:33 上傳
點(diǎn)擊文件名下載附件
下載積分: 黑幣 -5
|
評(píng)分
-
查看全部評(píng)分
|