單片機(jī)數(shù)字電子鐘設(shè)計(jì)_第1頁
單片機(jī)數(shù)字電子鐘設(shè)計(jì)_第2頁
單片機(jī)數(shù)字電子鐘設(shè)計(jì)_第3頁
單片機(jī)數(shù)字電子鐘設(shè)計(jì)_第4頁
單片機(jī)數(shù)字電子鐘設(shè)計(jì)_第5頁
已閱讀5頁,還剩37頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

PAGEPAGE10單片機(jī)數(shù)字電子鐘設(shè)計(jì)前言成為人們?nèi)粘I钪胁豢缮俚谋匦杵贰S捎跀?shù)字集成電路的發(fā)展和石英晶體振蕩器的廣泛應(yīng)用,數(shù)字鐘表的精度遠(yuǎn)遠(yuǎn)超過老式機(jī)械鐘表,給人們生產(chǎn)生活帶來了極大的方便。另一方面,由于單片機(jī)技術(shù)的使用,大大擴(kuò)展了鐘表原先的功能,可以提供定時(shí)自動(dòng)報(bào)警、按時(shí)自動(dòng)打鈴、時(shí)間程序自動(dòng)控制及各種定時(shí)電氣的自動(dòng)啟用功能等。因此,研究數(shù)字鐘表及擴(kuò)大其應(yīng)用,有著非?,F(xiàn)實(shí)的意義。本設(shè)計(jì)主要介紹用單片機(jī)內(nèi)部的定時(shí)/計(jì)數(shù)器來實(shí)現(xiàn)電子時(shí)鐘的方法,本設(shè)計(jì)由單片機(jī)STC89C52,DS1302LED系統(tǒng)總體設(shè)計(jì)思路方案1、采用STC89C52單片機(jī)作為主控芯片,實(shí)現(xiàn)數(shù)字鐘表主控功能。2、采用液晶屏顯示當(dāng)前年、月、日、時(shí)、分、秒,鬧鈴時(shí)間及狀態(tài)等信息。3、采用六鍵鍵盤設(shè)定時(shí)間初始值,具體方法是按時(shí)間設(shè)定鍵依次進(jìn)入年、月、日、時(shí)、分、秒設(shè)定狀態(tài),然后通過向上、向下鍵修改設(shè)定值。正在設(shè)定的變量以閃爍狀態(tài)突出顯示。4、采用六鍵鍵盤設(shè)定鬧鈴時(shí)間,具體方法是按鬧鈴設(shè)定鍵依次進(jìn)入時(shí)、分設(shè)定狀態(tài),然后通過向上、向下鍵修改設(shè)定值。正在設(shè)定的變量以閃爍狀態(tài)突出顯示。5、采用DS1302實(shí)時(shí)時(shí)鐘芯片完成后臺(tái)計(jì)時(shí)功能,要求具有后備電源,即使主電源掉電時(shí)間仍然保持運(yùn)行。6、可設(shè)定鬧鈴使能,具體方法是按鬧鈴使能鍵,按一次打開,再按一次關(guān)閉。鬧鈴使能關(guān)閉時(shí)不報(bào)警。7、當(dāng)鬧鈴使能打開,且當(dāng)前時(shí)間到達(dá)鬧鈴設(shè)置時(shí)間,則蜂鳴器和LED紅燈同時(shí)報(bào)警,如不按取消鍵,報(bào)警時(shí)間為1分鐘。報(bào)警狀態(tài)可以通過按取消鍵退出。8、系統(tǒng)通過USB電源供電,單片機(jī)程序也可通過USB線串行下載。硬件實(shí)現(xiàn)及單元電路設(shè)計(jì)單片機(jī)數(shù)字鬧鐘硬件框圖如圖1-1所示。DS1302DS1302時(shí)鐘芯片按鍵輸入單片機(jī)主控芯片電源系統(tǒng)鬧鈴電路液晶顯示圖1-1 硬件框圖DS1302DS1302來。用戶可以通過按鍵設(shè)定時(shí)間初始值、鬧鈴初始值等。主電源和備份電源給各芯片供電。相關(guān)基礎(chǔ)介紹DS1302DS1302實(shí)時(shí)時(shí)鐘,可對秒、分、時(shí)、日、周、月以及帶閏年補(bǔ)償?shù)哪赀M(jìn)行計(jì)數(shù);用于高速數(shù)據(jù)暫存的318RAM最少引腳的串行I/O2.5~5.5V電壓工作范圍;2.5V時(shí)耗電小于300nA;用于時(shí)鐘或RAM數(shù)據(jù)讀/寫的單字節(jié)或多字節(jié)(脈沖方式)數(shù)據(jù)傳送方式;簡單的3線接口;可選的慢速充電(Vcc1)的能力。DS1302時(shí)鐘芯片包括實(shí)時(shí)時(shí)鐘/日歷和31字節(jié)的靜態(tài)RAM。它經(jīng)過一個(gè)簡單的串行接口與/3124hAM(上午下午)12hCPU進(jìn)行同步通信,并可采用突發(fā)方式一次傳RAMDS1302/Vcc2在雙電源系統(tǒng)中提供主電源,Vcc1DS1302Vcc1Vcc2Vcc2Vcc1+0.2VDS1302Vcc1,DS1302Vcc1.DS1302DS1302RST8SCLK840888,在多字節(jié)方式下為8248如果在傳送過程中置RST腳為低電平,則會(huì)中止本次數(shù)據(jù)傳送,并且I/OVcc≧2.5VSCLKRSTDS13022-12-1DS13022-1引腳號(hào)1表2-1DS1302引腳功能引腳名稱Vcc2功能主電源2,3X1,X232.768kHz4GND地線5RST復(fù)位/片選線6I/O串行數(shù)據(jù)輸入/輸出端(雙向)7SCLK串行數(shù)據(jù)輸入端8Vcc1后備電源DS13022-2(7)1;0DS13026015~1(A4~A0)指示操作單元的地址。最低有效位(0)0,表示要進(jìn)行1/輸出。圖2-2DS1302的控制字DS1302432(地址/1~51/RAMburst)方式。位6RAM,而0/9~31RAM31008RAM3131RAM。圖2-3DS1302數(shù)據(jù)讀/寫時(shí)序DS1302127BCD2-5,其中奇數(shù)為讀操作,偶數(shù)為寫操作。命令字節(jié)寄存器內(nèi)容命令字節(jié)寄存器內(nèi)容寄存器名取值范圍寫 讀 76543210秒寄存器80H81H00~59CH10sSEC分寄存器82H83H00~59010minMIN[小]時(shí)寄存器84H85H00~23或12/24010A/PHRHR01~12日期寄存器86H87H01~28,0010DATEDATE月份寄存器88H89H01~12000 10MMONTH周寄存器8AH8BH01~07000 00 DAY年寄存器8CH8DH00~9910YEARYEAR71DS1302耗的備份方式。通常在對DS1302年寄存器8CH8DH00~9910YEARYEARAM-PM/12-2471224125AM/PMPM,AM24510(20~23h。DS1302對記時(shí)精度影響不大。STC89C52STC89C52單片機(jī)概述STC89C52系列單片機(jī)是宏晶科技生產(chǎn)的單時(shí)鐘/機(jī)器周期(1T)的單片機(jī),是高速/低功耗/80518051,8-12MAX810STC89C52單片機(jī)特點(diǎn)5.5V-3.5V(5V;增強(qiáng)型8051CPU,1T,單時(shí)鐘/工作頻率范圍:0~40MHz,80510~80MHz;4K//8K/16k/32K/64K1280RAM;I/O(32/36,復(fù)位后為準(zhǔn)雙向口/弱上拉(8051I/OISP(在系統(tǒng)可編程)/IAP(在應(yīng)用可編程,無需專用編程器/仿真器。I/O20mA,可通過串口(P3.0/P3.1)直接下載用戶程序,數(shù)秒即可完成一片;EEPROM看門狗;MAX810(12M1K時(shí)鐘源:外部高精度晶體/R/CR/C振蕩器還是外部晶體/R/C振蕩器頻率為:5.0V單片機(jī)為:11MHz~17MHz;4168051/計(jì)數(shù)器,16T02PCA16外部中斷I/O4模塊,PowerDown通用全雙工異步串行口(UART);工作溫度范圍:-40~+85℃(工業(yè)級(jí))/0~75℃(商業(yè)級(jí));封裝:PDIP-40,PLCC-44。STC89C52單片機(jī)管腳及封裝STC89C52單片機(jī)有多種封裝形式,本設(shè)計(jì)中選用40DIP封裝,其管腳定義如圖2-4所示。圖2-4 STC89C52管腳圖硬件電路設(shè)計(jì)單片機(jī)電路2-5STC89C5211.0592MHz20pF10uF(C1)10K(R2)組成的阻容復(fù)位電路。圖2-5 單片機(jī)電路單片機(jī)管腳連接標(biāo)號(hào)中,P00—P07,P25—P27RXDTXDISPDS1302DS13022-6BT1Y2R10—R12DS1302SCLK、I/ORST圖2-6 DS1302時(shí)鐘電路液晶屏顯示電路顯示部分采用SMC1602液晶屏進(jìn)行數(shù)據(jù)顯示,其主要技術(shù)參數(shù)為:表2-3 液晶屏技術(shù)指標(biāo)接口信號(hào)說明如表2-4所示。表2-4液晶屏接口信號(hào)說明與單片機(jī)接口電路如圖2-7所示。圖2-7LCD與單片機(jī)接口電路按鍵電路UCH375USBUCH37512MHz20pF。管腳D0—D7CH375INTCH375CS、CH375A0、CH375WRCH375RDCH375RU2RU3UUD+UD-LUU鍵盤驅(qū)動(dòng)電路鍵盤驅(qū)動(dòng)電路如圖2-8所示。圖2-8鍵盤驅(qū)動(dòng)程序電路使用與單片機(jī)管腳直接相連的按鍵實(shí)現(xiàn)鍵盤。當(dāng)按鍵按下時(shí)管腳為低電平,無按鍵時(shí)為高電平。單片機(jī)采用查詢方式獲取按鍵信息。鬧鈴電路圖2-9 鬧鈴電路鬧鈴電路由單片機(jī)管腳驅(qū)動(dòng)蜂鳴器和報(bào)警燈實(shí)現(xiàn),當(dāng)鬧鈴時(shí)間到時(shí),蜂鳴器鳴響,紅燈報(bào)警。電源電路USB5V。同時(shí),USBPL23032-10圖2-10 供電及程序下載電路總電路圖經(jīng)上所述,畫出總電路圖,圖2-11圖2-11總電路圖軟件設(shè)計(jì)軟件流程圖本設(shè)計(jì)軟件流程如圖3-1所示。數(shù)據(jù)初始化數(shù)據(jù)初始化定時(shí)器初始化顯示初始化DS1302初始化進(jìn)入后臺(tái)while循環(huán)否有顯示標(biāo)志嗎?是時(shí)間數(shù)據(jù)顯示是到達(dá)鬧鈴時(shí)間了么嗎?報(bào)警否有鍵按下嗎?是按鍵處理否圖3-1軟件流程圖時(shí)間調(diào)整程序設(shè)計(jì)4250ms50ms//定義管腳//定義標(biāo)識(shí)volatilebitFlagKeyPress=0;//有鍵按下標(biāo)志volatilebitFlagShow=0;//定義管腳//定義標(biāo)識(shí)volatilebitFlagKeyPress=0;//有鍵按下標(biāo)志volatilebitFlagShow=0;//顯示標(biāo)志主程序下面介紹main.c主程序編寫。3.3.1.頭文件和一些宏定義#include#include#include#include<reg52.h><math.h>"1602.h""DS1302.h"#defineAMHOURADDR0xC0//存鬧鈴時(shí)的地址#defineAMMINUTEADDR0xC2//存鬧鈴分的地址#defineAMENADDR0xC4//存鬧鐘使能標(biāo)志的地址3.3.2.管腳、常量、變量定義3.3.2.管腳、常量、變量定義sbitLed_Alarm=P2^1;//報(bào)警燈sbitBeep_Alarm=P2^0;//蜂鳴器sbitKey_TMSet=P3^2;//時(shí)間設(shè)置sbitKey_AMSet=P3^3;//鬧鈴設(shè)置sbitKey_Up=P3^4;//上調(diào)sbitKey_Down=P3^5;//下調(diào)sbitKey_AMEn=P3^6;//鬧鈴開關(guān)sbitKey_Review=P3^7;//查看volatilebitFlagTMSet=0;//時(shí)間設(shè)置狀態(tài)標(biāo)志volatilebitFlagAMSet=0;//鬧鈴設(shè)置狀態(tài)標(biāo)志volatilebitFlagAMEn=0;//鬧鈴使能標(biāo)志,0,1volatilebitFlagAlarm=0;//鬧鈴狀態(tài)標(biāo)志//按鍵響應(yīng)用變量//按鍵響應(yīng)用變量ucharkeyvalue,keyTMSet,keyAMSet,keyUp,keyDown,keySet,keyAMEn,keyReview;//DS1302時(shí)鐘用變量SYSTEMTIMECurrentTime;//DS1302時(shí)鐘用變量SYSTEMTIMECurrentTime;ucharyear,month,day,hour,minute,second;ucharAMhour,AMminute,AMStart;//報(bào)警及存儲(chǔ)用變量//報(bào)警及存儲(chǔ)用變量//char*pSave;//字符串顯示用變量ucharstr1[6]="000000";ucharDate[9]="00-00-00",Time[9]="00:00:00";ucharhide,SetNum;uintCounter;3.3.3.函數(shù)聲明3.3.3.函數(shù)聲明//函數(shù)聲明//函數(shù)聲明voidint2str(intx,char*str);voidDelay1ms(unsignedintcount);voidData_Init();voidTimer0_Init();voidTimer0_ISR();voidKeyProcess(uintnum);3.3.4.各子程序3.3.4.各子程序////0--65536voidint2str(intx,char*str){inti=1;intwhile(x/tmp!=0){i++;tmp*=10;tmp*=10;}tmp=x;str[i]='\0';while(i>1){str[--i]='0'+(tmp%10);tmp/=10;}str[0]=tmp+'0';}voidDelay1ms(unsignedintcount)voidDelay1ms(unsignedintcount){unsignedinti,j;for(i=0;i<count;i++)for(j=0;j<120;j++);}//數(shù)據(jù)初始化void//數(shù)據(jù)初始化voidData_Init(){Beep_Alarm=1;Led_Alarm=1;AMStart=0;keyvalue=0;keyTMSet=1;keyAMSet=1;keyUp=1;keyDown=1;keyAMEn=1;keyReview=1;hide=0;Counter=0;SetNum=0;}//定時(shí)器0初始化//定時(shí)器0初始化voidTimer0_Init(){ET0=1;TMOD=1;TL0=TH0=TR0=1;}//允許定時(shí)器0中斷//定時(shí)器工作方式選擇//定時(shí)器賦予初值//啟動(dòng)定時(shí)器//定時(shí)器0中斷//定時(shí)器0中斷voidTimer0_ISR(void)interrupt1using0{TL0=0x06;TH0=0xf8;//定時(shí)器賦予初值////1Counter++;if(Counter>=450){FlagShow=1;Counter=0;設(shè)定閃爍標(biāo)志if(hide==1)hide=elsehide=1;}}voidKeyProcess(uintnum)voidKeyProcess(uintnum){switch(num){case1://TMSetSetNum=0-管設(shè)置;1-年;2-月;3-日;4-時(shí);5-分;6-SetNum1。if(FlagAMSet==1)//從鬧鈴時(shí)間設(shè)置進(jìn)入當(dāng)前時(shí)間設(shè)置{FlagAMSet=0;FlagTMSet=1;SetNum=1;}elseif(FlagTMSet==0)//從正常狀態(tài)進(jìn)入當(dāng)前時(shí)間設(shè)置{FlagTMSet=1;SetNum=1;}else //已經(jīng)在時(shí)間設(shè)置狀態(tài){SetNum++;}if(SetNum>=7) //已經(jīng)設(shè)定完畢,則存盤退出{SetNum=0;FlagTMSet=0;}break;case2: //AMSet鍵被按下。SetNum=0-關(guān)設(shè)置;1-時(shí);2-分,按一下SetNum加1if(FlagTMSet==1) //從當(dāng)前時(shí)間設(shè)置進(jìn)入鬧鈴時(shí)間設(shè)置{FlagTMSet=0;FlagAMSet=1;SetNum=1;//清屏L1602_string(1,1," ");L1602_string(2,1," ");//讀出當(dāng)前鬧鈴時(shí)間并顯示int2str(AMhour,str1);L1602_string(2,1,str1);int2str(AMminute,str1);L1602_string(2,4,str1);}elseif(FlagAMSet==0)//從正常狀態(tài)進(jìn)入鬧鈴時(shí)間設(shè)置{FlagAMSet=1;SetNum=1;//清屏//清屏L1602_string(1,1," ");L1602_string(2,1," ");L1602_string(2,4,str1);}else{SetNum++;}if(SetNum>=3){//存入鬧鈴時(shí)間//已經(jīng)在鬧鈴時(shí)間設(shè)置狀態(tài)//已經(jīng)設(shè)定完畢,則存盤退出并返回正常顯示界面Write1302(0x8e,0x00);//寫入允許Write1302(AMHOURADDR,AMhour);Delay1ms(500);Write1302(AMMINUTEADDR,AMminute);Delay1ms(500);Write1302(0x8e,0x80);//寫入禁止AMhour=Read1302(AMHOURADDR);AMminute=Read1302(AMMINUTEADDR);SetNum=0;FlagAMSet=0;}}break;case3: //Upif(FlagTMSet==1){switch(SetNum){case0:case1://年if(year<99)//如果在當(dāng)前時(shí)間設(shè)置狀態(tài)year++;Write1302(0x8e,0x00);//寫入允許DS1302_SetTime(DS1302_YEAR,year);Write1302(0x8e,0x80);//禁止寫入break;case2://月if(month<12)month++;Write1302(0x8e,0x00);//寫入允許DS1302_SetTime(DS1302_MONTH,month);Write1302(0x8e,0x80);//禁止寫入break;case3://日if(day<31)day++;Write1302(0x8e,0x00);//寫入允許DS1302_SetTime(DS1302_DAY,day);Write1302(0x8e,0x80);//禁止寫入break;case4://時(shí)if(hour<23)hour++;Write1302(0x8e,0x00);//寫入允許DS1302_SetTime(DS1302_HOUR,hour);Write1302(0x8e,0x80);//禁止寫入break;case5://分if(minute<59)minute++;Write1302(0x8e,0x00);//寫入允許DS1302_SetTime(DS1302_MINUTE,minute);Write1302(0x8e,0x80);//禁止寫入break;case6://秒if(second<59)second++;Write1302(0x8e,0x00);//寫入允許DS1302_SetTime(DS1302_SECOND,second);Write1302(0x8e,0x80);//禁止寫入break;}}if(FlagAMSet==1) //如果在鬧鈴設(shè)置狀態(tài){switch(SetNum){case1://時(shí)if(AMhour<23)AMhour++;break;case2://時(shí)if(AMminute<59)AMminute++;break;break;}}break;case4://Downif(FlagTMSet==1) //如果在當(dāng)前時(shí)間設(shè)置狀態(tài){switch(SetNum){case0:case1://年if(year>0)year--;Write1302(0x8e,0x00);//寫入允許DS1302_SetTime(DS1302_YEAR,year);Write1302(0x8e,0x80);//禁止寫入break;case2://月if(month>0)month--;Write1302(0x8e,0x00);//寫入允許DS1302_SetTime(DS1302_MONTH,month);Write1302(0x8e,0x80);//禁止寫入break;case3://日if(day>0)day--;Write1302(0x8e,0x00);//寫入允許DS1302_SetTime(DS1302_DAY,day);Write1302(0x8e,0x80);//禁止寫入break;case4://時(shí)if(hour>0)hour--;Write1302(0x8e,0x00);//寫入允許DS1302_SetTime(DS1302_HOUR,hour);Write1302(0x8e,0x80);//禁止寫入break;case5://分case5://分if(minute>0)minute--;Write1302(0x8e,0x00);//寫入允許DS1302_SetTime(DS1302_MINUTE,minute);Write1302(0x8e,0x80);//禁止寫入break;case6://秒if(second>0)second--;Write1302(0x8e,0x00);//寫入允許DS1302_SetTime(DS1302_SECOND,second);Write1302(0x8e,0x80);//禁止寫入break;}}if(FlagAMSet==1) //如果在鬧鈴設(shè)置狀態(tài){switch(SetNum){case1://時(shí)if(AMhour>0)AMhour--;break;case2://時(shí)if(AMminute>0)AMminute--;break;break;}}break;case5://鬧鈴使能鍵被按下if(FlagAMEn==0){//存入鬧鈴時(shí)間Write1302(0x8e,0x00);//寫入允許Write1302(AMENADDR,1);Delay1ms(500);Write1302(0x8e,0x80);//寫入禁止FlagAMEn=1;L1602_string(2,11,"Open");}elseelse{//存入鬧鈴時(shí)間Write1302(0x8e,0x00);//寫入允許Write1302(AMENADDR,0);Delay1ms(500);Write1302(0x8e,0x80);//寫入禁止FlagAMEn=0;L1602_string(2,11,"Close");}break;case6://ReviewLed_Alarm=1;Beep_Alarm=1;FlagAlarm=0;break;}}/********************************************************************/********************************************************************名稱:Main()***********************************************************************/voidmain(){uinti,j,temp;EA=0;EA=0;Timer0_Init(); //Timer0_Init(); //0Data_Init();Initial_DS1302();EA=1;//載入鬧鐘使能信號(hào)temp=Read1302(AMENADDR);if(temp==1){FlagAMEn=1;}}elseif(temp==0){FlagAMEn=0;}else{//存入鬧鈴時(shí)間Write1302(0x8e,0x00);//寫入允許Write1302(AMENADDR,0);Delay1ms(500);Write1302(0x8e,0x80);//寫入禁止FlagAMEn=0;}//載入鬧鈴時(shí)間//載入鬧鈴時(shí)間AMhour=Read1302(AMHOURADDR);if((AMhour>23)||(AMhour<0)){AMhour=0;//存入鬧鈴時(shí)間Write1302(0x8e,0x00);//Write1302(AMHOURADDR,AMhour);Delay1ms(500);Write1302(0x8e,0x80);//AMhour=Read1302(AMHOURADDR);}AMminute=Read1302(AMMINUTEADDR);if((AMminute>59)||(AMminute<0)){AMminute=0;//存入鬧鈴時(shí)間Write1302(0x8e,0x00);//寫入允許Write1302(AMMINUTEADDR,AMminute);Delay1ms(500);Write1302(0x8e,0x80);//寫入禁止AMminute=Read1302(AMMINUTEADDR);}//顯示初始化L1602_init();L1602_init();L1602_string(1,1," WelcometoMyL1602_string(2,1,"DigitalTimer!//延時(shí)for(i=0;i<1000;i++)for(j=0;j<1000;j++){;}//初始化屏幕L1602_string(1,1,"if(FlagAMEn==1){L1602_string(2,1,"}else{L1602_string(2,1,"}ALARM");Open");Close");while(1){if(FlagAlarm==1){Led_Alarm=0;Beep_Alarm=0;}else{Led_Alarm=1;Beep_Alarm=1;}//時(shí)間顯示if(FlagShow==1){//讀出日期時(shí)間值DS1302_GetTime(&CurrentTime);year=CurrentTime.Year;month=CurrentTime.Month;day=CurrentTime.Day;hour=CurrentTime.Hour;0))

minute=CurrentTime.Minute;second=CurrentTime.Second;DateToStr(&CurrentTime);TimeToStr(&CurrentTime);//FlagAlarm=0為鬧鈴關(guān)閉狀態(tài),F(xiàn)lagAlarm=1為鬧鈴打開狀態(tài),if((FlagAMEn==1)&&(hour==AMhour)&&(minute==AMminute)&&(AMStart=={FlagAlarm=1;AMStart=1;}elseif((FlagAMEn!=1)||(hour!=AMhour)||(minute!=AMminute)){FlagAlarm=0;AMStart=0;}//如果不在鬧鈴設(shè)置狀態(tài)則顯示當(dāng)前日期時(shí)間if(FlagAMSet==0){L1602_string(1,1,CurrentTime.DateString);L1602_string(2,1,CurrentTime.TimeString);}else//如果在鬧鈴狀態(tài)則顯示鬧鈴時(shí)和分{int2str(AMhour,str1);L1602_string(2,1,str1);L1602_string(2,3,":");int2str(AMminute,str1);L1602_string(2,4,str1);}//產(chǎn)生時(shí)間設(shè)定時(shí)的閃爍效果,只在閃爍標(biāo)志置位時(shí)運(yùn)行//SetNum=0-未設(shè)定;1-年;2-月;3-日;4-時(shí);5-分;6-秒if((FlagTMSet==1)&&(hide==1)){switch(SetNum){case0:break;case1: //年default:default:break;}}elseif((FlagAMSet==1)&&(hide==1)){switch(SetNum){case0:break;case1://時(shí)L1602_string(2,1," ");break;case2://分L1602_string(2,4," ");break;default:break;}}FlagShow=0;}L1602_string(1,1,"break;");case2: //月L1602_string(1,4,"");break;case3: //日L1602_string(1,7,"");break;case4: //時(shí)L1602_string(2,1,"");break;case5: //分L1602_string(2,4,"");break;case6: //秒L1602_string(2,7,"");break;elseif((Key_Down)&&(keyDown==0)){FlagKeyPress=1;keyvalue=4;}elseif((Key_AMEn)&&(keyAMEn==0)){FlagKeyPress=1;keyvalue=5;}//以下為鍵盤查詢,當(dāng)有按鍵從按下到彈起時(shí),該按鍵被響應(yīng)。if((Key_TMSet)&&(keyTMSet==0)){FlagKeyPress=1;keyvalue=1;}//以下為鍵盤查詢,當(dāng)有按鍵從按下到彈起時(shí),該按鍵被響應(yīng)。if((Key_TMSet)&&(keyTMSet==0)){FlagKeyPress=1;keyvalue=1;}elseif((Key_AMSet)&&(keyAMSet==0)){FlagKeyPress=1;keyvalue=elseif((Key_Up)&&(keyUp==0)){FlagKeyPress=1;keyvalue=3;}elseif((Key_Review)&&(keyReview==0)){FlagKeyPress=1;keyvalue=6;}if(FlagKeyPress==1){KeyProcess(keyvalue);FlagKeyPress=0;}if(!Key_TMSet)keyTMSet=elsekeyTMSet=1;if(!Key_AMSet)keyAMSet=elsekeyAMSet=1;if(!Key_Up)keyUp=0;elsekeyUp=1;if(!Key_Down)keyDown=elsekeyDown=1;if(!Key_AMEn)keyAMEn=elsekeyAMEn=1;if(!Key_Review)keyReview=0;elsekeyReview=1;Delay1ms(100);}}.PCB4.1.1.定元件的封裝①打開網(wǎng)絡(luò)表(可以利用一些編輯器輔助編輯) ,將所有封裝瀏覽一遍,確保所有元件的封裝都正確無誤并且元件庫中包含所有元件的封裝, 網(wǎng)絡(luò)表中所有信息全部寫,一面載入出問題,或PCBBOM不連續(xù)。②標(biāo)準(zhǔn)元件全部采用公司統(tǒng)一元件庫中的封裝。③④⑥⑤元件庫中不存在的封裝,應(yīng)自己建立元器件庫。PCB①根據(jù)PCB結(jié)構(gòu)圖,或相應(yīng)的模板建立PCB文件,包括安裝孔、禁布區(qū)等相關(guān)信息。②尺寸標(biāo)注。在鉆孔層中應(yīng)標(biāo)明 PCB的精確結(jié)構(gòu),且不可以形成封閉尺寸標(biāo)注。載入網(wǎng)絡(luò)表①載入網(wǎng)表并排除所有載入問題,具體請看《 PROTEL技術(shù)大全。其他軟件載問題有很多相似之處,可以借鑒。②如果使用PROTEL,網(wǎng)表須載入兩次以上(沒有任何提示信息)才可以確認(rèn)載入無誤。布局①首先要確定參考點(diǎn)。一般參考點(diǎn)都設(shè)置在左邊和底邊的邊框線的交點(diǎn)(或延長線的交點(diǎn))上或印制板的插件的第一個(gè)焊盤。②一但參考點(diǎn)確定以后,元件布局、布線均以此參考點(diǎn)為準(zhǔn)。布局推薦使用25MIL網(wǎng)格。③根據(jù)要求先將所有有定位要求的元件固定并鎖定。④布局的基本原則遵循先難后易、先大后小的原則。原器件??偟倪B線盡可能的短,關(guān)鍵信號(hào)線最短。強(qiáng)信號(hào)、弱信號(hào)、高電壓信號(hào)和弱電壓信號(hào)要完全分開。高頻元件間隔要充分。模擬信號(hào)、數(shù)字信號(hào)分開。⑤相同結(jié)構(gòu)電路部分應(yīng)盡可能采取對稱布局。⑥按照均勻分布、重心平衡、版面美觀的標(biāo)準(zhǔn)來優(yōu)化布局。.PCB設(shè)計(jì)遵循的規(guī)則①地線回路規(guī)則:圖4-1地線回路規(guī)則環(huán)面積越小,對外的輻射越少,接收外界的干擾也越小。針對這一規(guī)則,在地平面分割時(shí),要考慮到地平面與重要信號(hào)走線的分布,防止由于地平面開槽等帶來的問題;在雙層板設(shè)計(jì)中,在為電源留下足夠空間的情況下,應(yīng)該將留下的部分用參考地填充,且增加一些必要的過孔,將雙面信號(hào)有效連接起來,對一些關(guān)鍵信號(hào)盡量采用地線隔離,對一些頻率較高的設(shè)計(jì),需特別考慮其地平面信號(hào)回路問題,建議采用多層板為宜。②竄擾控制竄擾(CrossTalk)是指PCB主要是由于平行線間的分布電容和分布電感的作用??朔Z擾的主要措施是:加大平行布線的間距,遵循 3W規(guī)則。在平行線間插入接地的隔離線。減少布線層與地平面的距離③屏蔽保護(hù)圖4-2屏蔽保護(hù)對應(yīng)地線回路規(guī)則,實(shí)際上也是為了盡量減小信號(hào)的回路面積,多用于一些比較重要的信號(hào),如時(shí)鐘信號(hào),同步信號(hào);對一些特別重要,頻率特別高的信號(hào),應(yīng)該考慮采用銅軸電纜屏蔽結(jié)構(gòu)設(shè)計(jì),即將所布的線上下左右用地線隔離,而且還要考慮好如何有效的讓屏蔽地與實(shí)際地平面有效結(jié)合。④走線方向控制規(guī)則相鄰層的走線方向成正交結(jié)構(gòu),避免將不同的信號(hào)線在相鄰層走成同一方向,以減少不必要的層間竄擾;當(dāng)由于板結(jié)構(gòu)限制(如某些背板)難以避免出現(xiàn)該情況,特別是信號(hào)速率較高時(shí),應(yīng)考慮用地平面隔離各布線層,用地信號(hào)線隔離各信號(hào)線。⑤電源與地線層的完整性規(guī)則對于導(dǎo)通孔密集的區(qū)域,要注意避免孔在電源和地層的挖空區(qū)域相互連接,形成對平面層的分割,從而破壞平面層的完整性,并進(jìn)而導(dǎo)致信號(hào)線在地層 的回路面積增大數(shù)字電子鐘的PCB通過PCB軟件,做出數(shù)字電子鐘的PCB圖,如圖4-3.圖4-3 數(shù)字電子鐘的PCB圖USB提供例程在uVision4環(huán)境下編譯,如果是其他版本uVision,只需將所有.c和.h 文拷貝至新建項(xiàng)目,重新編譯即可。當(dāng)編譯生成.hex文件后,就可以下載并進(jìn)行調(diào)試了。USBUSBPL2303_Prolific_DriverInstaller_v130.exeUSBUSB機(jī)和其他硬件]-[設(shè)備管理器],在“端口”分支下有(ProlificUSB-to-SerialCommPort(COMX)XUSBCOM圖4-3成功安裝USB轉(zhuǎn)串口驅(qū)動(dòng)示意圖下載程序打開STC單片機(jī)下載軟件文件夾,點(diǎn)擊運(yùn)行STC_ISP_V481.exe程序,出現(xiàn)如下界面。MCUMCUSTC89C52COM(與剛才安裝的COM,最高波特率和最低波特率選擇高速,如果不成功則嘗試降低撥特率,并打開正確的.hex數(shù)據(jù)文件。點(diǎn)擊“Download/下載”按紐,窗口出現(xiàn)提示:Chinese:正在嘗試與MCU/Chinese:正在嘗試

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論