




版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、山東科技大學(xué)電子技術(shù)綜合實(shí)踐報(bào)告設(shè)計(jì)題目: 專 業(yè): 班級(jí)學(xué)號(hào): 學(xué)生姓名: 指導(dǎo)教師: 設(shè)計(jì)時(shí)間: 小組成員: 一、 方案設(shè)計(jì)與論證1 整體方案論證本數(shù)字電子表系統(tǒng)以stc89c52單片機(jī)為核心控制器,對(duì)系統(tǒng)進(jìn)行初始化,完成對(duì)按鍵,led數(shù)碼管顯示的控制等功能,以及完成各模塊通信協(xié)調(diào)的功能,時(shí)鐘芯片da1302不斷將時(shí)間信號(hào)送往單片機(jī),然后單片機(jī)通過(guò)Led數(shù)碼管將時(shí)間顯示出來(lái),按鍵將信號(hào)傳遞給單片機(jī)處理,借以實(shí)現(xiàn)對(duì)時(shí)間的設(shè)置,可以對(duì)年,月,日,時(shí),分,秒進(jìn)行設(shè)定,還可以通過(guò)對(duì)鬧鐘時(shí)間進(jìn)行設(shè)置實(shí)現(xiàn)定時(shí)鬧鐘的功能,通過(guò)溫度傳感器將溫度信號(hào)傳遞給單片機(jī),然后單片機(jī)通過(guò)led數(shù)碼管將溫度顯示出來(lái),達(dá)
2、到溫度顯示的功能。另外,秒表功能有開(kāi)始,中止,復(fù)位來(lái)控制,以led數(shù)碼管顯示,計(jì)數(shù)器則由按鍵控制計(jì)數(shù)。最終由6v電源供電。最終實(shí)現(xiàn)以下6個(gè)功能:1) 實(shí)現(xiàn)電子表的時(shí),分,秒的顯示2) 實(shí)現(xiàn)電子表對(duì)時(shí)間等的設(shè)定3) 實(shí)現(xiàn)秒表功能4) 實(shí)現(xiàn)計(jì)數(shù)器功能5) 實(shí)現(xiàn)鬧鐘報(bào)警功能6) 實(shí)現(xiàn)溫度實(shí)時(shí)監(jiān)測(cè)顯示功能2.模塊的分類 1)stc89c52單片機(jī)主控模塊 設(shè)計(jì)初期,我們有如下兩種以單片機(jī)為核心的主控方式可選:1.采用stc89c52單片機(jī)作為數(shù)字電子表主控核心,運(yùn)用flash rom,搭載有4Kb rom內(nèi)部存儲(chǔ)空間,能夠在3v的低壓電源下工作,與mcs-52系列單片機(jī)具有完全兼容性,缺點(diǎn)是沒(méi)有isp
3、在線編程技術(shù),運(yùn)用于電路設(shè)計(jì)時(shí),如果對(duì)程序進(jìn)行增添新功能或修改程序不方便控制。2.采用stc89c52單片機(jī)作為數(shù)字電子表主控核心,搭載flash rom為片內(nèi)rom,在6v電源工作,對(duì)于編程技術(shù)可以有效的修改的方式。綜上考慮選擇第二種。 2)DS1302時(shí)鐘電路模塊 在時(shí)鐘電路模塊的設(shè)計(jì)中,我也想了兩種方案:1.利用單片機(jī)本身自帶功能實(shí)現(xiàn)定時(shí)計(jì)數(shù)功能,通過(guò)程序編寫(xiě)來(lái)實(shí)現(xiàn)對(duì)年,月,日,時(shí),分,秒的計(jì)時(shí)。通過(guò)外部晶振提供準(zhǔn)確時(shí)鐘,采用11.0592的晶振。但是不宜斷電保護(hù)。2.采用時(shí)鐘芯片ds1302進(jìn)行計(jì)時(shí),然后時(shí)間信號(hào)交給單片機(jī)處理通過(guò)led數(shù)碼管顯示出來(lái)。此方案中ds1302性價(jià)比高,性能
4、優(yōu)越,耗電量少,具有計(jì)時(shí)功能,還有閏年補(bǔ)償功能,節(jié)省了單片機(jī)資源且便宜,但控制難度增加。 綜合考慮選擇第二種方案。 3)led數(shù)碼管顯示模塊 開(kāi)始有l(wèi)ed數(shù)碼管和lcd液晶顯示屏兩種方案,由于對(duì)led數(shù)碼管更為熟悉好用,選擇方案一。 4)溫度測(cè)試模塊 鬧鐘模塊 采用了方便易用且價(jià)格低廉的數(shù)字溫度傳感器ds18b20實(shí)現(xiàn)。優(yōu)點(diǎn)是使用方便,報(bào)警選擇蜂鳴器。 5)鍵盤(pán)掃描電路模塊 該電路通過(guò)編寫(xiě)相應(yīng)的程序即能實(shí)現(xiàn)功能,在此不再贅述。三、電路設(shè)計(jì)原理1)元器件 Stc89c52單片機(jī) 一個(gè) Ds1302時(shí)鐘芯片 一個(gè) Ds18b20溫度芯片 一個(gè) led數(shù)碼管 六個(gè) 蜂鳴器 一個(gè) 按鍵 三個(gè) 2)電路
5、圖原理圖四、軟件編程1.軟件流程圖數(shù)據(jù)初始化 定時(shí)器初始化18b20初始化1302初始化進(jìn)入后臺(tái)while(1)循環(huán)顯示標(biāo)志?時(shí)間數(shù)據(jù)顯示 否 是到達(dá)鬧鐘?報(bào)警 是按鍵按下? 否按鍵處理 是 否2.實(shí)物圖3.主程序/*= 調(diào)試要求: 1.MCU:AT89S52芯片或AT89C52 2.晶振:12MHz 功能:多功能時(shí)鐘+溫度計(jì) =*/#include <reg52.h>#include <intrins.h>#define uchar unsigned char#define uint unsigned intsbit dis_bit1=P27;/定義數(shù)碼管控制口sbi
6、t dis_bit2=P26;/定義數(shù)碼管控制口sbit dis_bit3=P24;/定義數(shù)碼管控制口sbit dis_bit4=P23;/定義數(shù)碼管控制口sbit dis_bit5=P21;/定義數(shù)碼管控制口sbit dis_bit6=P20;/定義數(shù)碼管控制口sbit led1_bit=P22;/定時(shí)LED的控制口sbit led2_bit=P25;/定時(shí)LED的控制口sbit s1_bit=P10; /定義S1控制口sbit s2_bit=P11; /定義S2控制口sbit s3_bit=P12; /定義S3控制口sbit dq_ds18b20=P33;/定義控制DS18B20sbit
7、speak=P37; /定義蜂鳴器控制口sbit clk_ds1302=P36;/定義控制DS1302的時(shí)鐘線sbit io_ds1302=P35;/定義控制DS1302的串行數(shù)據(jù)sbit rest_ds1302=P34;#define smg_data P0/定義數(shù)碼管數(shù)據(jù)口void delay_3us();/3US的延時(shí)程序void delay_8us(uint t);/8US延時(shí)基準(zhǔn)程序void delay_50us(uint t);/延時(shí)50*T微妙函數(shù)的聲明void display1(uchar dis_data);/數(shù)碼管1顯示子程序void display2(uchar dis_
8、data);/數(shù)碼管2顯示子程序void display3(uchar dis_data);/數(shù)碼管3顯示子程序void display4(uchar dis_data);/數(shù)碼管4顯示子程序void display5(uchar dis_data);/數(shù)碼管5顯示子程序void display6(uchar dis_data);/數(shù)碼管6顯示子程序void init_t0();/定時(shí)器0初始化函數(shù)void dis_led();/LED處理函數(shù)void judge_s1();/S1按鍵處理函數(shù)void judge_s2();/S2按鍵處理函數(shù)void judge_s3();/S3按鍵處理函數(shù)v
9、oid dis(uchar s6,uchar s5,uchar s4,uchar s3,uchar s2,uchar s1);/顯示子程序void dis_san(uchar s6,uchar s5,uchar s4,uchar s3,uchar s2,uchar s1,uchar san);/閃爍顯示子程序void judge_dis();/顯示處理函數(shù)void judge_clock();/顯示處理函數(shù)void set_ds1302();/設(shè)置時(shí)間void get_ds1302();/讀取當(dāng)前時(shí)間void w_1byte_ds1302(uchar t);/向DS1302寫(xiě)一個(gè)字節(jié)的數(shù)據(jù)uc
10、har r_1byte_ds1302();/從DS1302讀一個(gè)字節(jié)的數(shù)據(jù)/*/DS18B20測(cè)溫函數(shù)定義void w_1byte_ds18b20(uchar value);/向DS18B20寫(xiě)一個(gè)字節(jié) uchar r_1byte_ds18b20(void);/從DS18B20讀取一個(gè)字節(jié)的數(shù)據(jù)void rest_ds18b20(void);/DS18B20復(fù)位程序void readtemp_ds18b20(void);/讀取溫度 void dis_temp();/溫度顯示函數(shù)/共陽(yáng)數(shù)碼管斷碼表const uchar tabl116= 0xc0,0xf9,0xa4,0xb0,0x99,0x92
11、, / 0 1 2 3 4 5 0x82,0xf8,0x80,0x90,0x86,0x87,0xFF, /6 7 8 9 E T B 0xc6,0xbf,0xff; / C - const uchar tabl3=0x00,0x01,0x01,0x02,0x03,0x03,0x04, 0x04,0x05,0x06,0x06,0x07,0x08,0x08, 0x09,0x09;/溫度內(nèi)部計(jì)算用 uchar t0_crycle;uchar hour_count,minute_count,second_count,msecond_count;uchar clock_hour,clock_minute
12、;uchar countdown_second;uchar countdown_hour,countdown_minute;uchar clock_en;/鬧鐘關(guān)閉和開(kāi)啟的標(biāo)志,1開(kāi)啟,0關(guān)閉uchar flag1,second_flag,zancun1,zancun2,zancun3;uchar zancun4,zancun5,zancun6,zancun7;uchar clock_flag,countdown_flag;uchar msecond_minute,msecond_second,msecond_msecond,msecond_flag;/秒表相關(guān)參數(shù)uint speak_cou
13、nt;uchar templ,temph,temp_flag;uchar t_b,t_s,t_g,t_x,temp_flag2;/從左到右分別存儲(chǔ)溫度百位,十位,個(gè)位,小數(shù)位uchar tab233;/=0x40,0x59,0x23,0x28,0x11,0x06,0x09;/上電時(shí)默認(rèn)的時(shí)間/主程序void main() P3=0x00; flag1=0; zancun3=0; msecond_minute=0;/置秒表相關(guān)參數(shù)為0 msecond_second=0; msecond_msecond=0; speak=1;/關(guān)閉蜂鳴器 speak_count=0; clock_hour=0;
14、clock_minute=0; clock_flag=0; countdown_flag=0;/倒計(jì)時(shí)標(biāo)志位為0 clock_en=0;/開(kāi)機(jī)時(shí)默認(rèn)關(guān)閉鬧鐘 init_t0(); TR0=1;/ / set_ds1302();/設(shè)置DS1302的初始時(shí)間 /接下來(lái)開(kāi)始編寫(xiě)讓數(shù)碼管顯示的程序 while(1) get_ds1302(); judge_dis();/顯示處理 judge_s1(); judge_s2(); judge_s3(); judge_clock();/鬧鐘處理程序 void timer0() interrupt 1TH0=(65536-50000)/256;TL0=(655
15、36-50000)%256;t0_crycle+;if(t0_crycle=2)/ 0.1秒 t0_crycle=0; msecond_flag=1; msecond_count+; if(msecond_count=10)/1秒 msecond_count=0; second_flag=1; /*/顯示處理函數(shù)void judge_dis() if(flag1=0) if(second_flag=1) zancun7+; second_flag=0; if(zancun7<1) if(temp_flag2=1) readtemp_ds18b20();/讀取溫度 temp_flag2=0
16、; dis_temp();/溫度顯示函數(shù) if(zancun7>=1) temp_flag2=1; zancun4=hour_count&0xf0; zancun4>>=4; zancun5=minute_count&0xf0; zancun5>>=4; zancun6=second_count&0xf0; zancun6>>=4; dis(zancun4,hour_count&0x0f,zancun5,minute_count&0x0f,zancun6,second_count&0x0f); dis_l
17、ed(); if(zancun7=5)zancun7=0; if(flag1!=0) switch(flag1) case 1: dis(5,10,11,1,12,12);/顯示SET1 led1_bit=1; led2_bit=1; break; case 2: dis(5,10,11,2,12,12);/顯示SET2 break; case 3: dis(5,10,11,3,12,12);/顯示SET3 break; case 4: dis(5,10,11,4,12,12);/顯示SET4 break; case 5: dis(5,10,11,5,12,12);/顯示SET5 break;
18、 case 6: dis_san(zancun1/10,zancun1%10,zancun2/10,zancun2%10,12,12,1); break; case 7: dis_san(zancun1/10,zancun1%10,zancun2/10,zancun2%10,12,12,2); break; case 8: dis_san(zancun1/10,zancun1%10,zancun2/10,zancun2%10,12,12,3); break; case 9:/進(jìn)入修改時(shí)間,時(shí)間分位個(gè)位閃爍 dis_san(zancun1/10,zancun1%10,zancun2/10,zan
19、cun2%10,12,12,4); break; case 10:/進(jìn)入修改鬧鐘,鬧鐘小時(shí)十位閃爍 dis_san(zancun1/10,zancun1%10,zancun2/10,zancun2%10,12,zancun3,1); break; case 11:/進(jìn)入修改鬧鐘,鬧鐘小時(shí)個(gè)位閃爍 dis_san(zancun1/10,zancun1%10,zancun2/10,zancun2%10,12,zancun3,2); break; case 12:/進(jìn)入修改鬧鐘,鬧鐘小時(shí)十位閃爍 dis_san(zancun1/10,zancun1%10,zancun2/10,zancun2%10,
20、12,zancun3,3); break; case 13:/進(jìn)入修改鬧鐘,鬧鐘小時(shí)個(gè)位閃爍 dis_san(zancun1/10,zancun1%10,zancun2/10,zancun2%10,12,zancun3,4); break; case 14:/進(jìn)入修改鬧鐘的開(kāi)關(guān) dis_san(zancun1/10,zancun1%10,zancun2/10,zancun2%10,12,zancun3,6); break; case 15: dis_san(zancun1/10,zancun1%10,zancun2/10,zancun2%10,zancun3/10,zancun3%10,1);
21、 break; case 16: dis_san(zancun1/10,zancun1%10,zancun2/10,zancun2%10,zancun3/10,zancun3%10,2); break; case 17: dis_san(zancun1/10,zancun1%10,zancun2/10,zancun2%10,zancun3/10,zancun3%10,3); break; case 18: dis_san(zancun1/10,zancun1%10,zancun2/10,zancun2%10,zancun3/10,zancun3%10,4); break; case 19: d
22、is_san(zancun1/10,zancun1%10,zancun2/10,zancun2%10,zancun3/10,zancun3%10,5); break; case 20: dis_san(zancun1/10,zancun1%10,zancun2/10,zancun2%10,zancun3/10,zancun3%10,6); break; case 21: if(second_flag=1) second_flag=0; countdown_second-; if(countdown_second=255) countdown_second=59; countdown_minut
23、e-; if(countdown_minute=255) countdown_minute=59; countdown_hour-; if(countdown_hour=255) flag1=22; countdown_minute=0; countdown_hour=0; countdown_second=0; countdown_flag=1; dis(countdown_hour/10,countdown_hour%10,countdown_minute/10,countdown_minute%10,countdown_second/10,countdown_second%10);/ b
24、reak; case 22: if(countdown_flag>0 && countdown_flag<7) speak=0; if(second_flag=1) second_flag=0; countdown_flag+; else speak=1; dis(countdown_hour/10,countdown_hour%10,countdown_minute/10,countdown_minute%10,countdown_second/10,countdown_second%10);/ break; case 23: dis(msecond_minute
25、/10,msecond_minute%10,msecond_second/10,msecond_second%10,msecond_msecond%10,12); break; case 24: if(msecond_flag=1) msecond_flag=0; msecond_msecond+; if(msecond_msecond=10) msecond_msecond=0; msecond_second+; if(msecond_second=60) msecond_second=0; msecond_minute+; if(msecond_minute=100) msecond_mi
26、nute=99; flag1=23; dis(msecond_minute/10,msecond_minute%10,msecond_second/10,msecond_second%10,msecond_msecond%10,12); break; case 25: dis(zancun3/10,zancun3%10,zancun2/10,zancun2%10,zancun1/10,zancun1%10); break; default: break; /*/S1按鍵處理函數(shù)void judge_s1() s1_bit=1;/置IO為1,準(zhǔn)備讀入收據(jù) if(s1_bit=0)/判斷是否有按鍵
27、按下 delay_50us(1);/ 延時(shí),去除機(jī)械抖動(dòng) if(s1_bit=0) switch(flag1) case 0: case 1: case 2: case 3: case 4: case 6: case 7: case 8: case 10: case 11: case 12: case 13: case 15: case 16: case 17: case 18: case 19: flag1+; break; case 9: flag1=6; break; case 14: flag1=10; break; case 20: flag1=15; break; case 5:
28、case 21: case 22: case 23:/系統(tǒng)從秒表狀態(tài)復(fù)位 case 24:/系統(tǒng)從秒表狀態(tài)復(fù)位 case 25:/系統(tǒng)從計(jì)數(shù)器復(fù)位 flag1=0; break; default: break; while(s1_bit=0) judge_dis(); /等待按鍵釋放 /*/S2按鍵處理函數(shù)void judge_s2() s2_bit=1;/置IO為1,準(zhǔn)備讀入收據(jù) if(s2_bit=0)/判斷是否有按鍵按下 delay_50us(1);/ 延時(shí),去除機(jī)械抖動(dòng) if(s2_bit=0) switch (flag1) case 1: /在顯示SET1狀態(tài)下按S2件,進(jìn)入修改時(shí)間
29、 flag1=6; zancun4=hour_count&0xf0; zancun4>>=4; zancun6=hour_count&0x0f; zancun1=zancun4*10+zancun6; /zancun1=hour_count; zancun5=minute_count&0xf0; zancun5>>=4; zancun6=minute_count&0x0f; zancun2=zancun5*10+zancun6; / zancun2=minute_count; break; case 2:/在顯示SET2狀態(tài)下按S2,進(jìn)入
30、設(shè)置鬧鐘 zancun1=clock_hour; zancun2=clock_minute; flag1=10; break; case 6:/修改時(shí)鐘小時(shí)十位狀態(tài)下按S2件 case 7:/修改時(shí)鐘小時(shí)個(gè)位狀態(tài)下按S2件 case 8:/修改時(shí)鐘分鐘十位狀態(tài)下按S2件 case 9:/修改時(shí)鐘分鐘個(gè)位狀態(tài)下按S2件 /zancun4=zancun1/10; tab232=zancun1/10*16+zancun1%10; /zancun5=zancun2&0xf0; /zancun5>>=4; tab231=zancun2/10*16+zancun2%10; hour_c
31、ount=tab232; minute_count=tab231; second_count=0; tab230=0; set_ds1302();/設(shè)置DS1302的初始時(shí)間 flag1=0; break; case 10:/修改鬧鐘小時(shí)十位狀態(tài)下按S2 case 11:/修改鬧鐘小時(shí)個(gè)位狀態(tài)下按S2 case 12:/修改鬧鐘分鐘十位狀態(tài)下按S2 case 13:/修改鬧鐘分鐘個(gè)位狀態(tài)下按S2 case 14:/修改鬧鐘使能狀態(tài)下按S2 clock_hour=zancun1; clock_minute=zancun2; clock_en=zancun3; flag1=0; break; ca
32、se 3: flag1=15; zancun1=countdown_hour; zancun2=countdown_minute; zancun3=countdown_second; break; case 15: case 16: case 17: case 18: case 19: case 20: countdown_hour=zancun1; countdown_minute=zancun2; countdown_second=zancun3; flag1=21; countdown_flag=0; break; case 22: flag1=21; break; case 21: f
33、lag1=22; break; case 4: flag1=23;/秒表暫停 msecond_minute=0; msecond_second=0; msecond_msecond=0; break; case 23: flag1=24; break; case 24: flag1=23; break; case 5: flag1=25;/進(jìn)入計(jì)數(shù)器模式 zancun1=0; zancun2=0; zancun3=0; break; default: break; while(s2_bit=0) judge_dis(); /等待按鍵釋放 /*/S3按鍵處理函數(shù)void judge_s3() s3_bit=1;/置IO為1,準(zhǔn)備讀入收據(jù) if(s3_bit=0)/判斷是否有按鍵按下 delay_50us(1);/ 延時(shí),去除機(jī)械抖動(dòng) if(s3_bit=0) switch (flag1) case 6:/修改時(shí)間小時(shí)的十位數(shù) zancun1+=10; if(zancun1>=24)zancun1=zancun1%10; break; case 7:/修改時(shí)間小時(shí)的個(gè)位數(shù) zancun1=zancun1/10*10+(zancun1%10+1)%10; if(zancun1>=24)zancun1=20; break; case 8:/修改時(shí)間分鐘的十位數(shù) zancun
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 國(guó)際貿(mào)易買(mǎi)賣(mài)合同模板
- 采購(gòu)合同協(xié)議樣本
- 機(jī)械租賃安全規(guī)范合同版
- 供熱服務(wù)保障合同
- 工廠購(gòu)銷合同范本
- 城市戶外廣告投放工程合同
- 塔吊設(shè)備供應(yīng)合同
- 采購(gòu)與供應(yīng)合同協(xié)議書(shū)范本
- 長(zhǎng)期倉(cāng)庫(kù)租賃合同模板
- 寵物貓咪領(lǐng)養(yǎng)及養(yǎng)護(hù)合同2025
- 少兒美術(shù)幼兒園課件- 4-6歲 《沙漠鴕鳥(niǎo)》
- ChatGPT人工智能與通用大模型演講稿
- 撤場(chǎng)通知書(shū)( 模板)
- richcui美國(guó)sspc富鋅底漆解讀
- IATF169492016內(nèi)部審核報(bào)告范例
- 人教版高中地理必修一全冊(cè)測(cè)試題(16份含答案)
- 成果導(dǎo)向(OBE)教育理念課件
- 交通運(yùn)輸概論全套PPT完整教學(xué)課件
- 西北工業(yè)大學(xué)英文簡(jiǎn)介
- 《動(dòng)畫(huà)場(chǎng)景設(shè)計(jì)》第一章 動(dòng)畫(huà)場(chǎng)景設(shè)計(jì)概述
- 2023年湖北宜昌伍家新城投資控股集團(tuán)有限公司招聘筆試題庫(kù)含答案解析
評(píng)論
0/150
提交評(píng)論