找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開(kāi)始

搜索
查看: 3196|回復(fù): 0
打印 上一主題 下一主題
收起左側(cè)

電子時(shí)鐘實(shí)驗(yàn)報(bào)告

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:267058 發(fā)表于 2017-12-26 13:16 | 只看該作者 回帖獎(jiǎng)勵(lì) |倒序?yàn)g覽 |閱讀模式
一, 實(shí)驗(yàn)?zāi)康?br /> 1. 學(xué)習(xí)8051定時(shí)器時(shí)間計(jì)時(shí)處理、按鍵掃描及LED數(shù)碼管顯示的設(shè)計(jì)方法。
2. 設(shè)計(jì)任務(wù)及要求 利用實(shí)驗(yàn)平臺(tái)上4個(gè)LED數(shù)碼管, 設(shè)計(jì)帶有鬧鈴功能的數(shù)字時(shí)鐘
二,實(shí)驗(yàn)要求
A.基本要求:
1. 在4位數(shù)碼管上顯示當(dāng)前時(shí)間。顯示格式“時(shí)時(shí)分分”
2. 由LED閃動(dòng)做秒顯示。
3. 利用按鍵可對(duì)時(shí)間及鬧玲進(jìn)行設(shè)置,并可顯示鬧玲時(shí)間。當(dāng)鬧玲時(shí)間到蜂鳴器發(fā)出聲響,按停止鍵使可使鬧玲聲停止。
4.實(shí)現(xiàn)秒表功能(百分之一秒顯示)
B.擴(kuò)展部分:
1.日歷功能(能對(duì)年,月,日,星期進(jìn)行顯示,分辨平年,閏年以及各月天數(shù),并調(diào)整)
2.音樂(lè)鬧鈴(鈴音可選擇,鬧鈴被停止后,閃爍顯示當(dāng)前時(shí)刻8秒后,或按鍵跳入正常時(shí)間顯示狀態(tài))
3.定時(shí)功能(設(shè)定一段時(shí)間長(zhǎng)度,定時(shí)到后,閃爍提示)
4.倒計(jì)時(shí)功能(設(shè)定一段時(shí)間長(zhǎng)度,能實(shí)現(xiàn)倒計(jì)時(shí)顯示,時(shí)間長(zhǎng)減到0時(shí),閃爍提示)
5.鬧鈴重響功能(鬧鈴被停止后,以停止時(shí)刻開(kāi)始,一段時(shí)間后鬧鈴重響,且重響時(shí)間的間隔可調(diào))
三,實(shí)驗(yàn)基本原理
利用單片機(jī)定時(shí)器完成計(jì)時(shí)功能,定時(shí)器0計(jì)時(shí)中斷程序每隔0.01s中斷一次并當(dāng)作一個(gè)計(jì)數(shù),設(shè)定定時(shí)1秒的中斷計(jì)數(shù)初值為100,每中斷一次中斷計(jì)數(shù)初值減1,當(dāng)減到0時(shí),則表示1s到了,秒變量加1,同理再判斷是否1min鐘到了,再判斷是否1h到了。
為了將時(shí)間在LED數(shù)碼管上顯示,可采用靜態(tài)顯示法和動(dòng)態(tài)顯示法,由于靜態(tài)顯示法需要譯碼器,數(shù)據(jù)鎖存器等較多硬件,可采用動(dòng)態(tài)顯示法實(shí)現(xiàn)LED顯示,通過(guò)對(duì)每位數(shù)碼管的依次掃描,使對(duì)應(yīng)數(shù)碼管亮,同時(shí)向該數(shù)碼管送對(duì)應(yīng)的字碼,使其顯示數(shù)字。由于數(shù)碼管掃描周期很短,由于人眼的視覺(jué)暫留效應(yīng),使數(shù)碼管看起來(lái)總是亮的,從而實(shí)現(xiàn)了各種顯示。
四,實(shí)驗(yàn)設(shè)計(jì)分析
針對(duì)要實(shí)現(xiàn)的功能,采用AT89S51單片機(jī)進(jìn)行設(shè)計(jì),AT89S51 單片機(jī)是一款低功耗,高性能CMOS8位單片機(jī),片內(nèi)含4KB在線可編程(ISP)的可反復(fù)擦寫(xiě)1000次的Flash只讀程序存儲(chǔ)器,器件采用高密度、非易失性存儲(chǔ)技術(shù)制造,兼容標(biāo)準(zhǔn)MCS- 51指令系統(tǒng)及80C51引腳結(jié)構(gòu)。這樣,既能做到經(jīng)濟(jì)合理又能實(shí)現(xiàn)預(yù)期的功能。
在程序方面,采用分塊設(shè)計(jì)的方法,這樣既減小了編程難度、使程序易于理解,又能便于添加各項(xiàng)功能。程序可分為鬧鐘的聲音程序、時(shí)間顯示程序、日期顯示程序,秒表顯示程序,時(shí)間調(diào)整程序、鬧鐘調(diào)整程序、定時(shí)調(diào)整程序,延時(shí)程序等。運(yùn)用這種方法,關(guān)鍵在于各模塊的兼容和配合,若各模塊不匹配會(huì)出現(xiàn)意想不到的錯(cuò)誤。
首先,在編程之前必須了解硬件結(jié)構(gòu)尤其是各引腳的用法,以及內(nèi)部寄存器、存儲(chǔ)單元的用法,否則,編程無(wú)從下手,電路也無(wú)法設(shè)計(jì)。這是前期準(zhǔn)備工作。第二部分是硬件部分:依據(jù)想要的功能分塊設(shè)計(jì)設(shè)計(jì),比如輸入需要開(kāi)關(guān)電路,輸出需要顯示驅(qū)動(dòng)電路和數(shù)碼管電路等。第三部分是軟件部分:先學(xué)習(xí)理解匯編語(yǔ)言的編程方法再根據(jù)設(shè)計(jì)的硬件電路進(jìn)行分塊的編程調(diào)試,最終完成程序設(shè)計(jì)。第四部分是軟件畫(huà)圖部分:設(shè)計(jì)好電路后進(jìn)行畫(huà)圖,包括電路圖和仿真圖的繪制。第五部分是軟件仿真部分:軟硬件設(shè)計(jì)好后將軟件載入芯片中進(jìn)行仿真,仿真無(wú)法完成時(shí)檢查軟件程序和硬件電路并進(jìn)行修改直到仿真成功。第六部分是硬件實(shí)現(xiàn)部分:連接電路并導(dǎo)入程序檢查電路,若與設(shè)計(jì)的完全一樣一般能實(shí)現(xiàn)想要的功能。最后進(jìn)行功能擴(kuò)展,在已經(jīng)正確的設(shè)計(jì)基礎(chǔ)上,添加額外的功能!
五,實(shí)驗(yàn)要求實(shí)現(xiàn)
A.電路設(shè)計(jì)
1. 整體設(shè)計(jì)
此次設(shè)計(jì)主要是應(yīng)用單片機(jī)來(lái)設(shè)計(jì)電子時(shí)鐘,硬件部分主要分以下電路模塊:顯示電路用8個(gè)共陰數(shù)碼管分別顯示,星期(年份),小時(shí)、分鐘(月份)和秒(日),通過(guò)動(dòng)態(tài)掃描進(jìn)行顯示,從而避免了譯碼器的使用,同時(shí)節(jié)約了I/0端口,使電路更加簡(jiǎn)單。單片機(jī)采用AT89S51系列,這種單片機(jī)應(yīng)用簡(jiǎn)單,適合電子鐘設(shè)計(jì)。
電路的總體設(shè)計(jì)框架如下:
        2. 分塊設(shè)計(jì)
模塊電路主要分為:輸入部分、輸出部分、復(fù)位和晶振電路。
2.1 輸入部分
輸入信號(hào)主要是各種模式選擇和調(diào)整信號(hào),由按鍵開(kāi)關(guān)提供。
以下為輸入部分樣例:
在本實(shí)驗(yàn)中主要用用P3口輸入按鍵信號(hào),還用到了特殊的P0口。對(duì)于P0口,由于其存在高阻狀態(tài),為了實(shí)現(xiàn)開(kāi)關(guān)功能,給其添加上拉電阻,具體如下圖所示:
2.2 輸出部分
本電路的輸出信號(hào)為7段數(shù)碼管的位選和段選信號(hào),鬧鈴脈沖信號(hào),提示燈信號(hào)。
本實(shí)驗(yàn)的數(shù)碼管是共陰的,為了防止段選信號(hào)不能驅(qū)動(dòng)數(shù)碼管,故在P1口連接上拉電阻后,再送段選信號(hào),以提高驅(qū)動(dòng),位選信號(hào)直接從P2口接入,如下圖:
鬧鈴由P2.6端輸出,模塊如下:
2.3 晶振與復(fù)位電路
本實(shí)驗(yàn)單片機(jī)時(shí)鐘用內(nèi)部時(shí)鐘,模塊如下:
復(fù)位電路為手動(dòng)復(fù)位構(gòu)成,模塊如下:
各模塊拼接組合,電路總體設(shè)計(jì)圖如下:
B.程序設(shè)計(jì)
B.1 程序總體設(shè)計(jì)
本實(shí)驗(yàn)用匯編程序完成.
程序總的流程圖如下:
        NO
        
   
YES
                                 
結(jié)合電路圖,程序設(shè)計(jì)的整體思路為:
接通電源,數(shù)碼管顯示星期數(shù),時(shí),分,秒。并且走時(shí)顯示LED燈每隔1秒改變一次明暗,此為正常工作模式。以下為在該工作方式下模式選擇的按鍵方式:
1.  按1鍵——日期模式。顯示年月日且可調(diào)整,調(diào)整狀態(tài)指示燈亮。
日期調(diào)整對(duì)應(yīng)鍵如下:
6鍵——年(千位,百位),按一次該位加1
5鍵——年(十位,個(gè)位),按一次該位加1
4鍵——月,按一次該位加1
3鍵——日,按一次該位加1
0鍵——調(diào)整狀態(tài)指示燈滅,返回主程序,顯示時(shí)間
2.  按2鍵——調(diào)時(shí)模式。顯示時(shí)分秒且可調(diào)整,調(diào)整狀態(tài)指示燈亮。
時(shí)間調(diào)整對(duì)應(yīng)鍵如下:
6鍵——時(shí),按一次該位加1
5鍵——分,按一次該位加1
4鍵——秒,按一次該位清0
0鍵——調(diào)整狀態(tài)指示燈滅,返回主程序,顯示時(shí)間
3.  按3鍵——鬧鈴調(diào)整模式。顯示鬧鈴時(shí)刻且可調(diào)整,調(diào)整狀態(tài)指示燈亮。
鬧鈴調(diào)整對(duì)應(yīng)鍵如下:
5鍵——時(shí),按一次該位加1
4鍵——分,按一次該位加1
0鍵——調(diào)整狀態(tài)指示燈滅,返回主程序,顯示時(shí)間
4.  長(zhǎng)按4鍵——定時(shí)調(diào)整(倒計(jì)時(shí))模式。顯示定時(shí)長(zhǎng)度且可調(diào)整,調(diào)整狀態(tài)顯示燈亮。
定時(shí)調(diào)整對(duì)應(yīng)鍵如下:
6鍵——分,按一次該位加1
5鍵——秒,按一次該位加1
4鍵——開(kāi)啟定時(shí)功能,并顯示倒計(jì)時(shí)
0鍵——調(diào)整狀態(tài)指示燈滅,返回主程序,顯示時(shí)間
5.  按5鍵鈴聲測(cè)試,揚(yáng)聲器播放音樂(lè)。
6.  按下7鍵,進(jìn)入秒表模式,顯示秒表走時(shí)。
撥上7鍵,秒表暫停;按下7鍵,秒表又繼續(xù)走時(shí)。
按下8鍵,秒表清零。
0鍵——調(diào)整狀態(tài)指示燈滅,返回主程序,顯示時(shí)間
7.  按下8鍵,數(shù)碼管熄滅,時(shí)鐘仍在走時(shí),進(jìn)入節(jié)能模式。
撥上8鍵,數(shù)碼管亮,恢復(fù)普通工作模式。
8.   9鍵為鬧鈴啟動(dòng)(停止)鍵,按下可以選擇是否要鬧鈴,以及在鬧鈴響起時(shí),按此鍵可以停止鬧鈴。
9.   10鍵為鈴聲選擇開(kāi)關(guān),按下與否,可以選擇兩手音樂(lè)。
10.   11鍵為鬧鈴重響控制開(kāi)關(guān),重響功能開(kāi)啟時(shí),從鬧鈴隨音樂(lè)結(jié)束而結(jié)束的時(shí)刻開(kāi)始,或從手動(dòng)按9鍵停止鬧鈴的時(shí)刻開(kāi)始定時(shí),一段時(shí)間后鬧鈴重響。
11.   12鍵為鬧鈴重響間隔選擇開(kāi)關(guān),可選兩個(gè)定時(shí)長(zhǎng)度,以便在鬧鈴重響功能開(kāi)啟時(shí),鬧鈴初次響后,過(guò)一段時(shí)間鬧鈴繼續(xù)響。
B.2 程序主要模塊
B.2.1 延時(shí)模塊
數(shù)碼管顯示動(dòng)態(tài)掃描時(shí),用到延時(shí)程序,這里使用延遲1ms的程序,此程序需要反復(fù)調(diào)用程序如下:
D_1MS:
MOV R7,#2
D_5:
MOV R2,#250
DJNZ R2,$
DJNZ R7,D_5
RET
除數(shù)碼管動(dòng)態(tài)掃描外,數(shù)碼管的閃爍提示,以及音樂(lè)模塊也用到了延時(shí),只是延時(shí)的長(zhǎng)短不同罷了,在此不再贅述。
B.2.2中斷服務(wù)程序
本實(shí)驗(yàn)中,計(jì)數(shù)器T0,T1中斷都有運(yùn)用,其中T0中斷為時(shí)鐘定時(shí)所用,T1中斷用于音樂(lè)播放。T0的定時(shí)長(zhǎng)度為0.01s,工作于方式1,計(jì)數(shù)1次,時(shí)長(zhǎng)1us,故計(jì)數(shù)器計(jì)數(shù)10000次,進(jìn)入中斷,計(jì)數(shù)初值為65536-10000=55536=#0D8F0,裝滿定時(shí)器需要0.01s的時(shí)間,從而100次中斷為一秒,一秒之后,判斷是否到60秒,若不到則秒加一,然后返回,若到,則秒賦值為0,分加一,依次類推。包括日期顯示的功能也是如此。另外,由于要實(shí)現(xiàn)倒計(jì)時(shí)功能,因此在中斷程序中還要加入減一的寄存器,需要時(shí)將其進(jìn)行顯示;谝陨峡紤],以R3為倒計(jì)時(shí)中的秒,R4為倒計(jì)時(shí)的分,當(dāng)秒加1時(shí)R3減一,減到0之后,秒賦值為59,分減一,直到分為0。
以下為定時(shí)中斷流程圖:
                                                     NO
                                      YES
                                                             YES
                       NO
計(jì)數(shù)器T1工作于方式1, 當(dāng)調(diào)用響鈴程序時(shí),其計(jì)數(shù)功能開(kāi)啟,為音樂(lè)音調(diào)不同頻率的方波的形成,提供延時(shí)。其中斷服務(wù)程序就是根據(jù)音調(diào)改變音樂(lè)方波輸出口電平的高低,用語(yǔ)句 CPL實(shí)現(xiàn)。
中斷服務(wù)程序中日歷的實(shí)現(xiàn)較為復(fù)雜,要考慮平年,閏年,特殊的2月,每月的天數(shù)的不盡相同。具體的邏輯判斷方法為:首先,要考慮年份是不是閏年,閏年的判斷方法是:將年份除以100,若能整除,則將年份除以400,若還能整除,則為閏年,若不能,則為平年;若不能被100整除,則判斷是否能被4整除,若能,則為閏年,若不能則為平年。只有2月與平、閏年相關(guān),因此在閏年和平年的子程序中,要判斷是不是2月,若是則在相應(yīng)的年中進(jìn)行日期的增加,若不是則轉(zhuǎn)入平時(shí)的月份。其中1、3、5、7、8、10、12月是每月31天,4、6、9、11月為每月30天。
日歷進(jìn)位判斷流程圖如下:
本實(shí)驗(yàn)用8個(gè)數(shù)碼管,剛好能顯示年,月,日,掃描顯示與時(shí)間的掃描顯示類似。年比較特殊,由兩個(gè)寄存器存儲(chǔ),個(gè)位,十位為0時(shí),表明年數(shù)能被100整除,若此時(shí)千位,百位
組成兩位數(shù)能被4整除,則年數(shù)被400整除,為閏年。若十位,個(gè)位組成兩位數(shù)能被4整除,則年數(shù)能被4整除,為閏年。
B.2.3主程序
主程序主要對(duì)按鍵進(jìn)行掃描,以及判斷定時(shí)和鬧鈴時(shí)間是否已到,若到則調(diào)用相關(guān)程序,該段程序如下:
MAIN:
JNB P3.0,DATETZ                     ;按下0鍵,顯示日期并可對(duì)日期進(jìn)行調(diào)整
JNB P3.1,ZSTZ1                      ;按下1鍵,顯示時(shí)間,并可調(diào)時(shí)
JNB P3.2,NLTZZ                      ;按下2鍵,進(jìn)行鬧鈴設(shè)置
JNB P3.3,DSTZ                       ;按下3鍵,進(jìn)行定時(shí)設(shè)置
JNB P3.4,CESHI                       ;鬧鈴測(cè)試
JNB P3.6,STOPWATCHTZ               ;按下6鍵,進(jìn)入秒表方式
ACALL DISP                          ;調(diào)用時(shí)鐘顯示子程序
JNB P0.6,RERING                     ;判斷是否開(kāi)啟鬧鈴重響功能
RE:  JNB P2.7,DSPDKQ               ;判斷是否開(kāi)啟鬧鈴功能,沒(méi)開(kāi)則去判斷定時(shí)
FMQPD:                             ;判斷定時(shí)值R4,R3是否到零、鬧鈴時(shí)刻是否已到
MOV A,HOUR;
SUBB A,38H;
JZ FEN                              ;判斷小時(shí)數(shù)是否到鬧鈴所定時(shí)間,若到,則對(duì)分進(jìn)行判斷;若不到,則對(duì)定時(shí)進(jìn)行判斷
AJMP DSPDKQ
FEN:
MOV A,MINUTE;
SUBB A,37H;
JZ MIAO                             ;判斷分是否到鬧鈴所定時(shí)間,若到,則對(duì)秒進(jìn)行判斷;若不到,則對(duì)定時(shí)進(jìn)行判斷
AJMP DSPDKQ
MIAO:
MOV A,SECOND
SUBB A,#0
JZ SHENGYIN1                        ;判斷秒是否到鬧鈴所定時(shí)間,若到,則時(shí),分,秒都到達(dá)鬧鈴時(shí)刻,進(jìn)入響鈴子程序;若不到則判斷定時(shí)
AJMP DSPDKQ
RERING:                                ;鬧鈴重響判斷程序
JNB F0, RE                              ;標(biāo)志位F0為0,不進(jìn)行鬧鈴重響設(shè)定
CPL F0
MOV 3CH,#1                              ;定時(shí)判斷標(biāo)志位賦1, 定時(shí)判斷功能開(kāi)啟
JNB P0.7,M1                              ;鬧鈴重響間隔時(shí)間選取
MOV R4,#0                               ;鬧鈴重響間隔30秒
MOV R3,#30
AJMP MAIN
M1:                                       ;鬧鈴重響間隔60秒
MOV R4,#1
MOV R3,#0
AJMP MAIN
DSPDKQ:                             ;判斷是否應(yīng)該進(jìn)行定時(shí)判斷
MOV A,3CH                           ;3CH是引入的判斷因子,當(dāng)其為0時(shí),不對(duì)定時(shí)時(shí)間是否到0進(jìn)行判斷
JNZ DSPD2                           ;當(dāng)3CH不是0時(shí),跳轉(zhuǎn)到定時(shí)判斷程序
AJMP MAIN
DSPD2:
MOV A,R4;
JZ S_PD                             ;R4所存定時(shí)分?jǐn)?shù)為0,則轉(zhuǎn)而判斷R3所存定時(shí)秒數(shù)
AJMP MAIN;
S_PD:
MOV A,R3;
JNZ MAIN                          ;R4,R3所存參數(shù)減為0, 定時(shí)長(zhǎng)度已到
JNB P0.6,SHENGYIN2               ;鬧鈴重響功能開(kāi)啟時(shí),跳入響鈴程序
AJMP TISHI                          ;不是鬧鈴重響定時(shí),則定時(shí)時(shí)間到時(shí),跳入提示程序
AJMP MAIN
CESHI:
ACALL RING
AJMP MAIN
SHENGYIN1:                          ;調(diào)用響鈴子程序
LCALL  RING
AJMP MAIN
SHENGYIN2:
SETB F0                           ;鬧鈴重響標(biāo)志位設(shè)定
LCALL RING                       ;響鈴
CLR F0                             ;標(biāo)志位復(fù)位
AJMP MAIN
NLTZZ:
AJMP NLTZ1                           ;跳入鬧鈴調(diào)整程序
DSTZ:
AJMP DSTZ1                          ;跳入定時(shí)調(diào)整程序
DATETZ:
AJMP DATETZ1                        ;跳入日期調(diào)整程序
STOPWATCHTZ:
AJMP STOPWATCHTZ1                  ;跳入秒表程序
B.2.4  顯示子程序
8個(gè)數(shù)碼管輪流進(jìn)行顯示,分別顯示1ms,依賴人的視覺(jué) 暫留效應(yīng),給人以數(shù)碼管持續(xù)高亮的錯(cuò)覺(jué)。該段程序如下:
DISP:                                  ;時(shí)間顯示子程序
JNB P3.7,OUT1            ;判斷節(jié)能開(kāi)關(guān)7是否按下,按下則數(shù)碼管不顯示,延長(zhǎng)其壽命
MOV DPTR,#LEDTAB
MOV A,SECOND                             ;顯示當(dāng)前時(shí)間秒位
MOV B,#10
DIV AB                                     ;A存十位,B存?zhèn)位
MOVC A,@A+DPTR
MOV P1,A
CLR SEC_S
ACALL D_1MS                               ;顯示當(dāng)前時(shí)間秒十位
SETB SEC_S
MOV A,B
MOVC A,@A+DPTR
MOV P1,A
CLR SEC_G
ACALL D_1MS                               ;顯示當(dāng)前時(shí)間秒個(gè)位
SETB SEC_G
MOV A,MINUTE                              ;顯示當(dāng)前時(shí)間分位
MOV B,#10
DIV AB
MOVC A,@A+DPTR
MOV P1,A
CLR MIN_S
ACALL D_1MS
SETB MIN_S
MOV A,B
MOVC A,@A+DPTR
MOV P1,A
CLR MIN_G
ACALL D_1MS
SETB MIN_G
MOV A,HOUR                                      ;顯示當(dāng)前時(shí)間時(shí)位
MOV B,#10
DIV AB
MOV DPTR,#LEDTAB
MOVC A,@A+DPTR
MOV P1,A
CLR HOU_S
ACALL D_1MS
SETB HOU_S
MOV A,B
MOVC A,@A+DPTR
MOV P1,A
CLR HOU_G
ACALL D_1MS
SETB HOU_G
MOV A,WEEK                                       ;顯示當(dāng)前星期數(shù)
MOVC A,@A+DPTR
MOV P1,A
CLR Y_S
ACALL D_1MS
SETB Y_S
OUT1:
RET
日期的顯示,秒表的顯示,倒計(jì)時(shí)的顯示,調(diào)鬧鈴,調(diào)定時(shí)的顯示,閃爍的顯示程序與以上的的掃描相似,有的以子程序的方式出現(xiàn),通過(guò)子程序調(diào)用語(yǔ)句ACALL調(diào)用;有點(diǎn)直接嵌套在相應(yīng)的程序里面,順序執(zhí)行,或者用調(diào)轉(zhuǎn)語(yǔ)句AJMP調(diào)用。
B.2.5 調(diào)整程序
時(shí)鐘包括很多調(diào)整,如時(shí)間,日期,鬧鈴,秒表等,本程序,設(shè)計(jì)了相應(yīng)的調(diào)整程序段,通過(guò)對(duì)應(yīng)的按鍵,程序跳入調(diào)整模式或功能模式。在此著重分析一下鬧鈴重響以及定時(shí)功能的實(shí)現(xiàn)過(guò)程,這兩個(gè)功能都靈活運(yùn)用了標(biāo)志位。
1,定時(shí)功能運(yùn)用了一個(gè)內(nèi)存地址3CH為標(biāo)志位,只有3CH中所存值非0時(shí),在主程序中才判斷定時(shí)是否已到。3CH值初始化為0,程序開(kāi)始運(yùn)行時(shí)并不判斷定時(shí)是否已到。當(dāng)通過(guò)按鍵進(jìn)入定時(shí)初值設(shè)置,并開(kāi)始倒計(jì)時(shí),3CH的值被賦為1,
當(dāng)?shù)褂?jì)時(shí)顯示到0時(shí),進(jìn)入閃爍提示,提示結(jié)束后3CH又被賦值為0,程序回到主程序后,不必判斷定時(shí)是否已到。
但當(dāng)?shù)褂?jì)時(shí)未完,按返回鍵回到主程序時(shí),3CH的值為1,故在主程序判斷未完成的定時(shí)任務(wù),倒計(jì)時(shí)到0時(shí)調(diào)用同一個(gè)提示程序,最后仍可保證在主程序不再定時(shí)開(kāi)啟時(shí)去判斷定時(shí),從而節(jié)約資源。
2,重鬧鈴的精髓也是標(biāo)志位的設(shè)計(jì),以F0為標(biāo)志位,其初值為0,正常響鈴時(shí)判斷重響功能鍵,若重響功能關(guān)閉,則跳過(guò)重響設(shè)定程序;若重響功能開(kāi)啟,則判斷標(biāo)志位F0,為了更好的說(shuō)明,將相關(guān)程序截取如下:
//鬧鈴重響功能是否判斷//
JNB P0.6,RERING
//重響定時(shí),//
RERING:                                ;鬧鈴重響判斷程序
JNB F0, RE                              ;標(biāo)志位F0為0,不進(jìn)行鬧鈴重響設(shè)定
CPL F0
MOV 3CH,#1                              ;定時(shí)判斷標(biāo)志位賦1, 定時(shí)判斷功能開(kāi)啟
JNB P0.7,M1                              ;鬧鈴重響間隔時(shí)間選取
MOV R4,#0                               ;鬧鈴重響間隔30秒
MOV R3,#30
AJMP MAIN
M1:                                       ;鬧鈴重響間隔60秒
MOV R4,#1
MOV R3,#0
AJMP MAIN
JB P2.7,GO        ;判斷暫停鍵是否按下,未按下則響鈴
JNB P0.6,GO1          ;  音樂(lè)暫停鍵,再判斷鬧鈴重響功能是否開(kāi)啟
AJMP END0               
GO1:                          ;鬧鈴重響功能開(kāi)啟處理程序
JB F0,GO                      ;重響標(biāo)志位判斷,若F0為1,表明此次響鈴調(diào)用為重鬧鈴導(dǎo)致,進(jìn)入重鬧鈴環(huán)節(jié);若F0為0則表示此次鬧鈴調(diào)用為正常鬧鈴導(dǎo)致,因?yàn)橹佤[鈴功能開(kāi)啟,故將F0置1,以便重鬧鈴的實(shí)現(xiàn)!
CPL F0               
AJMP END0
通過(guò)以上程序可知,鬧鈴初次響時(shí),標(biāo)志位F0總是0,若重響功能開(kāi)啟,則在初次鬧鈴自然結(jié)束或人為按鍵結(jié)束后通過(guò)CPL F0 語(yǔ)句,使F0置1,為重響時(shí)間間隔的設(shè)置提供條件。當(dāng)F0值為1時(shí),才能在鬧鈴功能關(guān)閉的情況下重鬧鈴,重鬧鈴不像正常鬧鈴那樣,即使沒(méi)有人為關(guān)閉,音樂(lè)唱完后,自動(dòng)回到主程序,而是一直再響,若要關(guān)閉重鬧鈴,則撥動(dòng)重鬧鈴開(kāi)啟開(kāi)關(guān)即可。重鬧鈴結(jié)束后回到調(diào)用鬧鈴的位置,用CLR F0 使標(biāo)志位復(fù)位,至此一個(gè)重鬧鈴循環(huán)結(jié)束。又回到初次鬧鈴前的狀態(tài)。若要重響開(kāi)啟重鬧鈴,則需再次開(kāi)啟重鬧鈴功能。
*******************************************************************************
JNB P0.6,SHENGYIN2               ;鬧鈴重響功能開(kāi)啟時(shí),跳入響鈴程序
AJMP TISHI                          ;不是鬧鈴重響定時(shí),則定時(shí)時(shí)間到時(shí),跳入提示程序
AJMP MAIN
SHENGYIN2:
SETB F0                           ;鬧鈴重響標(biāo)志位設(shè)定
LCALL RING                       ;響鈴
CLR F0                             ;標(biāo)志位復(fù)位
AJMP MAIN
以上程序段可以區(qū)別正常定時(shí)和重鬧鈴定時(shí),通過(guò)若重鬧鈴功能選擇鍵按下,則定時(shí),時(shí)間到通過(guò)一直響鈴來(lái)提示;若重鬧鈴功能關(guān)閉則定時(shí)到用閃爍來(lái)提示。我們不難發(fā)現(xiàn)重鬧鈴開(kāi)關(guān)也可作為定時(shí)在主程序中判斷時(shí),不同提示方式的選擇開(kāi)關(guān),我們不會(huì)影響重鬧鈴標(biāo)志位,因?yàn)樵隰[鈴子程序調(diào)用語(yǔ)句后有F0標(biāo)志位的清零語(yǔ)句:CLR F0
*****************************************************************
C. 程序調(diào)試及仿真
本程序通過(guò)Keil單片機(jī)開(kāi)發(fā)平臺(tái)實(shí)現(xiàn)程序的編譯,鏈接,生成HEX文件。程序再編譯過(guò)程中可以發(fā)現(xiàn)錯(cuò)位,并及時(shí)改正,在設(shè)計(jì)時(shí)非常重要,使錯(cuò)誤被扼殺在搖籃中。
通過(guò)Keil和硬件仿真平臺(tái)Proteus的聯(lián)合,可以將設(shè)計(jì)效果仿真出來(lái),根據(jù)效果,有目的的改變?cè)O(shè)計(jì),優(yōu)化程序。
c.1 利用Keil軟件實(shí)驗(yàn)過(guò)程截圖:
1,建一個(gè)工程,并設(shè)定與Proteus仿真相關(guān)的參數(shù)
2,匯編程序,并生成HEX文件
c.2利用Proteus仿真實(shí)驗(yàn)過(guò)程截圖:
1.普通時(shí)間顯示模式仿真圖,表示:星期一 9點(diǎn)10分38秒
2.日期調(diào)節(jié),顯示模式仿真圖,表示:2010年7月10日
3.鬧鈴調(diào)節(jié)顯示仿真圖,表示鬧鈴時(shí)刻為8點(diǎn)整
4.定時(shí),倒計(jì)時(shí)顯示仿真圖,表示此時(shí)定時(shí)初值已經(jīng)減到54秒,及還有54秒定時(shí)到。定時(shí)最大值為59分59秒。
5.秒表顯示仿真圖,表示秒表已經(jīng)從0記到8.28秒。秒表可計(jì)時(shí)到小時(shí),其中小時(shí)位數(shù)字可到99,即最大計(jì)時(shí)為100小時(shí)
D,電子時(shí)鐘電路板焊接實(shí)現(xiàn)
通過(guò)軟,硬件設(shè)計(jì)和仿真,基本上實(shí)現(xiàn)了自己想要的功能,就可以真刀真槍的干一場(chǎng)了。
軟件通過(guò)調(diào)試基本上是沒(méi)問(wèn)題的,但是硬件仿真過(guò)于泛泛,對(duì)電路的細(xì)節(jié)要求不是那么高,有些問(wèn)題是不能發(fā)現(xiàn)的,最后的實(shí)現(xiàn)效果還是要用實(shí)物來(lái)驗(yàn)證的。
元器件的購(gòu)買是個(gè)苦活,雖然中發(fā)市場(chǎng)那么大,但那些元件才是我要的那個(gè)它呢?我們購(gòu)買的量少,對(duì)于那些元器件廠家來(lái)說(shuō),根本不屑做我們的生意,根本不用說(shuō)砍價(jià)了。經(jīng)過(guò)一番“跋涉”,終于搜刮齊了元器件。
根據(jù)以往經(jīng)驗(yàn),焊接電路的布線非常重要,首先要在電路板上將線的大致走向規(guī)劃好,如何美觀,精簡(jiǎn)是要領(lǐng)。一下是本次試驗(yàn)的硬件電路實(shí)現(xiàn)
正面:
反面:
五.實(shí)驗(yàn)總結(jié)及感想
一分耕耘,一分收獲。只有親自用實(shí)踐來(lái)驗(yàn)證這句話,在能得其要領(lǐng)。經(jīng)過(guò)這次單片機(jī)課程設(shè)計(jì),我從一個(gè)單片機(jī)實(shí)踐的門外漢,已經(jīng)越升為略知一二的新手。雖然還有很多有關(guān)單片機(jī)的應(yīng)用有待學(xué)習(xí),但萬(wàn)變不離其宗,只要深入了解單片的原理,全部知識(shí)點(diǎn),各個(gè)細(xì)節(jié),一切設(shè)計(jì)皆有可能。
在實(shí)驗(yàn)的開(kāi)始幾天,基本上沒(méi)有收獲,不知何從下手,不知所措。為了看得更遠(yuǎn),不妨站在前人的肩膀上,我在整體思路模糊的情況下,在網(wǎng)上大量招資糧,各種與電子時(shí)鐘相關(guān)的文章,我閱讀了不少。隨著涉獵的點(diǎn)滴積累,我對(duì)電子時(shí)鐘的設(shè)計(jì)方案已經(jīng)慢慢醞釀而成。有了方向和不少知識(shí)儲(chǔ)備后,在接下來(lái)的幾天,幾乎每天都有突破,雖然有時(shí)只是一句程序的修改或誕生,但那種收獲的感覺(jué)很暖人心。
實(shí)驗(yàn)中遇到了不少問(wèn)題,接下來(lái)總結(jié)一下,共同探討。
1,按鍵問(wèn)題。我的設(shè)計(jì)中,很多功能選擇是通過(guò)按鍵開(kāi)關(guān)實(shí)現(xiàn)的。在仿真中發(fā)現(xiàn),調(diào)整數(shù)值時(shí),有時(shí)按鍵反應(yīng)太快,按一次,跳了幾下,使設(shè)置時(shí)間,日期很不方便。但是仿真多了之后,找到了按鍵(實(shí)際上是按鼠標(biāo))的節(jié)奏,對(duì)按鍵的掌控力提高了不少,不怎么會(huì)出現(xiàn)跳變的情況了。有些開(kāi)關(guān)我采用了長(zhǎng)按鍵的方式來(lái)防抖,效果不錯(cuò),但是每次都要長(zhǎng)按鍵,調(diào)整效率太低,我沒(méi)有普及。本來(lái)想把所有的按鍵都加延時(shí)防抖電路,但仿真中感覺(jué)對(duì)鍵盤(pán)的控制力沒(méi)提高多少,有時(shí)還是會(huì)出問(wèn)題,這個(gè)方案放棄了。索性將板子焊接出來(lái)了在調(diào)試軟件吧,仿真畢竟不是那么“真”啊!實(shí)際電路調(diào)試中,按鍵反應(yīng)沒(méi)有出現(xiàn)過(guò)于靈敏的問(wèn)題,基本可控制。
出現(xiàn)以上問(wèn)題,我認(rèn)為是電路板上焊接點(diǎn)太多,接觸不是很好,影響了信號(hào)的傳輸時(shí)間,從而解決了按鍵問(wèn)題!也有可能是按鍵質(zhì)量問(wèn)題,接觸不良。
2, P0口開(kāi)關(guān)問(wèn)題。P0口比較特殊,它存在高阻態(tài),要使其輸入不是高電平就是低電平,就要接上拉電阻,給其高電平輸入。
3, 音樂(lè)鬧鈴問(wèn)題。在鬧鈴時(shí)間到,鬧鈴提醒時(shí),我的數(shù)碼管為熄滅狀態(tài),因?yàn)殚_(kāi)始我的響鈴程序內(nèi),沒(méi)有數(shù)碼管掃描顯示程序。但加入數(shù)碼管顯示子程序后,我的鬧鈴音樂(lè)被影響了,一開(kāi)始不知所措,有點(diǎn)懷疑是顯示程序時(shí)間過(guò)長(zhǎng),影響音樂(lè)的定時(shí)(節(jié)拍),我就在響鈴程序中加延時(shí)模塊,延時(shí)長(zhǎng)度逐漸提高,最后出現(xiàn)了類似的問(wèn)題,看來(lái)時(shí)顯示程序占用時(shí)間太長(zhǎng),使音樂(lè)每個(gè)音符的節(jié)拍出現(xiàn)了紊亂,音樂(lè)功能被遏制了!魚(yú)和熊掌不能兼得,我只能犧牲顯示來(lái)獲得音樂(lè)鬧鈴,但為了彌補(bǔ)顯示,我設(shè)計(jì)了閃爍提醒方案,就是在手動(dòng)或音樂(lè)自然停止后,進(jìn)入當(dāng)前時(shí)間閃爍提示,8秒后若不按返回鍵,則自動(dòng)跳入主程序。
在仿真中,老師提供的響鈴電路不能實(shí)現(xiàn)功能,但是在我的電路板中效果很好,令人費(fèi)解!
4,中斷沖突問(wèn)題,為了實(shí)現(xiàn)秒表,我在T0中斷嵌套了秒表相關(guān)進(jìn)位程序,由于秒表要求精度0.01秒,故我的T0中斷定時(shí)為就剛好0.01秒,中斷100次,剛好1秒。秒表確實(shí)實(shí)現(xiàn)了,但是我的鬧鈴音質(zhì)變差了。一開(kāi)始以為是鬧鈴程序存太多冗余環(huán)節(jié),影響了T1的音樂(lè)輸出中斷,但是檢查程序后,發(fā)現(xiàn)沒(méi)什么多余的,裁剪無(wú)從下手。
在仿真中,我讓音樂(lè)模塊運(yùn)行,發(fā)現(xiàn)音質(zhì)很好。添加T0中斷服務(wù)程序,但是將中斷進(jìn)入的間隔變大,即0.05秒進(jìn)入一次中斷,發(fā)現(xiàn)音質(zhì)有所下降,有滋滋聲,但比原來(lái)的好。最后認(rèn)定應(yīng)該是T0中斷過(guò)于頻繁,T1音樂(lè)頻率發(fā)生中斷被打破,當(dāng)單位時(shí)間內(nèi)被打破的次數(shù)達(dá)到一定程度時(shí),音符和節(jié)拍的對(duì)應(yīng)發(fā)生紊亂,最終音質(zhì)變差。
雖然如此,我的焊接的電路板的表現(xiàn)卻很爭(zhēng)氣,鬧鈴音質(zhì)可以接受!雖然這次實(shí)際表現(xiàn)不錯(cuò),但問(wèn)題還是有的,還是要解決的,我的方案是把秒表程序放在T1中斷服務(wù)程序,雖然音樂(lè)的發(fā)生要用到T1中斷,但是秒表的顯示和鬧鈴音樂(lè)的演奏上不會(huì)重合在一起,鬧鈴判斷是在主程序,而秒表實(shí)現(xiàn)是在秒表子程序,故原本相互矛盾的兩個(gè)功能,在T1中斷服務(wù)程序中找到了共同的歸宿,和諧相處。
5,顯示數(shù)字分隔問(wèn)題。本實(shí)驗(yàn)中用8個(gè)共陰極數(shù)碼管顯示日歷及其時(shí)間,但是8個(gè)數(shù)碼管連在一起,顯示過(guò)程中不能有效地區(qū)分時(shí),分,秒和年,月,日,數(shù)碼管是兩兩組合起來(lái),形成某位的十位和個(gè)位,故用小數(shù)點(diǎn)在適當(dāng)位置一直保持高亮狀態(tài),形成分隔符,實(shí)現(xiàn)方便的讀取數(shù)據(jù)。具體方法是,將需要小數(shù)點(diǎn)位高亮的數(shù)碼管找出來(lái),在動(dòng)態(tài)顯示掃描到該數(shù)碼管時(shí),先將提取的字段碼的最高位變?yōu)?,利用語(yǔ)句 ORL A,#10000000B 實(shí)現(xiàn),修正字碼后,再將字碼送入P1口顯示數(shù)字,如此問(wèn)題得以解決。
6,添加倒計(jì)時(shí)器嘀嘀聲提示功能。這個(gè)功能我用到了T1中斷,作為音調(diào)頻率發(fā)生器,但是T1已經(jīng)承擔(dān)了音樂(lè)鬧鈴的音調(diào)發(fā)生功能,在此通過(guò)設(shè)立標(biāo)志位實(shí)現(xiàn)中斷服務(wù)程序的轉(zhuǎn)變。即使我將秒表的實(shí)現(xiàn)服務(wù)程序放入T1中斷實(shí)現(xiàn),也沒(méi)問(wèn)題,只要選擇標(biāo)志位判斷就可以了。在此,我們用調(diào)整狀態(tài)指示燈的狀態(tài)來(lái)做標(biāo)志位,具體的說(shuō)是P0.1口做標(biāo)志位。
還有一個(gè)問(wèn)題就是如何使鈴聲有間隔的響,這就牽涉到定時(shí),在此我們用硬件定時(shí),即T1中斷的次數(shù)作為定時(shí)參數(shù)。我的設(shè)計(jì)是音調(diào)響0.25秒,然后用T1延時(shí)0.5秒,由于計(jì)數(shù)器工作于方式1時(shí),12MHZ時(shí)鐘頻率下時(shí),一次中斷最多定時(shí)65536*1us=0.065536秒,為了實(shí)現(xiàn)0.5秒的響聲間隔,將T1中斷1次定時(shí)為0.05秒,中斷10次后,重新裝音調(diào)發(fā)生計(jì)數(shù)初值。
對(duì)于響鈴時(shí)間的設(shè)定原理類似,可以有發(fā)聲頻率求出一次發(fā)聲定時(shí)中斷的時(shí)間,N次發(fā)聲定時(shí)中斷后,使時(shí)間變化0.25秒,而后轉(zhuǎn)入發(fā)聲間隔定時(shí)程序。
但是隨之又產(chǎn)生了問(wèn)題,進(jìn)入T1中斷后到底重裝誰(shuí)的計(jì)數(shù)初值,是發(fā)聲中斷定時(shí)呢,還是響聲間隔定時(shí)呢?在此我們用到了標(biāo)志位F0,通過(guò)對(duì)其設(shè)置,實(shí)現(xiàn)計(jì)數(shù)初值的準(zhǔn)確裝入!
設(shè)計(jì)中,倒計(jì)時(shí)到最后10秒時(shí),開(kāi)始發(fā)出1KHZ的嘀嘀音,當(dāng)?shù)褂?jì)時(shí)到0時(shí),開(kāi)始發(fā)出3KHZ的嘀嘀音,并數(shù)碼管閃爍顯示四個(gè)0,表示倒計(jì)時(shí)到0分0秒。其實(shí),我們可以設(shè)定倒計(jì)時(shí)最后10秒時(shí),沒(méi)減1秒,提示音響一聲,定時(shí)到0時(shí),使響音間隔縮短,發(fā)出急促的聲音,起到比較合適的提示作用。但仿真中總是不能得到我要的效果,提示CPU占用過(guò)大的警告,系統(tǒng)已經(jīng)不工作于實(shí)時(shí)環(huán)境了。仿真怎么也不能發(fā)出間隔1秒,或更長(zhǎng)的嘀嘀音,本想用自己焊好的電子時(shí)鐘實(shí)際試驗(yàn)此功能,但是電路板已經(jīng)上交給老師了,為了驗(yàn)證我的設(shè)計(jì)理念,看來(lái)只有在開(kāi)發(fā)板中,實(shí)物驗(yàn)證了。
在整個(gè)電子時(shí)鐘系統(tǒng)中仿真時(shí),響鈴音質(zhì)不是很好,有雜音,我認(rèn)為這是由于更高級(jí)的T0中斷打破了T1中斷,這在音樂(lè)鬧鈴中也出現(xiàn)過(guò)。比如發(fā)出1KHZ的音調(diào),通過(guò)計(jì)算公式       1/(1000*2)=0.0005 得出T1發(fā)音中斷間隔為0.0005秒,而T0計(jì)時(shí)中斷的進(jìn)入間隔為0.01秒(100次T0中斷為1秒),可見(jiàn)在發(fā)音時(shí),最多連續(xù)正常進(jìn)入20個(gè)發(fā)音中斷(0.01/0.0005=20),若T0中斷的服務(wù)時(shí)間長(zhǎng)于T1發(fā)音定時(shí)時(shí)間長(zhǎng)度,則即使通過(guò)修正重裝計(jì)數(shù)初值,得到的計(jì)數(shù)初值已經(jīng)溢出,計(jì)數(shù)初值變更為0,則下一個(gè)T1中斷進(jìn)入的時(shí)間為0.065536秒,而我們要求的T1中斷間隔時(shí)間為0.0005秒,顯然生成的方波的占空比出現(xiàn)紊亂,音質(zhì)出現(xiàn)問(wèn)題。我查看了我的T0中斷服務(wù)指令有近200行,由于MCS-51單片機(jī)的指令周期一般為1-2個(gè)機(jī)器周期,在本系統(tǒng)中,用12M的時(shí)鐘,每個(gè)機(jī)器周期為(1/12000000)*12=1us,則T0中斷服務(wù)占用時(shí)間至多為400us,可見(jiàn)中斷服務(wù)程序執(zhí)行用時(shí)沒(méi)有超過(guò)0.0005秒,可見(jiàn)通過(guò)修正重裝計(jì)數(shù)初值后,下次進(jìn)入中斷時(shí),方波電平的反轉(zhuǎn)不會(huì)出現(xiàn)問(wèn)題。但是如果同一時(shí)刻兩計(jì)數(shù)器都達(dá)到溢出時(shí),優(yōu)先執(zhí)行T0中斷,此時(shí)本應(yīng)電平反轉(zhuǎn)的方波仍保持此刻電平狀態(tài),直到T0中斷服務(wù)程序結(jié)束才反轉(zhuǎn)電平,可知方波的占空比發(fā)生突變,影響音質(zhì)。
在整個(gè)系統(tǒng)的仿真中,嘀嘀聲提示音只是偶爾比較靠譜的出現(xiàn)一次,但嘀嘀聲的間隔及音調(diào)發(fā)生的頻率不正常,通常結(jié)果是發(fā)出沉悶的噗噗聲,發(fā)聲頻率勉強(qiáng)分辨,發(fā)聲間隔不能仿真實(shí)現(xiàn),似乎是一定的。如果我只將嘀嘀聲提示子程序作為主程序單獨(dú)運(yùn)行,則能清晰地分辨高,低音頻,以及實(shí)現(xiàn)響音的間隔,但是若提高響音的間隔,運(yùn)行的結(jié)果沒(méi)有什么變化,響音間隔沒(méi)多大變化。對(duì)于嘀嘀聲提示子程序的仿真文件,我將和電子時(shí)鐘整個(gè)系統(tǒng)的仿真文件一并提交。
我認(rèn)為有些細(xì)節(jié)是仿真軟件不能模擬的,必須要通過(guò)開(kāi)發(fā)板的實(shí)際操作得以驗(yàn)證,PC機(jī)的資源有限,運(yùn)行速度和性能的差異也有可能產(chǎn)生仿真的不同結(jié)果。
以下為具體實(shí)現(xiàn)程序段:
TIMER1:                                    ;計(jì)數(shù)器T1中斷服務(wù)程序
JB P0.1,OO                                  ;判斷中斷服務(wù)的種類
MOV A,56H                                   ;此標(biāo)志位決定倒計(jì)時(shí)最后10秒和
定時(shí)到時(shí)發(fā)出不同頻率的聲音                                             
CJNE A,#0,PP
JNB F0,III
DJNZ 55H,OOT
CPL F0
III:
DJNZ 50H,EE                               ;定時(shí)前十秒嘀嘀聲提醒
MOV 50H,#100
DJNZ 51H,EE
MOV 51H,#10
MOV TH1,#3CH
MOV TL1,#0B0H
MOV 55H,#10
CPL F0
AJMP OT
OOT:MOV TH1,#3CH
MOV TL1,#0B0H
AJMP OT
EE:MOV TH1,#0FEH
MOV TL1,#0CH
CPL P2.6
AJMP OT
PP:
JNB F0,II
DJNZ 54H,OOT1
CPL F0
II:DJNZ 52H,FF                              ;定時(shí)到嘀嘀聲提示
MOV 52H,#150
DJNZ 53H,FF
MOV 53H,#10
MOV TH1,#3CH
MOV TL1,#0B0H
MOV 54H,#10
CPL F0
AJMP OT
OOT1:
MOV TH1,#3CH
MOV TL1,#0B0H
AJMP OT
FF:MOV TH1,#0FFH
MOV TL1,#5AH
CPL P2.6
AJMP OT
OO:                                 ;音樂(lè)鬧鈴服務(wù)程序
MOV TH1,21H                                   ;定時(shí)器T1置初值
      MOV TL1,20H
      CPL P2.6                             ;音符對(duì)應(yīng)頻率產(chǎn)生
      OT:RETI
以上就是實(shí)驗(yàn)中遇到的主要問(wèn)題,基本上都找到了相應(yīng)的解決之道。整個(gè)實(shí)驗(yàn)的過(guò)程就是一個(gè)解決問(wèn)題的過(guò)程,每天都解決一些問(wèn)題,我的實(shí)驗(yàn)也就解決了,當(dāng)然結(jié)果不重要,功利化的追求結(jié)果,會(huì)使人浮躁,還是享受那份疑難迎刃而解的快感吧!
分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

手機(jī)版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表