微機課程設(shè)計_第1頁
微機課程設(shè)計_第2頁
微機課程設(shè)計_第3頁
微機課程設(shè)計_第4頁
微機課程設(shè)計_第5頁
已閱讀5頁,還剩18頁未讀 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、河南理工大學(xué)單片機應(yīng)用與仿真訓(xùn)練設(shè)計報告四路定時控制器姓 名: 焦騰飛 學(xué) 號: 1216306039 專業(yè)班級: 自動化2班 指導(dǎo)老師: 余開江 所在學(xué)院: 萬方科技學(xué)院 2015年6月5日目錄目錄.1摘要.21概述.31. 1單片機內(nèi)部資源.31.2四路定時器的基本功能.31.3系統(tǒng)的原理.31.4實際應(yīng)用.32系統(tǒng)方案及硬件電路設(shè)計.32.1系統(tǒng)總體設(shè)計框架結(jié)構(gòu).32.2系統(tǒng)硬件電路.42.3系統(tǒng)硬件總電路.64軟件設(shè)計.65 Proteus軟件仿真.76課程設(shè)計體會.7參考文獻(xiàn).8附1:程序源代碼.9附2:操作說明.212摘要 近年來,科學(xué)技術(shù)發(fā)展很快,單片機的使用也越來越多。我們在大

2、學(xué)也學(xué)到了很多關(guān)于單片機的知識,也做了很多單片機實驗。單片計算機即單片微型計算機。(single-chip microcomputer),是集cpu,ram,rom,定時,計數(shù)和多種接接口于一體的微控制器。它體積小,成本低,功能強,廣泛應(yīng)用于智能產(chǎn)品和工業(yè)自動化上。而c語言已成為當(dāng)前舉世公認(rèn)的高效簡潔又貼近硬件的編程語言之一。c語言現(xiàn)已成為專業(yè)化的單片機上的實用高級語言。而且由于開發(fā)速度、軟件質(zhì)量結(jié)構(gòu)化、可維護(hù)性方面的原因,使c語言漸漸有取代匯編的趨勢。這次我們做四路定時控制器作為微機原理與單片機的課程設(shè)計。 四路定時控制器主要應(yīng)用于定時控制四個回路的電源通斷。四路定時器的設(shè)計背景是單片機的電

3、子技術(shù)特征以及應(yīng)用。本系統(tǒng)采用的是STC10F08XE為中心器件來設(shè)計四路定時器的。系統(tǒng)使用性強,操作簡單,擴展性強。設(shè)計主要包括硬件的設(shè)計和軟件的設(shè)計。一個完整的四路定時器相當(dāng)于一個簡單的單片機系統(tǒng),該系統(tǒng)由四路定時器設(shè)置電路,單片機,顯示電路等構(gòu)成。單片機是集成IC芯片,只需要根據(jù)實際設(shè)計要求選型。其他部分都需要根據(jù)應(yīng)用要求和性能指標(biāo)自行設(shè)計。設(shè)計時,首先設(shè)置時間和線路,然后開始計時,在達(dá)到設(shè)定時間的時候指示燈閃爍。 該四路定時控制器實現(xiàn)的功能是以當(dāng)前時間為基準(zhǔn),以24小時為周期,可以任意設(shè)定哪個回路于某時刻開,到某時刻關(guān)。如可以設(shè)置第一個回路在8:30-11:30開,14:30-18:0

4、0開,其他時間段為關(guān)。能夠通過按鍵任意設(shè)置某回路某時間段的開關(guān)狀態(tài),可以利用數(shù)碼管直接顯示。整個系統(tǒng)通過軟硬件的協(xié)調(diào)工作,具有讀取方便、顯示直觀、功能多樣、電路簡潔、成本低廉、操作安全等諸多優(yōu)點,具有廣闊的市場前景,尤其在智能化家用電器和辦公自動化設(shè)備等領(lǐng)域。一、概述1. 單片機的電子技術(shù)特征單片機是將CPU、RAMROM定時器/計數(shù)器以及輸入輸出(I/O)接口等計算機的主要部件集成在一塊的集成電路芯片,作為微機系統(tǒng)它還可以實現(xiàn)模/數(shù)轉(zhuǎn)換、脈寬調(diào)制、計數(shù)器捕獲/比較邏輯、高速I/O口和WDT各種控制功能。2. 四路定時控制器基本功能 四路定時控制器是指應(yīng)用定時器的功能控制四個回路的通斷狀況,同

5、時可以用按鍵來設(shè)置每個通路的通斷以及通斷的時間和周期,利用定時器來控制單片機IO口的高低電平來間接控制繼電器的通斷。3. 系統(tǒng)原理采用STC10F08XE單片機為控制核心,基于STC10F08XE單片機所具備的的計數(shù)功能,達(dá)到實時時鐘的制作,并通過四位共陰極數(shù)碼管將時間直觀的顯示出來??梢岳冒存I輸入功能對顯示時間進(jìn)行調(diào)整。其共設(shè)置了四個定時通道,每個定時通道都是相互獨立的。四個定時通道可以分別設(shè)置多個時間段的開關(guān)狀態(tài),每個通道都可以通過I/O口輸出信號對電磁繼電器進(jìn)行控制,通過控制電磁繼電器的通斷進(jìn)一步控制繼電器所連接的其他電路的開關(guān)狀態(tài)。充分利用了弱電控制強電的效果。4. 實際應(yīng)用被廣泛地

6、應(yīng)用在各種領(lǐng)域。例如,用來作家用電器的定時控制器;在辦公室中用作磁盤驅(qū)動、打印機、復(fù)印機、電話的控制;它還可以作為電子秤、收款機、倉儲安全檢測系統(tǒng)、空氣調(diào)節(jié)系統(tǒng)等冷凍保鮮系統(tǒng)等的專用系統(tǒng)的控制器;在工業(yè)中,像工業(yè)過程控制、過程監(jiān)制以及機電一體化等控制系統(tǒng);它還可以構(gòu)成一些智能儀表與集成智能傳感器傳統(tǒng)的控制器等。二、 系統(tǒng)總體方案及硬件設(shè)計1 .系統(tǒng)總體設(shè)計框架結(jié)構(gòu) 圖1 系統(tǒng)總體設(shè)計框架四路定時控制系統(tǒng)總體設(shè)計框架結(jié)構(gòu)如圖1所示。2.系統(tǒng)硬件電路1) 時鐘電路設(shè)計圖2 時鐘的電路時鐘電路由振蕩器及定時發(fā)生器和地址鎖存允許信號ALE組成,如圖2所示。所用的時鐘電路用的是11.0592Mhz的晶振

7、,它的振蕩周期約為0.0833µs,時鐘周期是1/6µs,機器周期是1µs2) 按鍵電路設(shè)計圖3 按鍵電路原理圖采用2x3鍵盤掃描,如圖3所示,使用每一個按鍵。3)數(shù)碼管顯示電路 圖4 數(shù)碼管顯示電路 顯示塊是由若干發(fā)光二極管組合而成的,一般的“8”字型顯示塊由a、b、c、d、e、f、g、h8個發(fā)光二極管組成,GND接1時均不亮,字位輸出口和字形輸出口采用高電壓驅(qū)動,如圖4所示。4)繼電器電路1. 繼電器的基本工作原理:繼電器(是一種電控制器件,是當(dāng)輸入量(激勵量)的變化達(dá)到規(guī)定要求時,在電氣輸出電路中使被控量發(fā)生預(yù)定的階躍變化的一種電器。它具有控制系統(tǒng)(又稱輸入

8、回路)和被控制系統(tǒng)(又稱輸出回路)之間的互動關(guān)系。通常應(yīng)用于自動化的控制電路中,它實際上是用小電流去控制大電流運作的一種“自動開關(guān)”。故在電路中起著自動調(diào)節(jié)、安全保護(hù)等作用。 圖5 繼電器工作原理圖本次試驗使用了電磁繼電器,原理圖如圖5所示,電磁繼電器一般由鐵芯、線圈、銜鐵、觸點簧片等組成的。只要在線圈兩端加上一定的電壓,線圈中就會流過一定的電流,從而生生電磁效應(yīng),銜鐵就會在電磁力吸引的作用下克服返回彈簧的拉力吸向鐵芯,從而帶動銜鐵的動觸點與靜觸點(常開觸點)吸合。當(dāng)線圈斷電后,電磁的吸力也隨之消失,銜鐵就會在彈簧的反作用力返回原來的位置,使動觸點與原來的靜觸點(常閉觸點)釋放。這樣吸合、釋放

9、,從而達(dá)到了在電路中的導(dǎo)通、切斷的目的。對于繼電器的“常開、常閉”觸點,可以這樣來區(qū)分:繼電器線圈未通電時處于斷開狀態(tài)的靜觸點,稱為“常開觸點”;處于接通狀態(tài)的靜觸點稱為“常閉觸點”。繼電器一般有兩股電路,為低壓控制電路和高壓工作電路。3. 系統(tǒng)硬件總電路圖6 系統(tǒng)硬件仿真電路圖三、軟件設(shè)計圖7 系統(tǒng)軟件設(shè)計的步驟四、 Proteus軟件仿真圖8 Proteus軟件仿真五、課程設(shè)計體會 本次課程設(shè)計基本結(jié)束,回想這一過程,真是困難重重,但是也學(xué)到很多。首先是實驗程序,剛開始一片茫然,不知道該如何開始。在網(wǎng)上搜到部分資料后,經(jīng)過和宿舍同學(xué)探討學(xué)習(xí)后開始有點眉目,最后參考部分材料后得出了最終程序。

10、其次,在焊接電路板時,出現(xiàn)了元器件焊反的情況,但在同學(xué)的幫助下成功了。最后,在Protues仿真實驗中有出現(xiàn)數(shù)碼管顯示數(shù)字成零不斷跳動,而且LED燈自動跳變,相當(dāng)于是中斷不停執(zhí)行、判斷鍵值,特別不穩(wěn)定的情況。但經(jīng)過大量的修正最終正常。 雖然這次實驗沒有創(chuàng)新,但是也是自己動手查資料,修改程序,達(dá)到了實驗要求。通過本次課程設(shè)計,學(xué)到了很多關(guān)于單片機的知識,我也懂得了理論與實際相結(jié)合是很重要的,只有理論知識是遠(yuǎn)遠(yuǎn)不夠的,只有把所學(xué)的理論知識與實踐相結(jié)合起來,從理論中得出結(jié)論,才能真正為社會服務(wù),從而提高自己的實際動手能力和獨立思考的能力。有時,只有經(jīng)過自己親手試驗,才能更深層次的懂得實驗原理和每部分

11、電路的功能。我也很感謝教育過我的老師和周圍同學(xué),在遇到困難的時熱情的幫助我度過難關(guān),并讓我學(xué)到了很多。 此次課程設(shè)計,我學(xué)到了很多,對以后的學(xué)習(xí)生活都有很大幫助。今后我也會更加注重理論與實際相結(jié)合,多動手,多思考,全面提高自己的能力。參考文獻(xiàn):1 郭天祥 經(jīng)典單片機 哈爾濱工業(yè)大學(xué),2006 .2 張俊謨.單片機中級教程-原理與應(yīng)用. 北京:北京航空航天大學(xué),2006.3 霍孟友.單片機原理與應(yīng)用.北京:機械工業(yè)出版社,2003.4余發(fā)山,王福忠,楊凌霄,王莉。微機原理與單片機接口技術(shù).北京:煤炭工業(yè)出版社。2013.8.5 左金生.電子與模擬電子技術(shù)M.北京:電子工業(yè)出版社.2004:105

12、-131.附1:源程序代碼#include<reg52.h>#include<intrins.h>#define uint unsigned int/*0216-1*/#define uchar unsigned char /*028-1*/#define N 46080/*N=50000*f0/12,定時50ms*/#define M 20/* 定時M*0.05s */uint shi,fen;#define num3(X2) (X2)/10)#define num2(X2) (X2)%10)#define num1(X1) (X1)/10)#define num0(

13、X1) (X1)%10)sbit W1=P03;sbit W2=P02;sbit W3=P01;sbit W4=P00;sbit led=P35;sbit H1=P36;sbit H2=P37;sbit huiluA=P20;sbit huiluB=P21;sbit huiluC=P22;sbit huiluD=P23;sfr P1M1=0x91;/和后面的main函數(shù)中的 sfr P1M0=0x92;/P1M1 P1M0合在一起增加亮度sfr P2M1=0x95;sfr P2M0=0x96;uint num/*T0_timer*/,num0/*T0_timer*/,num1,key/*mat

14、rixkeyscan*/; /定義全局變量uchar k2=0,k3=0,k5=1,k6=0;/按鍵計數(shù)uchar A0_shi=12,A0_fen=30,A1_shi=13,A1_fen=30,B0_shi=12,B0_fen=30,B1_shi=13,B1_fen=30,C0_shi=12,C0_fen=30,C1_shi=13,C1_fen=30,D0_shi=12,D0_fen=30,D1_shi=13,D1_fen=30;/繼電器定時起點、終點uchar code duanxuan=0x3f,/*顯示0*/0x06,/*顯示1*/0x5b,/*顯示2*/0x4f,/*顯示3*/0x6

15、6,/*顯示4*/0x6d,/*顯示5*/0x7d,/*顯示6*/0x07,/*顯示7*/0x7f,/*顯示8*/0x6f,/*顯示9*/0x77,/*顯示A*/0x7c,/*顯示B*/0x39,/*顯示C*/0x5e,/*顯示D*/0x79,/*顯示E*/0x71/*顯示F*/;void delay_ms(uint xms) /*延時子函數(shù)程序*/ uint i,j;for(i=xms;i>0;i-) for(j=250;j>0;j-);/*該層循環(huán)延時約1ms*/*/typedef unsigned char BYTE;typedef unsigned int WORD;/*D

16、eclare SFR associated with the IAP*/sfr IAP_DATA= 0xC2;/Flash data registersfr IAP_ADDRH= 0xC3;/Flash address HIGHsfr IAP_ADDRL= 0xC4;/Flash address LOWsfr IAP_CMD= 0xC5;/Flash command registersfr IAP_TRIG= 0xC6;/Flash commandtriggersfr IAP_CONTR= 0xC7;/Flash control register/*Define ISP/IAP/EEPROM

17、command*/#define CMD_IDLE0/Stand-By#define CMD_READ1/Byte-Read#define CMD_PROGRAM2/Byte-Program#define CMD_ERASE3/Sector-Erase/*Define ISP/IAP/EEPROM operation const for IAP_CONTR*/#define ENABLE_IAP0x80/SYSCLK<30MHz/#define ENABLE_IAP0x81/SYSCLK<24MHz/#define ENABLE_IAP0x82/SYSCLK<20MHz #d

18、efine ENABLE_IAP0x83/SYSCLK<12MHz/#define ENABLE_IAP0x84/SYSCLK< 6MHz/#define ENABLE_IAP0x85/SYSCLK< 3MHz/#define ENABLE_IAP0x86/SYSCLK< 2MHz/#define ENABLE_IAP0x87/SYSCLK< 1MHz/*Start address for STC10F08XE series EEPROM */#define IAP_ADDRESS0x0000/*-Disable ISP/IAP/EEPROM functionMa

19、ke MCU in a safe state-*/void IapIdle()IAP_CMD= 0;/Clear command registerIAP_TRIG= 0;/Clear commandtriggerIAP_CONTR= 0;/Close IAP functionIAP_ADDRH= 0x80;/Data ptr point to non-EEPROM areaIAP_ADDRL= 0;/Clear IAP address to prevent misuse/*-Read one byte from ISP/IAP/EEPROM areaInput:addr (ISP/IAP/EE

20、PROM address)Output: Flash data-*/BYTE IapReadByte(WORD addr)BYTE dat;/Data bufferIAP_CONTR = ENABLE_IAP;/Open IAP function,and set wait timeIAP_CMD= CMD_READ;/Set ISP/IAP/EEPROM READ commandIAP_ADDRL = addr;/Set ISP/IAP/EEPROM address lowIAP_ADDRH = addr>>8;/Set ISP/IAP/EEPROM address highIAP

21、_TRIG = 0x5a;/Send trigger command1(0x5a)IAP_TRIG = 0xa5;/Send trigger command2(0xa5)_nop_();/MCU will hold here until ISP/IAP/EEPROM/operation completedat = IAP_DATA;/Read ISP/IAP/EEPROM dataIapIdle();/close ISP/IAP/EEPROM functionreturn dat;/Return Flash data/*-Programe one byte to ISP/IAP/EEPROM

22、areaInput: addr(ISP/IAP/EEPROM address)dat(ISP/IAP/EEPROM data)Output:-*/void IapProgramByte(WORD addr, BYTE dat)IAP_CONTR = ENABLE_IAP;/Open IAP function,and set wait timeIAP_CMD= CMD_PROGRAM;/Set ISP/IAP/EEPROM PROGRAM commandIAP_ADDRL = addr;/Set ISP/IAP/EEPROM address lowIAP_ADDRH = addr>>

23、8;/Set ISP/IAP/EEPROM address highIAP_DATA = dat;/Write ISP/IAP/EEPROM dataIAP_TRIG = 0x5a;/Send trigger command1(0x5a)IAP_TRIG = 0xa5;/Send trigger command2(0xa5)_nop_();/MCU will hold here until ISP/IAP/EEPROM/operation completeIapIdle();/*-Erase one sector areaInput: addr (ISP/IAP/EEPROM address)

24、Output:-*/void IapEraseSector(WORD addr)IAP_CONTR = ENABLE_IAP;/Open IAP function,and set wait timeIAP_CMD= CMD_ERASE;/Set ISP/IAP/EEPROM ERASE commandIAP_ADDRL = addr;/Set ISP/IAP/EEPROM address lowIAP_ADDRH = addr>>8;/Set ISP/IAP/EEPROM address highIAP_TRIG = 0x5a;/Send trigger command1(0x5a

25、)IAP_TRIG = 0xa5;/Send trigger command2(0xa5)_nop_();/MCU will hold here until ISP/IAP/EEPROM/operation completeIapIdle();/*數(shù)碼管顯示函數(shù)*/void displays(uchar X2,X1) W1=0;P1=duanxuannum0(X1);delay_ms(5);W1=1;P1=0x00;/消影 W2=0;P1=duanxuannum1(X1);delay_ms(5);W2=1;P1=0x00; W3=0;P1=duanxuannum2(X2)|0x80;delay

26、_ms(5);W3=1;P1=0x00; W4=0;P1=duanxuannum3(X2);delay_ms(5);W4=1;P1=0x00;/*定時器初始化*/void T_initialize()/ EA=1; /開放ALL中斷允許Enable ET0=1; /開放T0中斷允許Enable*/ TMOD=0x11; /定時器0、1,工作方式1,僅受TCON中TR控制*/ TH0=(65536-N)/256; TL0=(65536-N)%256; ET1=1; /開放T1中斷允許Enable*/ TH1=(65536-N)/256; TL1=(65536-N)%256; TR0=1; /定時

27、器計時開始/*/*時鐘實時時間、定時段設(shè)置(顯示放后邊)*/void clk_weixuan()/switch(k5)case 1:switch(k2)case 0:;break;case 1:if(key=1)A0_shi+;if(A0_shi=24)A0_shi=0;/*shi=023*/ if(key=4)if(A0_shi=0)A0_shi=24;A0_shi-;/*shi=230*/break; case 2:if(key=1)A0_fen+;if(A0_fen=60)A0_fen=0;/*fen=059*/ if(key=4)if(A0_fen=0)A0_fen=60;A0_fen

28、-;/*fen=059*/break;case 3:if(key=1)A1_shi+;if(A1_shi=24)A1_shi=0;/*shi=023*/ if(key=4)if(A1_shi=0)A1_shi=24;A1_shi-;/*shi=230*/break;case 4:if(key=1)A1_fen+;if(A1_fen=60)A1_fen=0;/*fen=059*/ if(key=4)if(A1_fen=0)A1_fen=60;A1_fen-;/*fen=059*/break;case 5:IapEraseSector(0x0000);IapProgramByte(0x0000,A

29、0_shi);IapProgramByte(0x0001,A0_fen);IapProgramByte(0x0002,A1_shi);IapProgramByte(0x0003,A1_fen);k2=0;break;break;case 2:switch(k2)case 0:;break;case 1:if(key=1)B0_shi+;if(B0_shi=24)B0_shi=0;/*shi=023*/ if(key=4)if(B0_shi=0)B0_shi=24;B0_shi-;/*shi=230*/break; case 2:if(key=1)B0_fen+;if(B0_fen=60)B0_

30、fen=0;/*fen=059*/ if(key=4)if(B0_fen=0)B0_fen=60;B0_fen-;/*fen=590*/break;case 3:if(key=1)B1_shi+;if(B1_shi=24)B1_shi=0;/*shi=023*/ if(key=4)if(B1_shi=0)B1_shi=24;B1_shi-;/*shi=230*/break;case 4:if(key=1)B1_fen+;if(B1_fen=60)B1_fen=0;/*fen=059*/ if(key=4)if(B1_fen=0)B1_fen=60;B1_fen-;/*fen=059*/brea

31、k;case 5:IapEraseSector(0x0200);IapProgramByte(0x0200,B0_shi);IapProgramByte(0x0201,B0_fen);IapProgramByte(0x0202,B1_shi);IapProgramByte(0x0203,B1_fen);k2=0;break;break;case 3:switch(k2)case 0:;break;case 1:if(key=1)C0_shi+;if(C0_shi=24)C0_shi=0;/*shi=023*/ if(key=4)if(C0_shi=0)C0_shi=24;C0_shi-;/*s

32、hi=230*/break; case 2:if(key=1)C0_fen+;if(C0_fen=60)C0_fen=0;/*fen=059*/ if(key=4)if(C0_fen=0)C0_fen=60;C0_fen-;/*fen=590*/break;case 3:if(key=1)C1_shi+;if(C1_shi=24)C1_shi=0;/*shi=023*/ if(key=4)if(C1_shi=0)C1_shi=24;C1_shi-;/*shi=230*/break;case 4:if(key=1)C1_fen+;if(C1_fen=60)C1_fen=0;/*fen=059*/

33、 if(key=4)if(C1_fen=0)C1_fen=60;C1_fen-;/*fen=059*/break;case 5:IapEraseSector(0x0400);IapProgramByte(0x0400,C0_shi);IapProgramByte(0x0401,C0_fen);IapProgramByte(0x0402,C1_shi);IapProgramByte(0x0403,C1_fen);k2=0;break;break;case 4:switch(k2)case 0:;break;case 1:if(key=1)D0_shi+;if(D0_shi=24)D0_shi=0

34、;/*shi=023*/ if(key=4)if(D0_shi=0)D0_shi=24;D0_shi-;/*shi=230*/break; case 2:if(key=1)D0_fen+;if(D0_fen=60)D0_fen=0;/*fen=059*/ if(key=4)if(D0_fen=0)D0_fen=60;D0_fen-;/*fen=590*/break;case 3:if(key=1)D1_shi+;if(D1_shi=24)D1_shi=0;/*shi=023*/ if(key=4)if(D1_shi=0)D1_shi=24;D1_shi-;/*shi=230*/break;ca

35、se 4:if(key=1)D1_fen+;if(D1_fen=60)D1_fen=0;/*fen=059*/ if(key=4)if(D1_fen=0)D1_fen=60;D1_fen-;/*fen=059*/break;case 5:IapEraseSector(0x0600);IapProgramByte(0x0600,D0_shi);IapProgramByte(0x0601,D0_fen);IapProgramByte(0x0602,D1_shi);IapProgramByte(0x0603,D1_fen);k2=0;break;break;if(k2=0)switch(k3)cas

36、e 0:TR0=1;break; case 1:if(key=1)shi+;if(shi=24)shi=0;/*shi=023*/ if(key=4)if(shi=0)shi=24;shi-;/*shi=230*/;break; case 2:if(key=1)fen+;if(fen=60)fen=0;/*fen=059*/ if(key=4)if(fen=0)fen=60;fen-;/*fen=590*/;break;/*矩陣鍵盤掃描,同時可進(jìn)行數(shù)碼管各位的+- */void matrixkeyscan()/如何確定時間設(shè)定時數(shù)碼管顯示的數(shù)字是否會自動+1 /*當(dāng)兩行H1、H2重新賦值時存在

37、沖突,解決辦法為:H1=1時H2=0,H2=1時H1=0或者對P3口進(jìn)行整體賦值*/ uchar temp; /*掃描第一行*/ H1=0;H2=1;/掃描第一行 temp=P0; temp=temp|0x1f;/讀取L1、L2、L3的狀態(tài)/*判斷哪個鍵摁下*/ if(temp!=0xff)/判斷是否有鍵摁下 delay_ms(10);/延時 H1=0;H2=1;/掃描第一行/重新讀取 temp=P0; temp=temp|0x1f;/讀取L1、L2、L3的狀態(tài) if(temp!=0xff)/消抖 switch(temp)/判斷哪個鍵摁下 case 0x7f:key=3;k3+;k3=k3%3

38、/*k=02*/; TR0=0/*時間設(shè)定時定時器停止*/;break; case 0xbf:key=2;k3=0;k2+;if(k2=1)num1=0;TR1=1;break; case 0xdf:key=1;break; /鍵1 2 3 分別摁下clk_weixuan();while(temp!=0xff)/按鍵釋放才會跳出循環(huán) H1=0;H2=1;/掃描第一行/重新讀取 temp=P0; temp=temp|0x1f;/讀取L1、L2、L3的狀態(tài) /*掃描第二行*/ H2=0;H1=1;/掃描第二行 temp=P0; temp=temp|0x1f;/讀取L1、L2、L3的狀態(tài)/*判斷哪個

39、鍵摁下*/ if(temp!=0xff)/判斷是否有鍵摁下 delay_ms(10);/延時 H2=0;H1=1;/掃描第二行/重新讀取 temp=P0; temp=temp|0x1f;/讀取L1、L2、L3的狀態(tài) if(temp!=0xff)/消抖 switch(temp)/判斷哪個鍵摁下 case 0x7f:key=6;k6+;if(k6=2)k6=0;break; case 0xbf:key=5;k5+;/*1 2 3 4 */if(k5=5)k5=1;num1=0;TR1=1;/*內(nèi)次按下K5 都會顯示2s的回路(A/B/C/D),故需要打開定時器且計數(shù)清零*/break; case

40、0xdf:key=4;break; /鍵 4 5 6 分別摁下clk_weixuan();while(temp!=0xff)/按鍵釋放才會跳出循環(huán) H2=0;H1=1;/掃描第二行/重新讀取 temp=P0; temp=temp|0x1f;/讀取L1、L2、L3的狀態(tài) void displays_hui() W1=0;P1=duanxuank5+9;delay_ms(5);W1=1;P1=0x00;/消影 W2=0;P1=duanxuank5+9;delay_ms(5);W2=1;P1=0x00; W3=0;P1=duanxuank5+9;delay_ms(5);W3=1;P1=0x00; W

41、4=0;P1=duanxuank5+9;delay_ms(5);W4=1;P1=0x00;void displays_set() W1=0;P1=0x40;delay_ms(5);W1=1;P1=0x00;/消影 W2=0;P1=0x40;delay_ms(5);W2=1;P1=0x00; W3=0;P1=duanxuank5+9;delay_ms(5);W3=1;P1=0x00; W4=0;P1=duanxuank5+9;delay_ms(5);W4=1;P1=0x00;void displays_all()/先優(yōu)先處理K5 K2按下時的顯示問題,再進(jìn)行正常顯示 if(key=5) whil

42、e(num1<40)displays_hui();TR1=0;/*只顯示2s的回路,然后恢復(fù)正常時鐘顯示*/ if(k2!=0)/正常調(diào)時k3!=0,此時按下K2不能調(diào)整定時的時間段if(k3=0)while(num1<40)displays_set()/*A0- 2s*/;TR1=0; switch(k5) case 1:if(k2<=2)displays(A0_shi,A0_fen);else displays(A1_shi,A1_fen);break; case 2:if(k2<=2)displays(B0_shi,B0_fen);else displays(B1

43、_shi,B1_fen);break; case 3:if(k2<=2)displays(C0_shi,C0_fen);else displays(C1_shi,C1_fen);break; case 4:if(k2<=2)displays(D0_shi,D0_fen);else displays(D1_shi,D1_fen);break; /*只顯示2s的定時起終點,然后恢復(fù)正常時鐘顯示,k2*/*/ if(k2=0)displays(shi,fen); /正常顯示時鐘switch(k5)case 1:huiluD=1;if(k6=0)/對K6按下的處理 if(shi*100+f

44、en)>(A0_shi*100+A0_fen)&(shi*100+fen)<(A1_shi*100+A1_fen) huiluA=1;else huiluA=0;break; case 2:huiluA=1;if(k6=0)if(shi*100+fen)>(B0_shi*100+B0_fen)&(shi*100+fen)<(B1_shi*100+B1_fen)huiluB=0;else huiluB=1;break; case 3:huiluB=1;if(k6=0) if(shi*100+fen)>(C0_shi*100+C0_fen)&(shi*100+fen)<(C1_shi*100+C1_fen) hui

溫馨提示

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

最新文檔

評論

0/150

提交評論