




已閱讀5頁,還剩17頁未讀, 繼續(xù)免費(fèi)閱讀
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
河南理工大學(xué)單片機(jī)應(yīng)用與仿真訓(xùn)練設(shè)計報告四路定時控制器姓 名: 范鵬超 學(xué) 號: 311108001309 專業(yè)班級: 電儀12- 2班 指導(dǎo)老師: 荊鵬輝 所在學(xué)院:電氣工程與自動化學(xué)院 2015年1月13日 目錄目錄1摘要21 概述31.1 單片機(jī)的電子技術(shù)特征31.2 四路定時控制器基本功能31.3 系統(tǒng)原理31.4 實(shí)際應(yīng)用32 系統(tǒng)總體方案及硬件設(shè)計32.1 系統(tǒng)總體設(shè)計框架結(jié)構(gòu)32.2系統(tǒng)硬件電路42.3 系統(tǒng)硬件總電路63軟件設(shè)計64 proteus軟件仿真75課程設(shè)計體會7參考文獻(xiàn):8附1:源程序代碼9摘要 近年來,科學(xué)技術(shù)發(fā)展很快,單片機(jī)的使用也越來越多。我們在大學(xué)也學(xué)到了很多關(guān)于單片機(jī)的知識,也做了很多單片機(jī)實(shí)驗(yàn)。單片計算機(jī)即單片微型計算機(jī)。(single-chip microcomputer),是集cpu,ram,rom,定時,計數(shù)和多種接接口于一體的微控制器。它體積小,成本低,功能強(qiáng),廣泛應(yīng)用于智能產(chǎn)品和工業(yè)自動化上。而c語言已成為當(dāng)前舉世公認(rèn)的高效簡潔又貼近硬件的編程語言之一。c語言現(xiàn)已成為專業(yè)化的單片機(jī)上的實(shí)用高級語言。而且由于開發(fā)速度、軟件質(zhì)量結(jié)構(gòu)化、可維護(hù)性方面的原因,使c語言漸漸有取代匯編的趨勢。這次我們做四路定時控制器作為微機(jī)原理與單片機(jī)的課程設(shè)計。 四路定時控制器主要應(yīng)用于定時控制四個回路的電源通斷。四路定時器的設(shè)計背景是單片機(jī)的電子技術(shù)特征以及應(yīng)用。本系統(tǒng)采用的是stc10f08xe為中心器件來設(shè)計四路定時器的。系統(tǒng)使用性強(qiáng),操作簡單,擴(kuò)展性強(qiáng)。設(shè)計主要包括硬件的設(shè)計和軟件的設(shè)計。一個完整的四路定時器相當(dāng)于一個簡單的單片機(jī)系統(tǒng),該系統(tǒng)由四路定時器設(shè)置電路,單片機(jī),顯示電路等構(gòu)成。單片機(jī)是集成ic芯片,只需要根據(jù)實(shí)際設(shè)計要求選型。其他部分都需要根據(jù)應(yīng)用要求和性能指標(biāo)自行設(shè)計。設(shè)計時,首先設(shè)置時間和線路,然后開始計時,在達(dá)到設(shè)定時間的時候指示燈閃爍。 該四路定時控制器實(shí)現(xiàn)的功能是以當(dāng)前時間為基準(zhǔn),以24小時為周期,可以任意設(shè)定哪個回路于某時刻開,到某時刻關(guān)。如可以設(shè)置第一個回路在8:30-11:30開,14:30-18:00開,其他時間段為關(guān)。能夠通過按鍵任意設(shè)置某回路某時間段的開關(guān)狀態(tài),可以利用數(shù)碼管直接顯示。整個系統(tǒng)通過軟硬件的協(xié)調(diào)工作,具有讀取方便、顯示直觀、功能多樣、電路簡潔、成本低廉、操作安全等諸多優(yōu)點(diǎn),具有廣闊的市場前景,尤其在智能化家用電器和辦公自動化設(shè)備等領(lǐng)域。1 概述1.1 單片機(jī)的電子技術(shù)特征單片機(jī)是將cpu、ramrom定時器/計數(shù)器以及輸入輸出(i/o)接口等計算機(jī)的主要部件集成在一塊的集成電路芯片,作為微機(jī)系統(tǒng)它還可以實(shí)現(xiàn)模/數(shù)轉(zhuǎn)換、脈寬調(diào)制、計數(shù)器捕獲/比較邏輯、高速i/o口和wdt各種控制功能。1.2 四路定時控制器基本功能 四路定時控制器是指應(yīng)用定時器的功能控制四個回路的通斷狀況,同時可以用按鍵來設(shè)置每個通路的通斷以及通斷的時間和周期,利用定時器來控制單片機(jī)io口的高低電平來間接控制繼電器的通斷。1.3 系統(tǒng)原理采用stc10f08xe單片機(jī)為控制核心,基于stc10f08xe單片機(jī)所具備的的計數(shù)功能,達(dá)到實(shí)時時鐘的制作,并通過四位共陰極數(shù)碼管將時間直觀的顯示出來。可以利用按鍵輸入功能對顯示時間進(jìn)行調(diào)整。其共設(shè)置了四個定時通道,每個定時通道都是相互獨(dú)立的。四個定時通道可以分別設(shè)置多個時間段的開關(guān)狀態(tài),每個通道都可以通過i/o口輸出信號對電磁繼電器進(jìn)行控制,通過控制電磁繼電器的通斷進(jìn)一步控制繼電器所連接的其他電路的開關(guān)狀態(tài)。充分利用了弱電控制強(qiáng)電的效果。1.4 實(shí)際應(yīng)用被廣泛地應(yīng)用在各種領(lǐng)域。例如,用來作家用電器的定時控制器;在辦公室中用作磁盤驅(qū)動、打印機(jī)、復(fù)印機(jī)、電話的控制;它還可以作為電子秤、收款機(jī)、倉儲安全檢測系統(tǒng)、空氣調(diào)節(jié)系統(tǒng)等冷凍保鮮系統(tǒng)等的專用系統(tǒng)的控制器;在工業(yè)中,像工業(yè)過程控制、過程監(jiān)制以及機(jī)電一體化等控制系統(tǒng);它還可以構(gòu)成一些智能儀表與集成智能傳感器傳統(tǒng)的控制器等。2 系統(tǒng)總體方案及硬件設(shè)計2.1 系統(tǒng)總體設(shè)計框架結(jié)構(gòu)數(shù)碼管電路按鍵電路繼電器電路圖1 系統(tǒng)總體設(shè)計框架四路定時控制系統(tǒng)總體設(shè)計框架結(jié)構(gòu)如圖1所示。2.2系統(tǒng)硬件電路1) 時鐘電路設(shè)計圖2 時鐘的電路時鐘電路由振蕩器及定時發(fā)生器和地址鎖存允許信號ale組成,如圖2所示。所用的時鐘電路用的是11.0592mhz的晶振,它的振蕩周期約為0.0833s,時鐘周期是1/6s,機(jī)器周期是1s2)按鍵電路設(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)(又稱輸入回路)和被控制系統(tǒng)(又稱輸出回路)之間的互動關(guān)系。通常應(yīng)用于自動化的控制電路中,它實(shí)際上是用小電流去控制大電流運(yùn)作的一種“自動開關(guān)”。故在電路中起著自動調(diào)節(jié)、安全保護(hù)等作用。 圖5 繼電器工作原理圖本次試驗(yàn)使用了電磁繼電器,原理圖如圖5所示,電磁繼電器一般由鐵芯、線圈、銜鐵、觸點(diǎn)簧片等組成的。只要在線圈兩端加上一定的電壓,線圈中就會流過一定的電流,從而生生電磁效應(yīng),銜鐵就會在電磁力吸引的作用下克服返回彈簧的拉力吸向鐵芯,從而帶動銜鐵的動觸點(diǎn)與靜觸點(diǎn)(常開觸點(diǎn))吸合。當(dāng)線圈斷電后,電磁的吸力也隨之消失,銜鐵就會在彈簧的反作用力返回原來的位置,使動觸點(diǎn)與原來的靜觸點(diǎn)(常閉觸點(diǎn))釋放。這樣吸合、釋放,從而達(dá)到了在電路中的導(dǎo)通、切斷的目的。對于繼電器的“常開、常閉”觸點(diǎn),可以這樣來區(qū)分:繼電器線圈未通電時處于斷開狀態(tài)的靜觸點(diǎn),稱為“常開觸點(diǎn)”;處于接通狀態(tài)的靜觸點(diǎn)稱為“常閉觸點(diǎn)”。繼電器一般有兩股電路,為低壓控制電路和高壓工作電路。2.3 系統(tǒng)硬件總電路圖6 系統(tǒng)硬件仿真電路圖3軟件設(shè)計圖7 系統(tǒng)軟件設(shè)計的步驟4 proteus軟件仿真圖8 proteus軟件仿真5課程設(shè)計體會 本次課程設(shè)計基本結(jié)束,回想這一過程,真是困難重重,但是也學(xué)到很多。首先是實(shí)驗(yàn)程序,剛開始一片茫然,不知道該如何開始。在網(wǎng)上搜到部分資料后,經(jīng)過和宿舍同學(xué)探討學(xué)習(xí)后開始有點(diǎn)眉目,最后參考部分材料后得出了最終程序。其次,在焊接電路板時,出現(xiàn)了元器件焊反的情況,但在同學(xué)的幫助下成功了。最后,在protues仿真實(shí)驗(yàn)中有出現(xiàn)數(shù)碼管顯示數(shù)字成零不斷跳動,而且led燈自動跳變,相當(dāng)于是中斷不停執(zhí)行、判斷鍵值,特別不穩(wěn)定的情況。但經(jīng)過大量的修正最終正常。 雖然這次實(shí)驗(yàn)沒有創(chuàng)新,但是也是自己動手查資料,修改程序,達(dá)到了實(shí)驗(yàn)要求。通過本次課程設(shè)計,學(xué)到了很多關(guān)于單片機(jī)的知識,我也懂得了理論與實(shí)際相結(jié)合是很重要的,只有理論知識是遠(yuǎn)遠(yuǎn)不夠的,只有把所學(xué)的理論知識與實(shí)踐相結(jié)合起來,從理論中得出結(jié)論,才能真正為社會服務(wù),從而提高自己的實(shí)際動手能力和獨(dú)立思考的能力。有時,只有經(jīng)過自己親手試驗(yàn),才能更深層次的懂得實(shí)驗(yàn)原理和每部分電路的功能。我也很感謝教育過我的老師和周圍同學(xué),在遇到困難的時熱情的幫助我度過難關(guān),并讓我學(xué)到了很多。 此次課程設(shè)計,我學(xué)到了很多,對以后的學(xué)習(xí)生活都有很大幫助。今后我也會更加注重理論與實(shí)際相結(jié)合,多動手,多思考,全面提高自己的能力。參考文獻(xiàn):1余發(fā)山,王福忠,楊凌霄,王莉。微機(jī)原理與單片機(jī)接口技術(shù).北京:煤炭工業(yè)出版社。2013.8.2 左金生.電子與模擬電子技術(shù)m.北京:電子工業(yè)出版社.2004:105-131.3 尹勇.單片機(jī)開發(fā)環(huán)境vision2的開發(fā)指南m. 北京:北京航空航天大學(xué)出版社,2004:173-199.4 張俊謨.單片機(jī)中級教程-原理與應(yīng)用. 北京:北京航空航天大學(xué),2006.5 霍孟友.單片機(jī)原理與應(yīng)用.北京:機(jī)械工業(yè)出版社,2003.附1:源程序代碼#include#include#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(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/*matrixkeyscan*/; /定義全局變量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;/繼電器定時起點(diǎn)、終點(diǎn)uchar code duanxuan=0x3f,/*顯示0*/0x06,/*顯示1*/0x5b,/*顯示2*/0x4f,/*顯示3*/0x66,/*顯示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;i0;i-) for(j=250;j0;j-);/*該層循環(huán)延時約1ms*/*/typedef unsigned char byte;typedef unsigned int word;/*declare 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 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/sysclk30mhz/#define enable_iap0x81/sysclk24mhz/#define enable_iap0x82/sysclk20mhz #define enable_iap0x83/sysclk12mhz/#define enable_iap0x84/sysclk 6mhz/#define enable_iap0x85/sysclk 3mhz/#define enable_iap0x86/sysclk 2mhz/#define enable_iap0x87/sysclk8;/set isp/iap/eeprom address highiap_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 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 = addr8;/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)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 = addr8;/set isp/iap/eeprom address highiap_trig = 0x5a;/send trigger command1(0x5a)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_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; /定時器計時開始/*/*時鐘實(shí)時時間、定時段設(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-;/*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,a0_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_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*/break;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-;/*shi=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*/ 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;/*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;case 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)case 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重新賦值時存在沖突,解決辦法為: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/*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)/*判斷哪個鍵摁下*/ 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 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; w4=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) while(num140)displays_hui();tr1=0;/*只顯示2s的回路,然后恢復(fù)正常時鐘顯示*/ if(k2!=0)/正常調(diào)時k3!=0,此時按下k2不能調(diào)整定時的時間段if(k3=0)while(num140)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_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(a0_shi*100+a0_fen)&(shi*100+fen)(b0_shi*100+b0_fen)&(shi*100+fen)(c0_shi*100+c0_fen)&(shi*100+fen)(d0_shi*100+d0_fen)&(shi*100+fen)(d1_shi*100+d1_fen) huilud=0;else huilud=1;break; void main() p1m1=0x00; p1m0=0xff; p2m1=0x00; p2m0=0xff; t_initialize(); /定時器t0、t1初始化 a0_shi=iapreadbyte(0x0000);/讀取eeprom中存儲的參數(shù) a0_fen=iapreadbyte(0x0001); a1_shi=iapreadbyte(0x0002); a1_fen=iapreadbyte(0x0003); b0_shi=iapreadbyte(0x0200); b0_fen=iapreadbyte(0x0201); b1_shi=iapreadbyte(0x0202); b1_fen=iapreadbyte(0x0203); c0_shi=iapreadbyte(0x0400); c0_fen=iapreadbyte(0x0401); c1_shi=iapreadbyte(0x0402); c1_fen=iapreadbyte(0x0403); d0_shi=iapreadbyte(0x0600); d0_fen=iapreadbyte(0x0601); d1_shi=iapreadbyte(0x0602); d1_fen=iapreadbyte(0x0603); while(1) /開始行走 matrixkeyscan();/進(jìn)行一次鍵盤檢測,可進(jìn)行數(shù)碼管各位的+-設(shè)置 displays_all(); void t0_timer()interrupt 1 th0=(65536-n)/256;/*/ tl0=(65536-n)%256; num+; /*全局變量,不賦初值時,默認(rèn)初值為0*/ if(num=10)led=led;num=0;num0+;/*0.5s改變一次狀態(tài),閃爍一次1s*/ if(num0=120) num0=0;fen+; if(fen
溫馨提示
- 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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 車間制冷設(shè)備租賃合同協(xié)議
- 建筑項(xiàng)目運(yùn)營管理試題及答案
- 超市轉(zhuǎn)讓租賃合同協(xié)議
- 提高審計效率的方法與技巧試題及答案
- 超市租賃長期合同協(xié)議
- 運(yùn)營安全協(xié)議合同協(xié)議
- 違法強(qiáng)拆訴訟合同協(xié)議
- 外語能力心態(tài)調(diào)整試題及答案
- 2024年審計師案例研究試題及答案
- 2025年一級建造師考試復(fù)習(xí)重點(diǎn)試題及答案
- 普通遺傳學(xué)講稿
- 遠(yuǎn)古苗族的-附麗于古歌和刺繡
- 錦程網(wǎng)生涯規(guī)劃書
- 新制經(jīng)濟(jì)學(xué)學(xué)習(xí)教案
- 鐵皮石斛集約化高產(chǎn)栽培技術(shù)研究
- 彎道跑教學(xué)設(shè)計與教案1
- 人教版歷史八年級下冊《獨(dú)立自主的和平外交》教學(xué)設(shè)計
- GB∕T 31838.7-2021 固體絕緣材料 介電和電阻特性 第7部分:電阻特性(DC方法) 高溫下測量體積電阻和體積電阻率
- 變頻器變頻altivar71說明書
- 車門玻璃升降器的設(shè)計與運(yùn)動仿真設(shè)計
- 南通大學(xué)學(xué)生請假單
評論
0/150
提交評論