A. 基於單片機的萬年歷難嗎
不難。
單片機應用技術飛速發展,縱觀我們現在生活的各個領域,從導彈的導航裝置,到飛機上各種儀表的控制,從計算機的網路通訊與數據傳輸,到工業自動化過程的實時控制和數據處理,以及我們生活中廣泛使用的各種智能IC卡、電子寵物等,這些都離不開單片機。單片機是集CPU、RAM、ROM、定時、計數和多種介面於一體的微控制器。
它體積小,成本低,功能強,廣泛應用於智能產業和工業自動化上。電子萬年歷是一種非常廣泛日常計時工具,對現代社會越來越流行。它可以對年、月、日、周日、時、分、秒進行計時,還具有閏年補償等多種功能,而且DS1302的使用壽命長,誤差小。對於數字電子萬年歷採用直觀的數字顯示,可以同時顯示年、月、日、周、時、分、秒和溫度等信息,還具有時間校準等功能。該電路採用AT89S52單片機作為核心,功耗小,能在3V的低壓工作,電壓可選用3~5V電壓供電。
B. 單片機做萬年歷用數碼管的優缺點
優點,定時精準,缺點,電路復雜成本高。
數碼管萬年歷的設計原理是利用AT89C5單片機內部定時/計數器TO的模式2(8位自動重裝初值)產生一個時間為250us的信號,再計數4000次產生1S的時間後發出中斷,再由單片機進行數據處理後,送人數碼管(共陰極數碼管)顯示(動態顯示)。
C. 52單片機的萬年歷語言,八位LED共陰數碼管動態顯示年月日 時分秒
你描述的不對
有些地方不很完善
什麼叫
萬年歷
語言,或許你想表達,編寫單片機的語言,一般用c語言啊
8個
數碼管
你要顯示「年月日時分秒」,這樣是顯示不夠的,比如年月日如:「13-06-21」,時分秒如:「11-28-05」,是這樣嗎
一般顯示用
lcd1602
的比較多
為什麼你要用8個按鍵呢,是調整日期嗎?其實三個就夠了啊,一個選擇要調整的對象,一個增加,一個減少
你說全部與p30連接,是什麼與他連接呢
可以交流
myID
D. 誰能告訴我單片機製作電子萬年歷的目的和意義
一、熟悉數碼管的驅動
二、熟悉按鍵的應用
......把做萬年歷所需要的器件列出來,大致就是這個格式
E. 基於51單片機製作萬年歷,用數碼管,定時器,不用時鍾晶元,不用液晶,怎麼做求大神解,原理圖和C程序
基於51單片機製作萬年歷,用兩個8位一體的共陰數碼管,顯示日期和時間。數碼管位選用兩片74HC138,便於動態掃描顯示,又節省引腳。用3個按鍵調時,K1為選擇調時狀態,K2為加1鍵,K3為減1鍵。
模擬圖如下:
F. 設計一個基於單片機的萬年歷程序
#include<reg51.h>
#include"lcd.h"
#include"ds1302.h"
sbitK1=P3^1;
sbitK2=P3^0;
sbitK3=P3^2;
sbitK4=P3^3; //管腳接線
unsignedcharcharacter0[24]={0x08,0x0f,0x12,0x0f,0x0a,0x1f,0x02,0x02 ,
0x0F,0x09,0x0F,0x09,0x0F,0x09,0x13,0x00,//"月"代碼0x01
0x0F,0x09,0x09,0x0F,0x09,0x09,0x0F,0x00,//"日"代碼0x02
};//年
voidInt0Configuration();
voidLcdDisplay();
unsignedcharSetState,SetPlace;
voidDelay10ms(void);//誤差0us
/*******************************************************************************
*函數名:main
*函數功能 :主函數
*輸入:無
*輸出 :無
*******************************************************************************/
voidmain()
{
unsignedchari,h;
Int0Configuration();
LcdInit();
LcdWriteCom(0x40);
for(h=0;h<24;h++)
{
LcdWriteData(character0[h]);
}
LcdWriteCom(0x80);
// Ds1302Init();
while(1)
{
if(SetState==0)
{
Ds1302ReadTime();
}
else
{
if(K1==0) //檢測按鍵K1是否按下
{
Delay10ms(); //消除抖動
if(K1==0)
{
SetPlace++;
if(SetPlace>=7)
SetPlace=0;
}
while((i<50)&&(K1==0)) //檢測按鍵是否松開
{
Delay10ms();
i++;
}
i=0;
}
if(K2==0) //檢測按鍵K2是否按下
{
Delay10ms(); //消除抖動
if(K2==0)
{
TIME[SetPlace]++;
if((TIME[SetPlace]&0x0f)>9) //換成BCD碼。
{
TIME[SetPlace]=TIME[SetPlace]+6;
}
if((TIME[SetPlace]>=0x60)&&(SetPlace<2)) //分秒只能到59
{
TIME[SetPlace]=0;
}
if((TIME[SetPlace]>=0x24)&&(SetPlace==2)) //小時只能到23
{
TIME[SetPlace]=0;
}
if((TIME[SetPlace]>=0x32)&&(SetPlace==3)) //日只能到31
{
TIME[SetPlace]=0;
}
if((TIME[SetPlace]>=0x13)&&(SetPlace==4)) //月只能到12
{
TIME[SetPlace]=0;
}
if((TIME[SetPlace]>=0x7)&&(SetPlace==5)) //周只能到7
{
TIME[SetPlace]=1;
}
// if(SetPlace==5) //月只能到12
// {
// TIME[SetPlace]=;
// }
}
while((i<50)&&(K2==0)) //檢測按鍵是否松開
{
Delay10ms();
i++;
}
i=0;
}
}
LcdDisplay();
}
}
/*******************************************************************************
*函數名:LcdDisplay()
*函數功能 :顯示函數
*輸入:無
*輸出 :無
*******************************************************************************/
voidLcdDisplay()
{
LcdWriteCom(0x80+0X40);
LcdWriteCom(0x0f);
LcdWriteCom(0xc0|(2-0x40));
LcdWriteCom(0x0c);
Delay10ms();
LcdWriteData('0'+TIME[2]/16); //時
LcdWriteData('0'+(TIME[2]&0x0f));
LcdWriteData(':');
LcdWriteData('0'+TIME[1]/16); //分
LcdWriteData('0'+(TIME[1]&0x0f));
LcdWriteData(':');
LcdWriteData('0'+TIME[0]/16); //秒
LcdWriteData('0'+(TIME[0]&0x0f));
LcdWriteCom(0x80);
LcdWriteData('2');
LcdWriteData('0');
LcdWriteData('0'+TIME[6]/16); //年
LcdWriteData('0'+(TIME[6]&0x0f));
LcdWriteData(0x00);
LcdWriteData('0'+TIME[4]/16); //月
LcdWriteData('0'+(TIME[4]&0x0f));
LcdWriteData(0x01);
LcdWriteData('0'+TIME[3]/16); //日
LcdWriteData('0'+(TIME[3]&0x0f));
LcdWriteData(0x02);
LcdWriteCom(0x8D);
LcdWriteData('0'+(TIME[5]&0x07)-1); //星期
}
/*******************************************************************************
*函數名:Int0Configuration()
*函數功能 :配置外部中斷0
*輸入:無
*輸出 :無
*******************************************************************************/
voidInt0Configuration()
{
//設置INT0
IT0=1;//跳變沿出發方式(下降沿)
EX0=1;//打開INT0的中斷允許。
EA=1;//打開總中斷
}
/*******************************************************************************
*函數名:Int0()
*函數功能 :外部中斷0中斷函數
*輸入:無
*輸出 :無
*******************************************************************************/
voidInt0()interrupt0
{
Delay10ms();
if(K3==0)
{
SetState=~SetState;
SetPlace=0;
Ds1302Init();
}
}
/*******************************************************************************
*函數名:Delay10ms
*函數功能 :延時函數,延時10ms
*輸入:無
*輸出 :無
*******************************************************************************/
voidDelay10ms(void)//誤差0us
{
unsignedchara,b,c;
for(c=1;c>0;c--)
for(b=38;b>0;b--)
for(a=130;a>0;a--);
}