原理圖:
1602萬年歷電路圖.doc
(58 KB, 下載次數: 18)
2017-11-17 21:15 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
單片機源程序如下:
- #include<reg52.h>
- //#include"DS18B20_3.H"
- #include <string.h>
- #include <intrins.h>
- #define uint unsigned int
- #define uchar unsigned char
- #define wd 1 //定義是否有溫度功能 =0時無溫度,=1時有溫度
- #include "eeprom52.h"
- #define yh 0x80 //LCD第一行的初始位置,因為LCD1602字符地址首位D7恒定為1(100000000=80)
- #define er 0x80+0x40 //LCD第二行初始位置(因為第二行第一個字符位置地址是0x40)
- //液晶屏的與C51之間的引腳連接定義(顯示數據線接C51的P0口)
- sbit en=P2^7;
- sbit rw=P2^6; //如果硬件上rw接地,就不用寫這句和后面的rw=0了
- sbit rs=P2^5;
- //校時按鍵與C51的引腳連接定義
- sbit set=P3^0; //設置鍵
- sbit add=P3^1; //加鍵
- sbit dec=P3^2; //減鍵
- sbit seeNL_NZ=P3^3; //查看農歷/鬧鐘
- sbit DQ=P3^7; //
- sbit buzzer=P2^0; //蜂鳴器,通過三極管8550驅動,端口低電平響
- sbit led=P2^4; //LCD背光開關
- bit led1=1;
- bit NZ_sdgb=1;
- unsigned char temp_miao;
- unsigned char bltime; //背光亮的時間
- //DS1302時鐘芯片與C51之間的引腳連接定義
- sbit IO=P1^1;
- sbit SCLK=P1^0;
- sbit RST=P1^2;
- char a,miao,shi,fen,ri,yue,nian,week,setn,temp;
- uint flag;
- //flag用于讀取頭文件中的溫度值,和顯示溫度值
- bit c_moon;
- char nz_shi,nz_fen,setNZn; //定義鬧鐘變量
- uchar shangyimiao,bsn,temp_hour; //記錄上一秒時間
- uchar T_NL_NZ; //計數器
- bit timerOn=0; //鬧鐘啟用標志位
- bit baoshi=0; //整點報時標志位
- bit p_r=0; //平年/潤年 =0表示平年,=1表示潤年
- data uchar year_moon,month_moon,day_moon;
- sbit ACC0=ACC^0;
- sbit ACC7=ACC^7;
- /************************************************************
- ACC累加器=A
- ACC.0=E0H
- ACC.0就是ACC的第0位。Acc可以位尋址。
- 累加器ACC是一個8位的存儲單元,是用來放數據的。但是,這個存儲單元有其特殊的地位,
- 是單片機中一個非常關鍵的單元,很多運算都要通過ACC來進行。以后在學習指令時,
- 常用A來表示累加器。但有一些地方例外,比如在PUSH指令中,就必須用ACC這樣的名字。
- 一般的說法,A代表了累加器中的內容、而ACC代表的是累加器的地址。
- ***************************************************************/
- /******************把數據保存到單片機內部eeprom中******************/
- void write_eeprom()
- {
- SectorErase(0x2000);
- byte_write(0x2000, nz_shi);
- byte_write(0x2001, nz_fen);
- byte_write(0x2002, timerOn);
- byte_write(0x2060, a_a);
- }
- /******************把數據從單片機內部eeprom中讀出來*****************/
- void read_eeprom()
- {
- nz_shi = byte_read(0x2000);
- nz_fen = byte_read(0x2001);
- timerOn = byte_read(0x2002);
- a_a = byte_read(0x2060);
- }
- /**************開機自檢eeprom初始化*****************/
- void init_eeprom()
- {
- read_eeprom(); //先讀
- if(a_a != 1) //新的單片機初始單片機內問eeprom
- ……………………
- …………限于本文篇幅 余下代碼請從51黑下載附件…………
復制代碼
所有資料51hei提供下載:
1-程序.zip
(125.83 KB, 下載次數: 19)
2017-11-17 21:15 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
|