版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、<p><b> 單片機(jī)課程設(shè)計(jì)報(bào)告</b></p><p> ——基于單片機(jī)的多功能綜合應(yīng)用系統(tǒng)的設(shè)計(jì)</p><p><b> 摘要</b></p><p> 近年來隨著科技的飛速發(fā)展,單片機(jī)的應(yīng)用正在不斷地走向深入,同時(shí)帶動(dòng)傳統(tǒng)控制檢測(cè)日新月異更新。在實(shí)時(shí)檢測(cè)和自動(dòng)控制的單片機(jī)應(yīng)用系統(tǒng)中,單片機(jī)往往
2、是作為一個(gè)核心部件來使用,僅單片機(jī)方面知識(shí)是不夠的,還應(yīng)根據(jù)具體硬件結(jié)構(gòu),以及針對(duì)具體應(yīng)用對(duì)象特點(diǎn)的軟件結(jié)合,加以完善。本次課程設(shè)計(jì)采用AT89C51單片機(jī)作為主要核心部件,加上LED、LCD、鍵盤、LED點(diǎn)陣等外圍設(shè)備,實(shí)現(xiàn)了鍵盤控制LED并以LCD顯示及LED點(diǎn)陣顯示和可校時(shí)數(shù)字時(shí)鐘、溫度控制等功能,這些功能貼近日常生活,非常具有現(xiàn)實(shí)意義。</p><p><b> 目錄</b><
3、;/p><p><b> 摘要2</b></p><p><b> 一、概述4</b></p><p><b> 1.1設(shè)計(jì)意義4</b></p><p><b> 1.2設(shè)計(jì)目標(biāo)5</b></p><p> 第一部分
4、:基本功能5</p><p> 第二部分:基本應(yīng)用模塊5</p><p> 第三部分:基于仿真的擴(kuò)展模塊5</p><p> 第四部分:賽前訓(xùn)練模塊5</p><p><b> 1.3設(shè)計(jì)要求5</b></p><p> 1.4 任務(wù)分配6</p><p&
5、gt; 二、硬件和程序設(shè)計(jì)7</p><p> 元器件及開發(fā)環(huán)境7</p><p><b> 元器件清單7</b></p><p><b> 開發(fā)環(huán)境8</b></p><p> 第一部分:基本功能8</p><p> 1.1 單片機(jī)最小系統(tǒng)8<
6、/p><p> 1.2 LED彩燈模塊10</p><p> 1.3 LCD 顯示模塊10</p><p> 1.4 鍵盤控制模塊11</p><p> 1.5 第一部分整體圖11</p><p> 1.6 硬件實(shí)物圖12</p><p> 1.7 程序設(shè)計(jì)13</p&
7、gt;<p> 第二部分:基本應(yīng)用模塊13</p><p> 2.1 數(shù)字時(shí)鐘13</p><p> 2.2 程序設(shè)計(jì)14</p><p> 第三部分:基于仿真的擴(kuò)展模塊15</p><p> 3.1 點(diǎn)陣基礎(chǔ)——8*8點(diǎn)陣調(diào)節(jié)15</p><p> 3.2 點(diǎn)陣模塊——16*16點(diǎn)
8、陣顯示15</p><p> 3.3 程序設(shè)計(jì)16</p><p> 第四部分:賽前訓(xùn)練模塊16</p><p> 4.1 系統(tǒng)描述16</p><p> 4.2 溫度采集模塊17</p><p> 4.3 時(shí)鐘模塊17</p><p> 4.4 通信模塊17</
9、p><p> 4.5 顯示模塊18</p><p> 4.6 溫度控制系統(tǒng)整體圖18</p><p> 4.7 程序設(shè)計(jì)18</p><p> 三、總結(jié)和心得19</p><p><b> 四、參考資料20</b></p><p> 附錄(程序代碼節(jié)選)
10、21</p><p> 第一部分(節(jié)選主要部分)21</p><p> 第二部分(節(jié)選主要部分)23</p><p><b> 一、概述</b></p><p><b> 1.1設(shè)計(jì)意義</b></p><p> 本次單片機(jī)課程設(shè)計(jì)內(nèi)容包括單片機(jī)正常啟動(dòng)和復(fù)位,
11、LED花樣控制及亮度、色彩變化調(diào)節(jié),LCD液晶顯示屏的調(diào)節(jié),點(diǎn)陣LED的文字輸出,時(shí)鐘芯片DS1302的配置,溫度傳感器DS18B20的使用,以及鍵盤控制單片機(jī)工作,對(duì)以上技術(shù)的掌握可以有效地提高我們的實(shí)際應(yīng)用能力,如基于LED的節(jié)日藝術(shù)彩燈控制系統(tǒng)、溫度采集和實(shí)時(shí)監(jiān)控系統(tǒng)、電子日歷等,具有非常實(shí)際的意義和價(jià)值,使我們對(duì)知識(shí)的學(xué)習(xí)由理論提升到實(shí)踐,讓專業(yè)知識(shí)學(xué)習(xí)得到極大鞏固和提高。</p><p><b&g
12、t; 1.2設(shè)計(jì)目標(biāo)</b></p><p><b> 第一部分:基本功能</b></p><p> 1.設(shè)計(jì)并實(shí)現(xiàn)具有復(fù)位功能的單片機(jī)小系統(tǒng)。</p><p> 2.利用單片機(jī)進(jìn)行燈光的場(chǎng)景開關(guān)控制、循環(huán)點(diǎn)亮控制、花樣變化控制及速度變化控制。</p><p> 3.利用單片機(jī)進(jìn)行燈光的色彩連續(xù)變化
13、效果控制。</p><p> 4.利用單片機(jī)進(jìn)行燈光的三色聯(lián)動(dòng)定時(shí)控制(以交通燈為例)。</p><p> 5. 配合2至4項(xiàng)中功能,實(shí)現(xiàn)液晶屏輸出功能或狀態(tài)信息。</p><p> 6. 實(shí)現(xiàn)基于4X4鍵盤的輸入功能。</p><p> 第二部分:基本應(yīng)用模塊</p><p> 7. 數(shù)字時(shí)鐘的設(shè)計(jì)(要
14、求:顯示時(shí)間、調(diào)整時(shí)間、鬧鐘功能等)</p><p> 第三部分:基于仿真的擴(kuò)展模塊</p><p> 8.16x16點(diǎn)陣LED顯示同組同學(xué)漢字名。</p><p> 第四部分:賽前訓(xùn)練模塊</p><p><b> 9.溫度監(jiān)控系統(tǒng)</b></p><p><b> 1.3設(shè)
15、計(jì)要求</b></p><p> 1.能啟動(dòng)、停止單片機(jī);</p><p> 2.能通過開關(guān)(按鍵)進(jìn)行功能選擇;</p><p> 3.基本功能部分要體現(xiàn)循環(huán)、組合和色彩變化的控制功能和效果,實(shí)現(xiàn)三色聯(lián)動(dòng)定時(shí)控制,控制變化規(guī)律的類型或功能不少于5種。</p><p><b> 1.4 任務(wù)分配</b>
16、;</p><p> 根據(jù)組內(nèi)成員的擅長(zhǎng)方向,由紀(jì)琛負(fù)責(zé)電路仿真和程序設(shè)計(jì),馬浩負(fù)責(zé)硬件的搭建和調(diào)試。</p><p> 第一部分用時(shí)3周,第二部分用時(shí)2周,第三部分用時(shí)1周,第四部分用時(shí)3周,共用時(shí)9周。</p><p><b> 二、硬件和程序設(shè)計(jì)</b></p><p><b> 元器件及開發(fā)環(huán)境
17、</b></p><p><b> 元器件清單</b></p><p> (補(bǔ)充:由于本組第二部分設(shè)計(jì)要求,設(shè)計(jì)時(shí)自行增加了時(shí)鐘芯片DS1302和32.768KHz晶振各一個(gè))</p><p><b> 開發(fā)環(huán)境</b></p><p> 硬件仿真環(huán)境——Proteus 7<
18、;/p><p> 軟件開發(fā)環(huán)境——Keil µVision4</p><p><b> 第一部分:基本功能</b></p><p> 1.1 單片機(jī)最小系統(tǒng)</p><p> 1.1.1 復(fù)位電路</p><p> 1.1.2 晶振電路</p><p>
19、1.1.3 最小系統(tǒng)整體圖</p><p> 1.2 LED彩燈模塊</p><p> 1.3 LCD 顯示模塊</p><p> 1.4 鍵盤控制模塊</p><p> 1.5 第一部分整體圖</p><p><b> 1.6 硬件實(shí)物圖</b></p><p>
20、;<b> 1.7 程序設(shè)計(jì)</b></p><p><b> ?。ㄔ敿?xì)程序見附錄)</b></p><p> 第二部分:基本應(yīng)用模塊</p><p><b> 2.1 數(shù)字時(shí)鐘</b></p><p> 2.1.1 DS1302時(shí)鐘電路</p><
21、p> 2.1.2 數(shù)字時(shí)鐘整體圖</p><p><b> 2.2 程序設(shè)計(jì)</b></p><p> 第三部分:基于仿真的擴(kuò)展模塊</p><p> 3.1 點(diǎn)陣基礎(chǔ)——8*8點(diǎn)陣調(diào)節(jié)</p><p> 3.2 點(diǎn)陣模塊——16*16點(diǎn)陣顯示</p><p><b>
22、 3.3 程序設(shè)計(jì)</b></p><p><b> (見壓縮包附件)</b></p><p> 第四部分:賽前訓(xùn)練模塊</p><p><b> 4.1 系統(tǒng)描述</b></p><p> 本系統(tǒng)由AT89C51做主控芯片,外部直流穩(wěn)壓電源給系統(tǒng)供電(未給出電源詳細(xì)設(shè)計(jì)),通過
23、I2C與24C02C構(gòu)成的外部存儲(chǔ)電路通信讀取預(yù)存的溫度上下限值,通過DS1302時(shí)鐘模塊讀取準(zhǔn)確的時(shí)間信息,通過DS18B20進(jìn)行溫度采集,當(dāng)采集溫度與預(yù)設(shè)的上下限溫度比較,高于上限則紅燈亮蜂鳴器響且啟動(dòng)風(fēng)扇進(jìn)行降溫,低于下限則藍(lán)燈亮蜂鳴器響且啟動(dòng)電熱絲進(jìn)行升溫,考慮到要顯示的信息較多,系統(tǒng)使用12864液晶AMPIRE128X64進(jìn)行數(shù)據(jù)顯示,當(dāng)控制方式切換為手動(dòng)模式時(shí),使用按鈕控制風(fēng)扇和電熱絲,串口RS-232用于與PC進(jìn)行通信,
24、可以手動(dòng)設(shè)定溫度上下限、當(dāng)前時(shí)間、工作模式(自動(dòng)、手動(dòng))。由于時(shí)間和個(gè)人能力問題,本電路的串口通信功能未得到完善,軟件設(shè)計(jì)也存在問題,雖然基本檢測(cè)和自動(dòng)控制能實(shí)現(xiàn),但離預(yù)期可基本投入實(shí)際應(yīng)用的目標(biāo)還很遙遠(yuǎn)。</p><p> 4.2 溫度采集模塊</p><p><b> 4.3 時(shí)鐘模塊</b></p><p><b> 4.
25、4 通信模塊</b></p><p><b> 4.5 顯示模塊</b></p><p> 4.6 溫度控制系統(tǒng)整體圖</p><p><b> 4.7 程序設(shè)計(jì)</b></p><p> (詳細(xì)見壓縮包附件)</p><p><b> 三、總
26、結(jié)和心得</b></p><p> 在這次的單片機(jī)課程設(shè)計(jì)實(shí)驗(yàn)過程中,我遇到過很多難題,比如,如何調(diào)節(jié)占空比使得三色燈的顏色更具連續(xù)性,如何配置DS1302芯片,如何進(jìn)行LCD的初始化,如何使用較少的端口連接4個(gè)8*8點(diǎn)陣組成一個(gè)16*16點(diǎn)陣、如何溫度采樣等等,這些問題都曾導(dǎo)致我們的試驗(yàn)進(jìn)度緩慢,因?yàn)槲沂秦?fù)責(zé)仿真和程序部分的,如果我這邊出不來,硬件那邊就無法進(jìn)行,因此我經(jīng)常需要查閱大量網(wǎng)絡(luò)資料和館
27、藏書籍,實(shí)時(shí)學(xué)習(xí)相關(guān)知識(shí)以保證我的知識(shí)量足以設(shè)計(jì)出穩(wěn)定可靠的電路并寫出符合功能要求的程序代碼,這是很需要時(shí)間和精力的,因?yàn)楹芏嗲闆r都是,可能看了一上午的書,檢查了一上午的代碼,仍然解決不了我們遇到的問題。就比如我們后期調(diào)試第一部分的電路時(shí),LCD實(shí)物一直沒有顯示,但是仿真卻有反應(yīng),找了半天才發(fā)現(xiàn)有2個(gè)控制端口接錯(cuò)位了。從這些細(xì)小的問題可以看出,有時(shí)候一個(gè)產(chǎn)品的好壞并沒有決定于它大的硬件設(shè)計(jì)或者程序驅(qū)動(dòng)等,而往往是一些平時(shí)沒注意的細(xì)微之處
28、,在關(guān)鍵時(shí)刻導(dǎo)致整個(gè)產(chǎn)品的失敗。另一個(gè)教訓(xùn)就是,平時(shí)應(yīng)該多查閱資料,有時(shí)候使用別人已經(jīng)做好的模塊可以節(jié)省大量的時(shí)間,設(shè)計(jì)初期我花大量時(shí)間去調(diào)試LCD驅(qū)動(dòng)和鍵盤初始化,結(jié)果有現(xiàn)成的沒及時(shí)用,白白浪</p><p><b> 四、參考資料</b></p><p> 1.《單片機(jī)課程設(shè)計(jì)指導(dǎo)》(第2版) 北京航空航天大學(xué)出版社 作者:樓然苗 李光飛 2012.1<
29、/p><p> 2. 《單片機(jī)技術(shù)-課程設(shè)計(jì)與項(xiàng)目實(shí)例》 中國電力出版社 作者:李海濱等 2009.10</p><p> 3.《 Proteus教程-電子線路設(shè)計(jì)、制版與仿真》 清華大學(xué)出版社 作者:朱清彗 2008.9</p><p> 4.《 51系列單片機(jī)設(shè)計(jì)實(shí)例》(第2版) 北京航空航天大學(xué)出版社 作者:樓然苗 李光飛 2006.2</p>
30、<p> 5.《基于5103K的單片機(jī)實(shí)驗(yàn)指導(dǎo)書》(內(nèi)部試用)</p><p> 附錄(程序代碼節(jié)選)</p><p> 第一部分(節(jié)選主要部分)</p><p> #include<reg52.h> </p><p> #include<stdio.h> //標(biāo)準(zhǔn)輸入輸出</p>
31、<p> #include<intrins.h></p><p> #include<stdlib.h></p><p> #include "last1_led.h"</p><p> #define Data P0//數(shù)據(jù)端口</p><p> sbit RS = P2^
32、4; //Pin4</p><p> sbit RW = P2^5; //Pin5</p><p> sbit E = P2^6; //Pin6</p><p> sbit p1_0=P1^0;//接?xùn)|西綠燈//</p><p> sbit p1_1=P1^1;//接?xùn)|西黃燈//</p><p> sbit
33、 p1_2=P1^2;//接?xùn)|西紅燈//</p><p> sbit p1_3=P1^3;//接南北綠燈//</p><p> sbit p1_4=P1^4;//接南北黃燈//</p><p> sbit p1_5=P1^5;//接南北紅燈//</p><p> unsigned char key;</p><p&
34、gt; static int i=0;</p><p> char data TimeNum[]=" ";</p><p> char data Test1[]=" ";</p><p><b> //延時(shí)函數(shù)1//</b></
35、p><p> void delay1(unsigned int x)</p><p> //鍵盤掃描函數(shù)//</p><p> unsigned char keyscan(void)</p><p> void last1_led(void);</p><p> void roadlight(void)</
36、p><p> void DelayUs(unsigned char us)//delay us</p><p> void DelayMs(unsigned char ms)</p><p> /* 寫入命令 */ </p><p> void
37、 WriteCommand(unsigned char c)</p><p> /* 寫入數(shù)據(jù)函數(shù) */ </p><p> void WriteData(unsigned char c)</p><p> /* 寫入字節(jié)函數(shù) */
38、 </p><p> /* 寫入字符串函數(shù) */ </p><p> void ShowString (unsigned char line,char *ptr)</p><p> /* 初始化函數(shù) */
39、 </p><p> void InitLcd()</p><p> void lcdshow(void)</p><p><b> {</b></p><p> InitLcd(); //初始化LCD</p><p> DelayMs(
40、15); //延時(shí)保證信號(hào)穩(wěn)定</p><p> WriteCommand(0x01); //顯示清屏 </p><p> sprintf(Test1," LCD Test "); </p><p> //打印輸出第一行信息</p><p> ShowString(0,Test1);</
41、p><p> sprintf(TimeNum," Hello AT89C51 ");</p><p> //打印輸出第二行信息</p><p> ShowString(1,TimeNum);</p><p><b> }</b></p><p><b> //
42、三色聯(lián)動(dòng)//</b></p><p> void delay_h(int x)</p><p><b> //主函數(shù)//</b></p><p> void main(void)</p><p><b> {</b></p><p> unsigned
43、char keycode;</p><p><b> P1=0xFF;</b></p><p><b> srand(3);</b></p><p><b> while(1)</b></p><p><b> {</b></p>&
44、lt;p> keycode=keyscan();</p><p> switch(keycode)</p><p><b> {</b></p><p> case 0:last1_led();P1=0xFF;break;</p><p> case 1:roadlight();P1=0xff;break
45、;</p><p> case 2:lcdshow();break;</p><p> case 3:while(1){pwm();}break;</p><p> default:break;</p><p><b> }</b></p><p><b> }</b&g
46、t;</p><p><b> }</b></p><p> /*功能: 8個(gè)LED的4種花樣顯示 */</p><p> #include <reg51.h></p><p> typedef unsigned char U8;</p><p> typedef unsig
47、ned int U16;</p><p> /*************宏定義*****************/</p><p> #define speed P2</p><p> #define led_data P1</p><p> #define uchar unsigned char </p
48、><p> #define uint unsigned int </p><p> /*************端口定義***************/</p><p> sbit key_speed_jia=P2^0; //int0 </p><p> sbit key_speed_jian=P2^1; //int1</p&
49、gt;<p> /*************************************************************** </p><p><b> 4種花樣數(shù)據(jù)定義 </b></p><p> ***************************************************************/
50、</p><p> uchar code table0[]={0xE7,0xDB,0xBD,0x7E,0xFF,0x7E,0x3C, </p><p> 0x18,0x00,0xFF,0xE7,0xC3,0x81,0x00}; </p><p> uchar code table1[]={0xFE,0xFC,0xF8,0xF0,0xE0,0xC0,0x80,0
51、x00, </p><p> 0x01,0x03,0x07,0x0F,0x1F,0x3F,0x7F,0xFF}; </p><p> uchar code table2[]={0xAA,0x55}; </p><p> uchar code table3[]={0x00,0xFF}; </p><p> uint sudu;
52、 //流水燈速度</p><p> uchar cishu; //閃爍次數(shù)</p><p> /************************************************************* </p><p> * 名稱:last1_led </p><p> * 功能:循環(huán)調(diào)用各個(gè)子程序 <
53、/p><p> **************************************************************/ </p><p> void last1_led(void) </p><p><b> { }</b></p><p> void exter_int0()interru
54、pt 0//外部中斷0函數(shù) </p><p> void exter_int1()interrupt 2//外部中斷1函數(shù) </p><p> 第二部分(節(jié)選主要部分)</p><p> #include<reg51.h></p><p> #define uint unsigned int</p>&
55、lt;p> #define uchar unsigned char</p><p> uchar Second,Minute,Hour,Date,Month,Year,week;//時(shí)間等變量</p><p> #define one 0x80 //第一行的初始位置</p><p> #define two 0xc0 /
56、/第二行初始位置</p><p> sbit RS_1602=P2^0; //1602數(shù)據(jù)命令端</p><p> sbit E_1602=P2^1;//1602使能端</p><p> sbit IO_1302=P2^4;//1302數(shù)據(jù)端</p><p> sbit CLK_1302=P2^3;
57、//1302時(shí)鐘端</p><p> sbit RST_1302=P2^2;//1302復(fù)位端</p><p> sbit key_mode=P1^0;//功能按鍵</p><p> sbit key_up=P1^1;//增量鍵</p><p> sbit key_down=P1^2;
58、//減量鍵</p><p> sbit ACC0=ACC^0;</p><p> sbit ACC7=ACC^7;</p><p> uchar code tab1[]={"20 - - week "};//液晶第一行默認(rèn)顯示數(shù)據(jù)</p><p> uchar code tab2[]={&quo
59、t; : : "};//液晶第二行默認(rèn)顯示數(shù)據(jù)</p><p> void init();//定時(shí)器0初始化</p><p> /********************ds1302****************************/</p><p> void write_byte(uchar dat)//1
60、302字節(jié)寫</p><p><b> {</b></p><p><b> uchar kk;</b></p><p><b> ACC=dat;</b></p><p> RST_1302=1;//啟動(dòng)讀寫操作</p><p>
61、; for(kk=8;kk>0;kk--)//8位數(shù)據(jù)</p><p><b> {</b></p><p> IO_1302=ACC0;//先傳送數(shù)據(jù)低位</p><p> CLK_1302=0;</p><p> CLK_1302=1;//上升沿輸入數(shù)據(jù)</p&g
62、t;<p> ACC=ACC>>1;//右移位</p><p><b> }</b></p><p><b> }</b></p><p> uchar read_byte()//1302字節(jié)讀</p><p><b> {<
63、;/b></p><p><b> uchar kk;</b></p><p> RST_1302=1;//啟動(dòng)讀寫操作</p><p> for(kk=8;kk>0;kk--)</p><p><b> {</b></p><p> AC
64、C7=IO_1302;//先讀入數(shù)據(jù)低位</p><p> CLK_1302=1;</p><p> CLK_1302=0;//下降沿輸出數(shù)據(jù)</p><p> ACC=ACC>>1;//右移位</p><p><b> }</b></p><p&
65、gt; return (ACC);</p><p><b> }</b></p><p> void write_1302(uchar add,uchar dat) //1302地址寫</p><p><b> {</b></p><p> RST_1302=0;</p>
66、<p> CLK_1302=0;</p><p> RST_1302=1;//啟動(dòng)讀寫操作</p><p> write_byte(add);//寫地址</p><p> write_byte(dat);//寫數(shù)據(jù)</p><p> CLK_1302=1;</p><p
67、> RST_1302=0;//禁止讀寫操作</p><p><b> }</b></p><p> uchar read_1302(uchar add)//1302地址讀</p><p><b> {</b></p><p> uchar temp;</p
68、><p> RST_1302=0;</p><p> CLK_1302=0;</p><p> RST_1302=1;//啟動(dòng)讀寫操作</p><p> write_byte(add);//寫地址</p><p> temp=read_byte();//讀數(shù)據(jù)</p>
69、<p> CLK_1302=1;</p><p> RST_1302=0;//禁止讀寫操作</p><p> return(temp);</p><p><b> }</b></p><p> void ds1302_init()//1302初始化</p>
70、<p><b> {</b></p><p> RST_1302=0;//禁止讀寫操作</p><p> CLK_1302=0;//時(shí)鐘為低</p><p> write_1302(0x80,Second|0x00);//允許寫</p><p><b> }&
71、lt;/b></p><p> void keyscan()//按鍵處理子程序</p><p><b> {</b></p><p> uchar key1n;//功能鍵按下次數(shù)</p><p> if(key_mode==0)//key_down為功能鍵</p&
72、gt;<p><b> {</b></p><p> delay(5);//延時(shí)去抖動(dòng)</p><p> if(key_mode==0)//功能鍵確認(rèn)按下</p><p><b> {</b></p><p> while(!key_mode);/
73、/等待按鍵釋放</p><p> key1n++;//功能鍵按下次數(shù)加一</p><p> if(key1n==9)//為9時(shí) 調(diào)為1 則1~8</p><p><b> key1n=1;</b></p><p> switch(key1n)//功能鍵按鍵次數(shù)不同實(shí)現(xiàn)不同操作</
74、p><p><b> {</b></p><p> case 1: //時(shí)調(diào)整秒</p><p> TR0=0;//關(guān)閉定時(shí)器</p><p> write_1602com(two+0x0b);//寫入光標(biāo)位置</p><p> write_1602com(0x0f);
75、//設(shè)置光標(biāo)為閃爍</p><p> write_1302(0x8e,0x00);//允許寫</p><p> write_1302(0x80,0x80|Dec_BCD(Second));//Second</p><p><b> break;</b></p><p> case 2: write_160
76、2com(two+8);break;//Minute閃爍</p><p> case 3: write_1602com(two+5);break;//Hour閃爍</p><p> case 4: write_1602com(one+0x0f);break;//week閃爍</p><p> case 5: write_1602com(one+0x0
77、9);break;//Date閃爍</p><p> case 6: write_1602com(one+0x06);break;//Month閃爍</p><p> case 7: write_1602com(one+0x03);break;//Year閃爍</p><p><b> case 8:</b></p>
78、<p> write_1602com(0x0c);//設(shè)置光標(biāo)不閃爍</p><p> write_1302(0x80,0x00|Dec_BCD(Second));//Second</p><p> write_1302(0x8e,0x80);//禁止寫</p><p> TR0=1;//打開定時(shí)器</p&g
79、t;<p><b> break;</b></p><p><b> }</b></p><p><b> }</b></p><p><b> }</b></p><p> if(key1n!=0)//當(dāng)key_m
80、ode按下以后。再按以下鍵才有效</p><p><b> {</b></p><p> if(key_up==0) //上調(diào)鍵</p><p><b> {</b></p><p> delay(5);//延時(shí)去抖動(dòng)</p><p> if(
81、key_up==0)//上調(diào)鍵確認(rèn)按下</p><p><b> {</b></p><p> while(!key_up);//等待按鍵釋放</p><p> switch(key1n)//功能鍵按鍵次數(shù)不同實(shí)現(xiàn)不同操作</p><p><b> {</b></p
82、><p> case 1:Second++;//秒加1</p><p> if(Second==60)//加到60時(shí)調(diào)為0</p><p><b> Second=0;</b></p><p> write_hms(0x0a,Second);//顯示新的秒數(shù)</p><p>
83、write_1302(0x80,0x80|Dec_BCD(Second));//寫入新的秒數(shù)</p><p> write_1602com(two+0x0b);//因指針自動(dòng)加一,要寫回原位置</p><p><b> break;</b></p><p> case 2:Minute++;//分鐘加1</p><
84、;p> if(Minute==60)//加到60時(shí)調(diào)為0</p><p><b> Minute=0;</b></p><p> write_hms(7,Minute);//顯示新的分鐘</p><p> write_1302(0x82,Dec_BCD(Minute));//寫入新的分鐘</p><p&
85、gt; write_1602com(two+8);//光標(biāo)在原位閃爍</p><p><b> break;</b></p><p> case 3:Hour++;//小時(shí)加1</p><p> if(Hour==24)//加到24時(shí)調(diào)為0</p><p><b> Hour=0;&l
86、t;/b></p><p> write_hms(4,Hour);//顯示新的小時(shí)</p><p> write_1302(0x84,Dec_BCD(Hour));//寫入新的小時(shí)</p><p> write_1602com(two+5);//光標(biāo)在原位閃爍</p><p><b> break;</b
87、></p><p> case 4:week++;//星期加1</p><p> if(week==8)//加到8時(shí)調(diào)為1</p><p><b> week=1;</b></p><p> write_week(week);//顯示新的星期</p><p>
88、write_1302(0x8a,week);//寫入新的星期</p><p> write_1602com(one+0x0f);//光標(biāo)在原位閃爍</p><p><b> break;</b></p><p> case 5:Date++;//日期加1</p><p> if(Date==32)
89、//加到32時(shí)調(diào)為1</p><p><b> Date=1;</b></p><p> write_ymd(8,Date);//顯示新的日期</p><p> write_1302(0x86,Dec_BCD(Date));//寫入新的日期</p><p> write_1602com(one+9);//光
90、標(biāo)在原位閃爍</p><p><b> break;</b></p><p> case 6:Month++;//月份加1</p><p> if(Month==13)//加到13時(shí)調(diào)為1</p><p><b> Month=1;</b></p><p&g
91、t; write_ymd(5,Month);//顯示新的月份</p><p> write_1302(0x88,Dec_BCD(Month));//寫入新的月份</p><p> write_1602com(one+6);//光標(biāo)在原位閃爍</p><p><b> break;</b></p><p>
92、 case 7:Year++;//年加1</p><p> if(Year==100)//加到100時(shí)調(diào)為0</p><p><b> Year=0;</b></p><p> write_ymd(2,Year);//顯示新的年份</p><p> write_1302(0x8c,Dec_BCD
93、(Year));//寫入新的年份</p><p> write_1602com(one+3);//光標(biāo)在原位閃爍</p><p><b> break;</b></p><p><b> }</b></p><p><b> }</b></p><
94、p><b> }</b></p><p> if(key_down==0) //下調(diào)鍵</p><p><b> {</b></p><p> delay(5);//延時(shí)去抖動(dòng)</p><p> if(key_down==0)//下調(diào)鍵確認(rèn)按下
95、</p><p><b> {</b></p><p> while(!key_down);//等待按鍵釋放</p><p> switch(key1n)//功能鍵按鍵次數(shù)不同實(shí)現(xiàn)不同操作</p><p><b> {</b></p><p> c
96、ase 1:Second--;//秒減1</p><p> if(Second==-1)//減為-1時(shí) 調(diào)為59</p><p> Second=59;</p><p> write_hms(0x0a,Second);//顯示新的秒數(shù)</p><p> write_1302(0x80,0x80|Dec_BCD(Secon
97、d));//寫入新的秒數(shù)</p><p> write_1602com(two+0x0b);//光標(biāo)在原位閃爍</p><p><b> break;</b></p><p> case 2:Minute--;//分鐘減1</p><p> if(Minute==-1)//減為-1時(shí) 調(diào)為59<
98、/p><p> Minute=59;</p><p> write_hms(7,Minute);//顯示新的分鐘數(shù)</p><p> write_1302(0x82,Dec_BCD(Minute));//寫入新的分鐘數(shù)</p><p> write_1602com(two+8);//光標(biāo)在原位閃爍</p><p&g
99、t;<b> break;</b></p><p> case 3:Hour--;//小時(shí)減1</p><p> if(Hour==-1)//減為-1時(shí) 調(diào)為59</p><p><b> Hour=23;</b></p><p> write_hms(4,Hour);/
100、/顯示新的小時(shí)數(shù)</p><p> write_1302(0x84,Dec_BCD(Hour));//寫入新的小時(shí)數(shù)</p><p> write_1602com(two+5);//光標(biāo)在原位閃爍</p><p><b> break;</b></p><p> case 4:week--;//星期減1
101、</p><p> if(week==0)//減為0時(shí) 調(diào)為7</p><p><b> week=7;</b></p><p> write_week(week);//顯示新的星期數(shù)</p><p> write_1302(0x8a,week);//寫入新的星期數(shù)</p><p
102、> write_1602com(one+0x0f);//光標(biāo)在原位閃爍</p><p><b> break;</b></p><p> case 5:Date--;//日期減1</p><p> if(Date==255)//減為0時(shí) 調(diào)為31</p><p><b> Dat
103、e=31;</b></p><p> write_ymd(8,Date);//顯示新的日期數(shù)</p><p> write_1302(0x86,Dec_BCD(Date));//寫入新的日期數(shù)</p><p> write_1602com(one+9);//光標(biāo)在原位閃爍</p><p><b> brea
104、k;</b></p><p> case 6:Month--;//月份減1</p><p> if(Month==255)//減為0時(shí) 調(diào)為12</p><p><b> Month=12;</b></p><p> write_ymd(5,Month);//顯示新的月份數(shù)</
105、p><p> write_1302(0x88,Dec_BCD(Month));//寫入新的月份數(shù)</p><p> write_1602com(one+6);//光標(biāo)在原位閃爍</p><p><b> break;</b></p><p> case 7:Year--;//年份減1</p>
106、<p> if(Year==-1)//減為-1時(shí) 調(diào)為99</p><p><b> Year=99;</b></p><p> write_ymd(2,Year);//顯示新的年份數(shù)</p><p> write_1302(0x8c,Dec_BCD(Year));//寫入新的年份數(shù)</p><
107、p> write_1602com(one+3);//光標(biāo)在原位閃爍</p><p><b> break;</b></p><p><b> }</b></p><p><b> }</b></p><p><b> }</b></
108、p><p><b> }</b></p><p><b> }</b></p><p> void timer0() interrupt 1</p><p><b> {</b></p><p> Second = BCD_Decimal(read
109、_1302(0x81));//讀取1302的秒</p><p> Minute = BCD_Decimal(read_1302(0x83));//讀取1302的分鐘</p><p> Hour = BCD_Decimal(read_1302(0x85));//讀取1302的小時(shí)</p><p> Date = BCD_Decimal(read_
110、1302(0x87));//讀取1302的日期</p><p> Month = BCD_Decimal(read_1302(0x89));//讀取1302的月份</p><p> week=BCD_Decimal(read_1302(0x8b));//讀取1302的星期</p><p> Year=BCD_Decimal(read_1302(0
111、x8d));//讀取1302的年</p><p> write_hms(10,Second);//1602顯示的秒</p><p> write_hms(7,Minute);//1602顯示的分鐘</p><p> write_hms(4,Hour);//1602顯示的小時(shí)</p><p>
112、 write_ymd(8,Date);//1602顯示的日期</p><p> write_ymd(5,Month);//1602顯示的月份</p><p> write_ymd(2,Year);//1602顯示的年</p><p> write_week(week); //1602顯示的星期</p
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 眾賞文庫僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 單片機(jī)課程設(shè)計(jì)--多功能系統(tǒng)
- 單片機(jī)課程設(shè)計(jì)--單片機(jī)多功能測(cè)量?jī)x的設(shè)計(jì)
- 單片機(jī)課程設(shè)計(jì)-基于單片機(jī)的多功能電子鐘的設(shè)計(jì)
- 基于單片機(jī)的多功能秒表系統(tǒng)課程設(shè)計(jì)
- 單片機(jī)課程設(shè)計(jì)-多功能時(shí)鐘
- 單片機(jī)課程設(shè)計(jì)---多功能時(shí)鐘
- 基于單片機(jī)多功能秒表課程設(shè)計(jì)
- 單片機(jī)課程設(shè)計(jì)--基于單片機(jī)的秒表系統(tǒng)設(shè)計(jì)
- 單片機(jī)課程設(shè)計(jì)----多功能秒表
- 基于單片機(jī)的秒表設(shè)計(jì)單片機(jī)課程設(shè)計(jì)
- 單片機(jī)數(shù)字時(shí)鐘課程設(shè)計(jì)--單片機(jī)多功能電子鐘設(shè)計(jì)
- 單片機(jī)課程設(shè)計(jì)---多功能時(shí)鐘設(shè)計(jì)
- 單片機(jī)課程設(shè)計(jì)---多功能時(shí)鐘設(shè)計(jì)
- 基于單片機(jī)的多功能秒表的課程設(shè)計(jì)
- 單片機(jī)課程設(shè)計(jì)---基于單片機(jī)溫度測(cè)量系統(tǒng)設(shè)計(jì)
- 單片機(jī)多功能秒表課程設(shè)計(jì)--89c51單片機(jī)秒表的設(shè)計(jì)
- 單片機(jī)課程設(shè)計(jì)--基于單片機(jī)的數(shù)字時(shí)鐘設(shè)計(jì)
- 課程設(shè)計(jì)-單片機(jī)基于單片機(jī)的數(shù)字時(shí)鐘設(shè)計(jì)
- 單片機(jī)課程設(shè)計(jì)--單片機(jī)io口的應(yīng)用
- 多功能數(shù)字時(shí)鐘 單片機(jī)課程設(shè)計(jì)
評(píng)論
0/150
提交評(píng)論