導航:首頁 > 操作系統 > 電子萬年歷單片機

電子萬年歷單片機

發布時間:2022-01-18 17:06:22

㈠ 基於單片機的電子萬年歷設計,能夠顯示日期,時間,溫度。

這個其實不是很難啊 去找找相關的資料 可以分成幾個小模塊 再拼起來就是了 至於程序 也是有參考的

㈡ 有沒有不用時鍾晶元做的電子萬年歷 單片機 有的話給我可以嗎 謝謝了 而且做到掉電後時鍾還在走時

用時鍾晶元做電子萬年歷比較好,一是佔用單片機的資源比較少,二是其功功耗可以很低,很容易以實現掉電後繼續走時
如果只用單片機做時鍾,其最低功耗要比時鍾晶元高多倍

㈢ 基於單片機的電子萬年歷實現了什麼功能

單片機、LED數碼管或液晶顯示屏、晶振、2803、電阻若干、想更精確弄鍾晶元

㈣ 求基於51單片機的電子萬年歷的電路圖和程序,有具體說明最好,要有仿

溫度的話沒有,我的那塊板子上沒有ds1802。。你可以學下ds1802,參考開發板上的電路,以及他們的程序,結合到一起就好了, 你是需要精確的那個時間嗎? 如果是那樣的話,你還是用ds1302吧, 我的這個只是自己寫著玩的,,走時有誤差,沒有ds1302准確的,這些都在金沙灘工作室的視頻教程上有的, 還有常式,,你把1802,1302的結合到一起去。就好了。電路原理圖參考他們開發板的原理圖吧

㈤ 51單片機電子萬年歷包括哪些部分

單片機
RTC時鍾晶元
顯示
按鈕調整
電源

比較基本的吧。。。。。。。。

㈥ 誰能告訴我單片機製作電子萬年歷的目的和意義

一、熟悉數碼管的驅動
二、熟悉按鍵的應用
......把做萬年歷所需要的器件列出來,大致就是這個格式

㈦ 基於單片機的電子萬年歷設計,能夠顯示日期,時間,溫度濕度,最好是音樂鬧鈴。

http://v.youku.com/v_show/id_XMzY4Njc4MjM2.html,借鑒這個視頻,protues模擬,keil編程,還有一個sht11測量溫濕度的,希望對你有用

㈧ 用單片機製作電子萬年歷

力天電子,天翔電子都有這方面的視頻!

㈨ 有哪位高人有電子萬年歷設計程序(單片機)

#include <reg51.h>
#define uchar unsigned char
#define uint unsigned int
sbit dc=P1^5; //RS
sbit rw=P1^6; //R/W
sbit cs=P1^7; //E
sfr lcdbus=0xa0; //lcdbus P2
unsigned char k,sflag;
void soft_10ms()
{unsigned int i;
for(i=0;i<3000;i++);
}
void soft_1ms()
{unsigned int i;
for(i=0;i<300;i++);
void delay_2s()
{unsigned char i;
for(i=0;i<20;i++)
soft_10ms();
}

void lcd_wrcmd(unsigned char lcdcmd)
{lcdbus=lcdcmd;
dc=0;
rw=0;
cs=1;
cs=0;
lcdbus=0xff;
soft_1ms();
}

void lcd_moveto(char position)
{ register cmd=0x80;
if (position > 59)
position += 0x18;
else
{ if(position>39)position-=0x14;
else
{ if(position>19)position+=0x2c;
}
}
cmd=cmd|position;
lcd_wrcmd(cmd);
}
void lcd_wrdata(char lcddata)
{lcdbus=lcddata;
dc=1;
rw=0;
cs=1;
cs=0;
lcdbus=0xff;
soft_1ms();
}
void lcd_string(char *strpoint)
{register i=0;
while(strpoint[i]!=0)
{lcd_wrdata(strpoint[i]);
i++;
}
}void lcd_init()
{ lcd_wrcmd(0x30);
soft_10ms();
lcd_wrcmd(0x30);
soft_10ms();
lcd_wrcmd(0x30);
soft_10ms();
lcd_wrcmd(0x38);
lcd_wrcmd(0x0c);
lcd_wrcmd(0x06);
lcd_wrcmd(0x01);
}
void lcd_cls()
{lcd_wrcmd(0x01);
soft_10ms();
}

uchar DateTime[16];

sbit DS1302_CLK=P1^3; //實時時鍾時鍾線引腳
sbit DS1302_IO=P1^2; //實時時鍾數據線引腳
sbit DS1302_RST=P1^4; //實時時鍾復位線引腳
sbit ACC0=ACC^0;
sbit ACC7=ACC^7;
#define AM(X) X
#define PM(X) (X+12) // 轉成24小時制
#define DS1302_SECOND 0x80
#define DS1302_MINUTE 0x82
#define DS1302_HOUR 0x84
#define DS1302_WEEK 0x8A
#define DS1302_DAY 0x86
#define DS1302_MONTH 0x88
#define DS1302_YEAR 0x8C
#define DS1302_RAM(X) (0xC0+(X)*2) //用於計算 DS1302_RAM 地址的宏

void DS1302InputByte(unsigned char d) //實時時鍾寫入一位元組(內部函數)
{
unsigned char i;
ACC = d;
for(i=8; i>0; i--)
{
DS1302_IO = ACC0; //相當於匯編中的 RRC
DS1302_CLK = 1;
DS1302_CLK = 0;
ACC = ACC >> 1;
}
}
unsigned char DS1302OutputByte(void) //實時時鍾讀取一位元組(內部函數)
{
unsigned char i;
for(i=8; i>0; i--)
{
ACC = ACC >>1; //相當於匯編中的 RRC
ACC7 = DS1302_IO;
DS1302_CLK = 1;
DS1302_CLK = 0;
}
return(ACC);
}

void Write1302(unsigned char ucAddr, unsigned char ucData) //ucAddr: DS1302地址, ucData: 要寫的數據
{
DS1302_RST = 0;
DS1302_CLK = 0;
DS1302_RST = 1;
DS1302InputByte(ucAddr); // 地址,命令
DS1302InputByte(ucData); // 寫1Byte數據
DS1302_CLK = 1;
DS1302_RST = 0;
}

unsigned char Read1302(unsigned char ucAddr) //讀取DS1302某地址的數據
{
unsigned char ucData;
DS1302_RST = 0;
DS1302_CLK = 0;
DS1302_RST = 1;
DS1302InputByte(ucAddr|0x01); // 地址,命令
ucData = DS1302OutputByte(); // 讀1Byte數據
DS1302_CLK = 1;
DS1302_RST = 0;
return(ucData);
}
void DS1302_SetProtect(bit flag) //是否防寫
{
if(flag)
Write1302(0x8E,0x80);
else
Write1302(0x8E,0x00);
}
void DS1302_SetTime(unsigned char Address, unsigned char Value) // 設置時間函數
{
DS1302_SetProtect(0);
Write1302(Address, ((Value/10)<<4 | (Value%10)));
}

void DS1302_GetTime()
{
unsigned char ReadValue;
ReadValue = Read1302(DS1302_YEAR);
DateTime[0] = ((ReadValue&0x70)>>4)+0x30;
DateTime[1] = (ReadValue&0x0F)+0x30;
DateTime[2] = '-';
ReadValue = Read1302(DS1302_MONTH);
DateTime[3] = ((ReadValue&0x70)>>4)+0x30;
DateTime[4] = (ReadValue&0x0F)+0x30;
DateTime[5] ='-';
ReadValue = Read1302(DS1302_DAY);
DateTime[6] = ((ReadValue&0x70)>>4)+0x30;
DateTime[7] = (ReadValue&0x0F)+0x30;
ReadValue = Read1302(DS1302_HOUR);
DateTime[8] = ((ReadValue&0x70)>>4)+0x30;
DateTime[9] = (ReadValue&0x0F)+0x30;
DateTime[10] =':';
ReadValue = Read1302(DS1302_MINUTE);
DateTime[11] = ((ReadValue&0x70)>>4)+0x30;
DateTime[12] = (ReadValue&0x0F)+0x30;
DateTime[13] =':';
ReadValue = Read1302(DS1302_SECOND);
DateTime[14] = ((ReadValue&0x70)>>4)+0x30;
DateTime[15] = (ReadValue&0x0F)+0x30;
//ReadValue = Read1302(DS1302_WEEK);
//Time->Week = ((ReadValue&0x70)>>4)*10 + (ReadValue&0x0F);

}
void Initial_DS1302(void)
{
unsigned char Second=Read1302(DS1302_SECOND); //秒寄存器的最高位為時鍾暫停位
DS1302_SetTime(DS1302_SECOND,0);
}
void main()
{
unsigned char i;
P0=0xff;
P1=0xff;
P2=0xff;
P3=0xff;
TMOD=0x01;
TH0=(65536-10000)/256;
TL0=(65536-10000)%256;
TR0=1;
EA=1;
ET0=1;
delay_2s();
lcd_init();
Initial_DS1302();
Write1302(0x8E,0x00);
Write1302(DS1302_YEAR,0x11);
Write1302(DS1302_MONTH,0x10);
Write1302(DS1302_DAY,0x14);
Write1302(DS1302_WEEK,0x05);
Write1302(DS1302_HOUR,0x15);
Write1302(DS1302_MINUTE,0x35);
Write1302(DS1302_SECOND,0x30);
Write1302(0x8E,0x80);
delay_2s();
lcd_wrcmd(0X80);
lcd_string("time:");
/*lcd_wrcmd(0XC0);
delay_2s();
lcd_wrdata('N');
lcd_wrdata('N');
lcd_wrdata('N'); */

while(1)
{
// lcd_cls();
if(sflag)
{
sflag=0;
DS1302_GetTime();
lcd_wrcmd(0x01);
soft_10ms();
lcd_wrcmd(0X80);
delay_2s();
lcd_string("date:");
for(i=0;i<8;i++)
{
lcd_wrdata(DateTime[i]);
delay_2s();
}
lcd_wrcmd(0Xc0);
delay_2s();
lcd_string("time:");
for(i=8;i<16;i++)
{
lcd_wrdata(DateTime[i]);
delay_2s();
}

}
}
}

void T0_ser() interrupt 1 using 1
{
TF0=0;
TH0=(65536-10000)/256;
TL0=(65536-10000)%256;
k++;
if(k>10){k=0;sflag=1;}
}

閱讀全文

與電子萬年歷單片機相關的資料

熱點內容
listsortjava 瀏覽:180
plc閃光電路編程實例 瀏覽:297
socket編程試題 瀏覽:201
華為的伺服器怎麼設置從光碟機啟動 瀏覽:867
程序員真的累嗎 瀏覽:323
學信網app為什麼刷臉不了 瀏覽:871
天蠍vs程序員 瀏覽:991
單片機下載口叫什麼 瀏覽:186
程序員的道 瀏覽:924
雲伺服器不實名違法嗎 瀏覽:556
怎樣查看文件夾圖片是否重復 瀏覽:993
文件怎麼導成pdf文件 瀏覽:806
打開sql表的命令 瀏覽:101
安卓手機如何面部支付 瀏覽:37
天元數學app為什麼登錄不上去 瀏覽:822
明日之後為什麼有些伺服器是四個字 瀏覽:103
安卓系統l1是什麼意思 瀏覽:25
伺服器一直崩應該用什麼指令 瀏覽:924
cm202貼片機編程 瀏覽:729
php構造函數帶參數 瀏覽:179