仿真版本:Proteus8.6及以上版本
程序編譯:Keil5 C51
編程語言:C語言
設(shè)計編號:【J02】
1.? 簡介
? 本文提出了一種基于51單片機的LCD12864電子萬年歷。此萬年歷在硬件方面主要采用AT89C51單片機作為主控核心,由DS1302時鐘芯片提供時鐘,DS18B20芯片顯示溫度、LCD12864液晶顯示屏顯示,同時電子萬年歷還具有時間校準、鬧鐘提醒、整點報時等功能。
2.? 主要功能
a.通過LCD12864顯示年月日、時分秒、溫度、星期、鬧鐘等信息。
b.通過獨立按鍵設(shè)置年月日、時分秒、鬧鐘。
c.通過DS1302時鐘芯片提供系統(tǒng)時鐘。
d.通過DS18B20芯片提供實時溫度。
e.通過蜂鳴器提示鬧鐘狀態(tài)。
3.? 源程序(Keil5)
本設(shè)計采用keil5 C51軟件(內(nèi)附安裝包)實現(xiàn)程序設(shè)計。如需用keil4打開程序,可自行通過.c和.h文件新建工程即可。
#include "main.h" //包含頭文件main.h
#include "LCD.h" //包含頭文件LCD.h
#include "DS1302.h" //包含頭文件DS1302.h
#include "word.h" //包含頭文件word.h
#include "lunar_calendar.h" //包含頭文件lunar_calendar.h
#include "buzz.h" //包含頭文件buzz.h
#include "eeprom52.h"
TIME time, tmp_time; //時間變量
ALARM alarm; //時間變量
char a_a;
bit Alarm_flag=0; //時間變量
bit Clock_flag=0; //時間變量
bit flag=0; //時間變量
sbit DQ=P3^7; //DS18B20 pin 溫度傳感器引腳
/******************把數(shù)據(jù)保存到單片機內(nèi)部eeprom中******************/
void write_eeprom()
{
SectorErase(0x2c00); //清空
SectorErase(0x2e00);
byte_write(0x2c01,Alarm_flag);
byte_write(0x2c02,Clock_flag);
byte_write(0x2c03,alarm.hour);
byte_write(0x2c04,alarm.min);
byte_write(0x2060,a_a);
}
/******************把數(shù)據(jù)從單片機內(nèi)部eeprom中讀出來*****************/
void read_eeprom()
{
Alarm_flag= byte_read(0x2c01);
Clock_flag=byte_read(0x2c02);
alarm.hour=byte_read(0x2c03);
alarm.min=byte_read(0x2c04);
a_a = byte_read(0x2060);
}
/**************開機自檢eeprom初始化*****************/
void init_eeprom()
{
a_a = byte_read(0x2060);
if(a_a != 1) //新的單片機初始單片機內(nèi)問eeprom
{
a_a = 1;
write_eeprom(); //保存數(shù)據(jù)
}
}
//-----------------18B20-----------------------
unsigned char L_18B20,H_18B20,zhengshu,shangwen,xiawen; //溫度用變量
unsigned int fg=0,xiaoshu_a; //溫度用變量
//-----------------18B20----------------------
void delay(uint16 n)//延時us級
{
while (n--);
}
//************************************************************************/
// 函數(shù): LCD_Delay()
// 描述: 延時t ms函數(shù)
// 參數(shù): t
// 返回: 無
// 備注: 11.0592MHZ t=1延時時間約1ms
// 版本: 2015/01/01 First version
//************************************************************************/
void Delay_nms(unsigned int t)
{
unsigned int i,j;
for(i=0;i<t;i++) //循環(huán)t次
for(j=0;j<113;j++) //循環(huán)113次 每次約3us
;
}
/////////////////////////////////////////////////
//-----------播放音樂----------------------------
/////////////////////////////////////////////////
/*------DS18B20------*/
void delay_18B20(unsigned int i)
{
while(i--);
}
/*DS18B20的復(fù)位脈沖 主機通過拉低單總線至少480us以產(chǎn)生復(fù)位脈沖
然后主機釋放單總線并進入接收模式 此時單總線電平被拉高
DS18B20檢測到上升沿后 延時15~60us,拉低總線60~240us產(chǎn)生應(yīng)答脈沖 */
void Init_DS18B20(void)
{
unsigned char x=0;
DQ = 1; //DQ復(fù)位
delay_18B20(8); //稍做延時
DQ = 0; //單片機將DQ拉低
delay_18B20(80); //精確延時 大于 480us
DQ = 1; //拉高總線
delay_18B20(14); //延時
x=DQ; //稍做延時后 如果x=0則初始化成功 x=1則初始化失敗
delay_18B20(20); //延時
}
4.? 仿真proteus8.6
? 本設(shè)計采用proteus8.6軟件(內(nèi)附安裝包)實現(xiàn)仿真設(shè)計,如下圖所示。proteus軟件一般存在高低版本兼容問題,該仿真是通過proteus8.6導(dǎo)出的,所以請盡量使用proteus8.6打開文件,低于proteus8.6的版本不能夠正常使用,高于proteus8.6的版本除了proteus8.8/8.9理論上可以正常使用。
時鐘界面:
時鐘設(shè)置:
鬧鐘設(shè)置:
5.? 設(shè)計報告
設(shè)計報告主要包括硬件電路、軟件設(shè)計、仿真調(diào)試等等,僅供參考。
6.? 資料清單
設(shè)計資料主要包括C程序+仿真+設(shè)計報告+使用說明+元件清單+操作視頻等。
7.? 資料獲取鏈接
百度網(wǎng)盤下載鏈接:【J02】百度網(wǎng)盤下載鏈接
更多單片機仿真設(shè)計合集:單片機仿真設(shè)計合集