仿真版本:Proteus8.6及以上版本
程序編譯:Keil5 C51
編程語言:C語言
設(shè)計編號:【J07】
1.? 簡介
? 本文提出了一種基于51單片機(jī)的數(shù)碼管電子萬年歷。此萬年歷在硬件方面主要采用AT89C51單片機(jī)作為主控核心,由DS1302時鐘芯片提供時鐘,DS18B20芯片顯示溫度、多位數(shù)碼管液晶顯示屏顯示,同時電子萬年歷還具有時間校準(zhǔn)、倒計時等功能。
2.? 主要功能
a.通過多位數(shù)碼管顯示年月日、時分秒、倒計時、溫度、星期等信息。
b.通過獨立按鍵設(shè)置年月日、時分秒、倒計時。
c.通過DS1302時鐘芯片提供系統(tǒng)時鐘。
d.通過DS18B20芯片提供實時溫度。
3.? 源程序(Keil5)
本設(shè)計采用keil5 C51軟件(內(nèi)附安裝包)實現(xiàn)程序設(shè)計。如需用keil4打開程序,可自行通過.c和.h文件新建工程即可。
#include "Max7221.h"
#include "1302.h"
sbit SLED=P2^3;
sbit DQ=P2^4;
sbit BT1=P1^1;
sbit BT2=P1^2;
sbit BT3=P1^3;
sbit BT4=P1^4;
unsigned char Nums[]={0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0};//顯示緩沖區(qū)
unsigned char TENums[]={0,0};
SYSTEMTIME NowTimes;
uint Temperature;
uchar Old_Sec;
uchar Old_Day;
uchar Old_State=1;
uchar Buttons;
uchar ButtonCount;
uchar HasChange;
uchar HasOpera;
void Delay(unsigned int n)
{
unsigned int i=0,j=0;
for(i=0;i<n;i++)
for(j=0;j<123;j++);
}
void delay_18B20(unsigned int i)
{
while(i--);
}
void Init_DS18B20(void)
{
unsigned char x=0;
DQ = 1;
delay_18B20(8);
DQ = 0;
delay_18B20(80);
DQ = 1;
delay_18B20(14);
x=DQ;
delay_18B20(20);
}
unsigned char ReadOneChar(void)
{
uchar i=0;
uchar dat = 0;
for (i=8;i>0;i--)
{
DQ = 0;
dat>>=1;
DQ = 1;
if(DQ)
dat|=0x80;
delay_18B20(4);
}
return(dat);
}
void WriteOneChar(uchar dat)
{
unsigned char i=0;
for (i=8; i>0; i--)
{
DQ = 0;
DQ = dat&0x01;
delay_18B20(5);
DQ = 1;
dat>>=1;
}
}
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理論上可以正常使用。
時鐘界面:
5.? 設(shè)計報告
設(shè)計報告主要包括硬件電路、軟件設(shè)計、仿真調(diào)試等等,僅供參考。
6.? 資料清單
設(shè)計資料主要包括C程序+仿真+設(shè)計報告+使用說明+元件清單+操作視頻等。
7.? 資料獲取鏈接
百度網(wǎng)盤下載鏈接:【J07】百度網(wǎng)盤下載鏈接
更多單片機(jī)仿真設(shè)計合集:單片機(jī)仿真設(shè)計合集