![校園打鈴系統(tǒng)單片機(jī)實(shí)訓(xùn)報(bào)告_第1頁(yè)](http://file2.renrendoc.com/fileroot_temp3/2021-11/26/aad9532b-9fc0-45f4-85a2-706921eed913/aad9532b-9fc0-45f4-85a2-706921eed9131.gif)
![校園打鈴系統(tǒng)單片機(jī)實(shí)訓(xùn)報(bào)告_第2頁(yè)](http://file2.renrendoc.com/fileroot_temp3/2021-11/26/aad9532b-9fc0-45f4-85a2-706921eed913/aad9532b-9fc0-45f4-85a2-706921eed9132.gif)
![校園打鈴系統(tǒng)單片機(jī)實(shí)訓(xùn)報(bào)告_第3頁(yè)](http://file2.renrendoc.com/fileroot_temp3/2021-11/26/aad9532b-9fc0-45f4-85a2-706921eed913/aad9532b-9fc0-45f4-85a2-706921eed9133.gif)
![校園打鈴系統(tǒng)單片機(jī)實(shí)訓(xùn)報(bào)告_第4頁(yè)](http://file2.renrendoc.com/fileroot_temp3/2021-11/26/aad9532b-9fc0-45f4-85a2-706921eed913/aad9532b-9fc0-45f4-85a2-706921eed9134.gif)
![校園打鈴系統(tǒng)單片機(jī)實(shí)訓(xùn)報(bào)告_第5頁(yè)](http://file2.renrendoc.com/fileroot_temp3/2021-11/26/aad9532b-9fc0-45f4-85a2-706921eed913/aad9532b-9fc0-45f4-85a2-706921eed9135.gif)
版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、HUAIAN COLLEGE OF IMFORMATION TECHNOLOGY 單片機(jī)綜合設(shè)計(jì)實(shí)訓(xùn)報(bào)告 校園打鈴系統(tǒng)的設(shè)計(jì)系部:計(jì)通系班級(jí):*姓名:*學(xué)號(hào):*校園打鈴系統(tǒng)的設(shè)計(jì)一、實(shí)訓(xùn)目的1、設(shè)計(jì)一個(gè)校園打鈴系統(tǒng),使用的是24小時(shí)計(jì)時(shí)制,能夠設(shè)置多個(gè)打鈴時(shí)間,同時(shí)要求能夠在系統(tǒng)掉電時(shí),時(shí)間能夠繼續(xù),打鈴時(shí)間的數(shù)據(jù)能夠保持。2、掌握LCD1602、DS1302、DS18b20、AT24C02等相關(guān)知識(shí)3、進(jìn)一步了解時(shí)鐘電路、復(fù)位電路、工作電源電路、程序存儲(chǔ)器選擇電路二、實(shí)訓(xùn)內(nèi)容1、時(shí)鐘功能:能顯示年、月、日、星期、時(shí)、分、秒、溫度等信息2、調(diào)整功能:能校正年、月、日、時(shí)、分、秒、星期等信息3、
2、打鈴功能:按指定的時(shí)間發(fā)出聲音,并且閃光4、設(shè)置的作息時(shí)間數(shù)據(jù)在單片機(jī)掉電后不會(huì)丟失三、實(shí)訓(xùn)整體框圖圖1 系統(tǒng)總體設(shè)計(jì)圖四、各功能模塊介紹1、最小系統(tǒng) 單片機(jī)最小系統(tǒng)包括單片機(jī)(STC89C52)、時(shí)鐘電路、復(fù)位電路、工作電源電路、程序存儲(chǔ)器選擇電路五個(gè)部分。2、時(shí)鐘模塊DS1302DS1302是美國(guó)DALLAS公司推出的一種高性能、低功耗的實(shí)時(shí)時(shí)鐘芯片,附加31字節(jié)靜態(tài)RAM,采用SPI三線接口與CPU進(jìn)行同步通信,并可采用突發(fā)方式一次傳送多個(gè)字節(jié)的時(shí)鐘信號(hào)和RAM數(shù)據(jù)。實(shí)時(shí)時(shí)鐘可提供秒、分、時(shí)、日、星期、月和年,一個(gè)月小與31天時(shí)可以自動(dòng)調(diào)整,且具有閏年補(bǔ)償功能。工作電壓寬達(dá)2.55.5V
3、。采用雙電源供電(主電源和備用電源),可設(shè)置備用電源充電方式,提供了對(duì)后背電源進(jìn)行涓細(xì)電流充電的能力。3、存儲(chǔ)模塊AT24C02 AT24C02提供2k位的串行電可擦寫可編程只讀存儲(chǔ)器(EEPROM),組織形式為256字×8位字長(zhǎng),采用IIC總線接口。4、溫度采集模塊DS18B20DS18B20數(shù)字溫度計(jì)是DALLAS公司生產(chǎn)的1Wire,即單總線器件,具有線路簡(jiǎn)單,體積小的特點(diǎn)。因此用它來(lái)組成一個(gè)測(cè)溫系統(tǒng),具有線路簡(jiǎn)單,在一根通信線,可以掛很多這樣的數(shù)字溫度計(jì),十分方便。5、打鈴模塊 采用蜂鳴器和LED指示燈作為系統(tǒng)打鈴的聲光報(bào)警器。6、液晶顯示模塊LCD1602 LCD1602液
4、晶顯示器可以顯示2行16列,共32個(gè)字符。7、鍵盤輸入模塊 采用16鍵的矩陣式鍵盤,分別定義為0-9的數(shù)字鍵與其他的功能鍵。圖2 矩陣式鍵盤8、LCD1602顯示介面設(shè)計(jì)2011-08-22Sun23:12:49±26.7ºC當(dāng)前時(shí)間顯示介面(“”為打鈴標(biāo)志符號(hào))2011-08-22Sun23:12:49±26.7ºC修改時(shí)間顯示介面Setupringbelltimer0123:12:49設(shè)置打鈴時(shí)間顯示介面9、矩陣鍵盤功能劃分l “15”鍵:界面切換功能,能夠依次顯示主界面、修改時(shí)間界面、打鈴時(shí)間界面l “14”鍵:保存修改后的時(shí)間l “12”鍵:關(guān)閉
5、響鈴10、系統(tǒng)流程圖五、程序代碼以下代碼實(shí)現(xiàn)的功能是:u 能夠顯示年月日、時(shí)分秒、星期、溫度u 能夠修改小時(shí)、分鐘、秒鐘并且保存修改的時(shí)間u 能夠設(shè)置打鈴時(shí)間,到設(shè)置的時(shí)間時(shí)蜂鳴器發(fā)出響聲,設(shè)定為響10s,小燈亮。1、zdy.hint a,b,T;/自定義的變量2、ds18b20.h#include<intrins.h>sbit DQ=P22;/DQ的控制位void delay5us(void) /延時(shí)5微秒_nop_();void delay1(int x) /x=(1. 20us,2. 28us,3. 36us,5. 52us,50. 412us,60. 492us,65. 5
6、35us)unsigned int i;for(i=0;i<x;i+);/初始化,主機(jī)發(fā)送復(fù)位脈沖,從機(jī)如果存在則發(fā)送存在的應(yīng)答脈沖bit rst1bus(void)bit f;DQ=1;/準(zhǔn)備階段DQ=0 ;/將DQ線拉低delay1(65);/延時(shí)500us,主機(jī)發(fā)送復(fù)位脈沖:480us至960us的低電平DQ=1 ;/將DQ線拉高delay1(3);/延時(shí)40us;/主機(jī)釋放總線:15us至60us的高電平f=DQ;/從機(jī)如果存在則60us至240us內(nèi)回復(fù)低電平delay1(10);/延時(shí)100us;DQ=1;delay1(40);/延時(shí)350us;/結(jié)束階段return(f);
7、/f=0:從設(shè)備存在;f=1:從設(shè)備不存在/位寫入函數(shù):每次寫1位數(shù)據(jù)void writebit(bit x)DQ=1;/準(zhǔn)備階段DQ=0;_nop_();/延時(shí)2us,主機(jī)發(fā)送15us的低電平_nop_();DQ=x;delay1(6);/延時(shí)60us,從機(jī)DS18B20在至少60us內(nèi)完成采樣DQ=1;/結(jié)束階段_nop_();/延時(shí)1us; /寫字節(jié)函數(shù):每次寫8位數(shù)據(jù),即1字節(jié)數(shù)據(jù);低位在前,高位在后void writebyte(unsigned char x)bit f;unsigned char i;for(i=0;i<8;i+)f=(bit)(x&0x01);x=x
8、>>1;writebit(f);/寫1位數(shù)據(jù);低位在前,高位在后 /位讀出函數(shù):每次讀1位數(shù)據(jù)bit readbit(void)bit f;DQ=1;/準(zhǔn)備階段DQ=0;/1us的低電平_nop_();/延時(shí)2us;_nop_();DQ=1; /線與的條件delay5us();/延時(shí)10us;/主機(jī)釋放總線15usdelay5us();f=DQ;/主機(jī)采樣DS18B20的線與運(yùn)算delay1(4);/延時(shí)45us;DQ=1;/結(jié)束階段_nop_();/延時(shí)1us;return(f);/讀字節(jié)函數(shù):每次讀8位數(shù)據(jù),即1字節(jié)數(shù)據(jù);低位在前,高位在后/返回值為單字節(jié)變量unsigned
9、char readbyte(void)bit f;unsigned char i,x=0;for(i=0;i<8;i+)x=x>>1;f=readbit();if(f=1)x=x|0x80;/讀1位數(shù)據(jù);低位在前,高位在后return(x);void ds18b20(void) unsigned char f1,f2,g;f1=rst1bus(); /將DS18B20的初始化賦給f1if(f1=0)/f=0有設(shè)備存在,復(fù)位成功writebyte(0xcc);/跳躍ROM指令writebyte(0x44);/發(fā)送溫度轉(zhuǎn)換指令g=readbit();while(!g)g=read
10、bit();/為0,還沒(méi)轉(zhuǎn)換完成;為1:溫度轉(zhuǎn)換完成f2=rst1bus(); /第二次將DS18B20的初始化賦給f2if(f2=0)/f=0有設(shè)備存在,復(fù)位成功writebyte(0xcc);/跳躍ROM指令writebyte(0xBE);/發(fā)送讀取RAM指令a=readbyte();/讀低八位b=readbyte(); /讀高八位 3、at24c02.h sbit sda=P20;sbit scl=P21;unsigned char code table=3,5,0,1,1,2,0,3,3,5,0,1,1,1,0,9;unsigned char code tab=0x00,0x01,0x
11、02,0x03,0x04,0x05,0x07,0x23,0x12,0x14,0x16,0x34,0x35,0x38,0x44,0x46;/開(kāi)始信號(hào)/*SCL為高電平時(shí),SDA由高電平向低電平跳變,開(kāi)始傳送數(shù)據(jù)。*/void i2cstart(void) scl=0; sda=1; scl=1; sda=0; scl=0; /停止信號(hào) /*SCL為高電平時(shí),SDA由低電平向高電平跳變,結(jié)束傳送數(shù)據(jù)。*/void i2cstop(void) scl=0; sda=0; scl=1; sda=1;/上升沿寫入數(shù)據(jù)void write(unsigned char x)/上升沿寫入數(shù)據(jù),高位在前,低位在
12、后unsigned char y,i; y=x; CY=0;/位信號(hào) scl=0;for(i=0;i<8;i+)y=y<<1;sda=CY;/準(zhǔn)備數(shù)據(jù)scl=1;/上升沿scl=0;/為第二次發(fā)送數(shù)據(jù)作準(zhǔn)備/scl低電平時(shí),準(zhǔn)備好要寫入的位數(shù)據(jù);scl上升為高電平時(shí),寫入一位/下降沿讀出數(shù)據(jù)unsigned char read(void)/下降沿讀取數(shù)據(jù)unsigned char x,i;bit f;x=0;for(i=0;i<8;i+)sda=1;/主機(jī)釋放總線,準(zhǔn)備接收從機(jī)發(fā)送的位數(shù)據(jù)x=x<<1;/向左移動(dòng)接收一個(gè)信號(hào)scl=1;f=sda;/讀取數(shù)據(jù)
13、(線與操作)scl=0;/下降沿x=x+(unsigned char)f;/把數(shù)據(jù)放在x的最低位,接收8位return(x);/*從機(jī)應(yīng)答主機(jī)發(fā)送一個(gè)數(shù)據(jù)后,從機(jī)在主機(jī)發(fā)送第9個(gè)時(shí)鐘時(shí)應(yīng)答:收到,應(yīng)答0;沒(méi)收到,應(yīng)答1*/bit ack(void)bit f;sda=1;/主機(jī)釋放總線,準(zhǔn)備接收從機(jī)的應(yīng)答scl=1;f=sda;/讀取數(shù)據(jù)scl=0;/下降沿return(f);/返回的應(yīng)答信號(hào)/*主機(jī)應(yīng)答從機(jī)發(fā)送一個(gè)數(shù)據(jù)后,主機(jī)在主機(jī)發(fā)送第9個(gè)時(shí)鐘時(shí)應(yīng)答:收到并且需要另外的數(shù)據(jù),應(yīng)答0;收到并且不需要另外的數(shù)據(jù),應(yīng)答1*/void noack(bit f)/f為0或者為1sda=f;/準(zhǔn)備數(shù)據(jù)
14、scl=1;/上升沿scl=0;/忙檢測(cè)/*寫操作需要一定的時(shí)間,或采用忙檢測(cè):0完成寫;1正在進(jìn)行寫*/void i2cbusy(void)/忙檢測(cè) bit f;do i2cstart();/啟動(dòng)信號(hào) write(0xa0);/芯片地址 f=ack();/f=0不忙,f=1正在忙 while(f);/學(xué)字節(jié)操作/*字節(jié)寫:x-器件地址;y-單元地址;z-數(shù)據(jù)*/void writeby(unsigned char x,unsigned char y,unsigned char z)i2cstart();/啟動(dòng)信號(hào)write(x&0xfe); /最低位必須為0,芯片地址ack();/從
15、機(jī)應(yīng)答write(y); /芯片單元地址ack(); /從機(jī)應(yīng)答write(z); /寫一個(gè)具體的數(shù)據(jù)ack();/從機(jī)應(yīng)答i2cstop();/停止信號(hào) i2cbusy();/*隨機(jī)讀操作:x-器件地址;y-單元地址;返回讀取的數(shù)據(jù)*/unsigned char randomread(unsigned char x,unsigned char y)/隨機(jī)讀操作unsigned char z;i2cstart();write(x&0xfe);/最低位必須為0(假的寫操作)ack();/從機(jī)應(yīng)答write(y);ack();/從機(jī)應(yīng)答/偽寫操作i2cstart();write(x|0x0
16、1);/最低位必須為1ack();/從機(jī)應(yīng)答z=read();noack(1);/主機(jī)應(yīng)答(1-不需要其他數(shù)據(jù))i2cstop();return(z);4、lcd1602.h sbit LcdRS=P10;/寄存器選擇 高->數(shù)據(jù)存儲(chǔ)器,低->指令存儲(chǔ)器sbit LcdRW=P11;/讀寫操作 高->讀操作,低->寫操作sbit LcdEN=P25;/片選 高電平/下降沿觸發(fā)sfr LcdIO=0x80;void delay(void)/延時(shí) int i,j; for(i=0;i<10;i+) for(j=0;j<100;j+); /寫指令(RS=0,RW=
17、0,EN=下降沿觸發(fā))void writecom(unsigned char x) /準(zhǔn)備階段 LcdRS=1; LcdRW=1; LcdEN=0; /運(yùn)行階段 LcdRS=0; LcdRW=0; LcdEN=1; LcdIO=x; delay(); LcdEN=0; /結(jié)束階段 LcdRS=1; LcdRW=1; LcdEN=0;/寫數(shù)據(jù)(RS=1,RW=0,EN=下降沿觸發(fā))void writedate(unsigned char x) /準(zhǔn)備階段 LcdRS=0; LcdRW=1; LcdEN=0; /運(yùn)行階段 LcdRS=1; LcdRW=0; LcdEN=1; LcdIO=x; de
18、lay(); LcdEN=0; /結(jié)束階段 LcdRS=0; LcdRW=1; LcdEN=0;/讀狀態(tài)(RS=0,RW=1,EN=1)unsigned char readsta() /準(zhǔn)備階段 unsigned char x; LcdRS=1; LcdRW=0; LcdEN=0; /運(yùn)行階段 LcdRS=0; LcdRW=1; LcdEN=1; x=LcdIO; delay(); /結(jié)束階段 LcdRS=1; LcdEN=0; LcdRW=0; return (x);/忙檢測(cè)void busy(void)/忙檢測(cè) unsigned char y; bit f; y=readsta(); f=
19、(bit)(y>>7);/強(qiáng)制轉(zhuǎn)換 while(f=1)/忙檢測(cè) y=readsta(); f=(bit)(y>>7); void lcd1602() busy(); writecom(0x38);/設(shè)置5*7 16行2列 顯示屏 busy(); writecom(0x08);/清屏顯示: busy(); writecom(0x01);/設(shè)置顯示:光標(biāo)打開(kāi) busy(); writecom(0x06);/設(shè)置 指針加1 busy(); writecom(0x0c);/清屏顯示:5、key.hunsigned char key0() unsigned char i=0,x
20、=0; while(i<1) P3=0xfe;/控制掃描哪一行行(1111 1110) x=P3; x= x&0xf0;/e用來(lái)判斷按鍵的按下(是用來(lái)取高四位) if(x!=0xf0)/表示有按鍵按下進(jìn)入 按鍵賦值狀態(tài) x=P3; break; i=i+1; return x; unsigned char key1() unsigned char i=0,x=0; while(i<1) P3=0xfd;/控制掃描哪一行行(1111 1101) x=P3; x= x&0xf0;/e用來(lái)判斷按鍵的按下(是用來(lái)取高四位) if(x!=0xf0)/表示有按鍵按下進(jìn)入 按鍵賦
21、值狀態(tài) x=P3; break; i=i+1; return x; unsigned char key2() unsigned char i=0,x=0; while(i<1) P3=0xfb;/控制掃描哪一行行(1111 1011) x=P3; x= x&0xf0;/e用來(lái)判斷按鍵的按下(是用來(lái)取高四位) if(x!=0xf0)/表示有按鍵按下進(jìn)入 按鍵賦值狀態(tài) x=P3; break; i=i+1; return x; unsigned char key3() unsigned char i=0,x=0; while(i<1) P3=0xf7;/控制掃描哪一行行(111
22、1 0111) x=P3; x= x&0xf0;/e用來(lái)判斷按鍵的按下(是用來(lái)取高四位) if(x!=0xf0)/表示有按鍵按下進(jìn)入 按鍵賦值狀態(tài) x=P3; break; i=i+1; return x; unsigned char getkey(void )/獲取按鍵值 unsigned char k0,k1,k2,k3,answer=16; int b=0; if(b=0) k0=key0(); k1=key1(); k2=key2(); k3=key3(); switch(k0) case 0xee: answer=0; break; case 0xde: answer=1;
23、break; case 0xbe: answer=2; break; case 0x7e: answer=3; break; switch(k1) case 0xed: answer=4; break; case 0xdd: answer=5; break; case 0xbd: answer=6; break; case 0x7d: answer=7; break; switch(k2) case 0xeb: answer=8; break; case 0xdb: answer=9; break; case 0xbb: answer=10; break; case 0x7b: answer=
24、11; break; switch(k3) case 0xe7: answer=12; break; case 0xd7: answer=13; break; case 0xb7: answer=14; break; case 0x77: answer=15; break; if(answer!=16) return answer;/表示按下的鍵是哪一個(gè) else return 16;/表示沒(méi)有按鍵按下 6、ds1302.h #define second 0x80/秒鐘寄存器地址#define minute 0x82/分鐘寄存器地址#define hour 0x84/小時(shí)寄存器地址#defin
25、e date 0x86/日期寄存器地址#define mouth 0x88/月寄存器地址#define weekday 0x8a/星期寄存器地址#define year 0x8c/年寄存器地址#define protect 0x8e/寫保護(hù)寄存器地址#define change 0x90/充電寄存器地址sbit rst=P24;sbit sclk=P21;sbit io=P20;unsigned char code tab3217="Set up ring bell","timer00 00:00:00"unsigned char code tab1 =
26、0x00,0x01,0x02,0x03;/自定義字符數(shù)據(jù)地址unsigned char code tab0=0x0f,0x1f,0x02,0x0f,0x0a,0x1f,0x02,0x00,0x0f,0x09,0x0f,0x09,0x0f,0x09,0x13,0x00,0x0f,0x09,0x09,0x0f,0x09,0x09,0x0f,0x00,0x00,0x0f,0x09,0x09,0x09,0x09,0x1b,0x1b;unsigned char tab2217=" 2013-09-03 W 2 ","23:59:50 +28.5 C"/固定顯示數(shù)字
27、unsigned char s=0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39; /定義顯示0-9和顯示“.”unsigned char a1=0;/寫函數(shù)void write_ds1302(unsigned char x)/有一個(gè)參數(shù),無(wú)返回值 unsigned char i; for(i=0;i<8;i+) sclk=0; io=(bit)(x&01);/ x=x>>1;/x zouyi yiwei sclk=1;/ /讀函數(shù)unsigned char read_ds1302(void)/無(wú)參數(shù),有返回值 int
28、 i; unsigned char x=0; for(i=0;i<8;i+) x=x>>1;/想要延時(shí)可以吧x=x>>1放在ds1302sclk=1;中間 sclk=1; sclk=0;/產(chǎn)生下降沿 if(io=1) x=x|0x80;/把x最高位變成1,在接收一個(gè)信號(hào) return(x);/把x的信號(hào)打印出來(lái) /單字節(jié)寫操作void singlewrite(unsigned char x,unsigned char y)/無(wú)返回值,有一個(gè)參數(shù) ,參數(shù)x表示寄存器地址,參數(shù)y表示數(shù)據(jù) rst=0;/低電平 sclk=0;/低電平 rst=1;/變?yōu)楦唠娖?writ
29、e_ds1302(x&0xfe);/調(diào)用綠色的函數(shù),把最低一位強(qiáng)制變?yōu)? write_ds1302(y);/繼續(xù)調(diào)用綠色的函數(shù),y是bcd碼 sclk=0;/ rst=0;/ /單字節(jié)讀操作unsigned char singleread(unsigned char x)/有一個(gè)參數(shù),有返回值 unsigned char y; rst=0;/低電平 sclk=0;/低電平 rst=1;/變?yōu)楦唠娖?write_ds1302(x|0x01);/調(diào)用綠色的函數(shù),把最低一位強(qiáng)制變?yōu)? y=read_ds1302();/調(diào)用黃色的函數(shù) sclk=0;/ rst=0;/低電平結(jié)束return(y
30、); void init_ds1302()/初始化 unsigned char i=0; lcd1602(); writecom(0x40);/ for(i=0;i<32;i+) /顯示漢字年月日以及音樂(lè)符號(hào) writedate(tab0i); singlewrite(protect,0x00);/關(guān)閉寫保護(hù)寄存器 singlewrite(second,(tab216-48)*16+(tab217-48);/秒 singlewrite(minute,(tab213-48)*16+(tab214-48);/分 singlewrite(hour,(tab210-48)*16+(tab211-
31、48);/時(shí) singlewrite(date,(tab209-48)*16+(tab2010-48);/號(hào) singlewrite(mouth,(tab206-48)*16+(tab207-48);/月 singlewrite(weekday,(tab2015-48);/星期 singlewrite(year,(tab203-48)*16+(tab204-48);/年 singlewrite(protect,0x80);/打開(kāi)寫保護(hù)寄存器 writeby(0xa0,0x00,0x00);7、txet.c#include<reg52.h>#include"zdy.h&qu
32、ot;#include"ds18b20.h"#include"at24c02.h"#include"lcd1602.h"#include"key.h"#include"ds1302.h"sbit beep=P23;/定義蜂鳴器sbit led1=P17;/定義小燈unsigned int x=0; /定義全局變量void main_display();void xgjm_display();void dljm_display();void time_oclock();/void main() u
33、nsigned char y=0; lcd1602();/lcd1602初始化 init_ds1302(); TMOD=0x02;/工作方式2,8位自動(dòng)重裝初值 IE=0x82;/EA=1,ET0=1 IP=0x00; TH0=6; TL0=6; /初值 while(1) if(getkey()=12)/關(guān)閉響鈴,界面時(shí)間不變 beep=1; if(getkey()=15) P1=0X00; a1=a1+1; switch(a1)/a1表示界面切換 case 1: xgjm_display(); break;/a1=1界面切換到修改界面 case 2: dljm_display(); brea
34、k;/a1=2時(shí)界面切換到打鈴界面 default: a1=0; main_display(); time_oclock();break;/a1=0時(shí)切換到主界面上 void time_oclock()/鬧鐘 int i,a=0,k=0x01,num=0,b6; while(a=0) for(i=0;i<6;i+) bi=randomread(0xa0,k+i);/讀取at24c02的值,存在數(shù)組b中 if(k>=randomread(0xa0,0x00)+1)/超出查找的范圍 break;if(b0*16+b1)=singleread(0x84)&&(b2*16+
35、b3)=singleread(0x82)&&(b4*16+b5)=singleread(0x80)/時(shí)鐘判斷相等 TR0=1;/啟動(dòng)定時(shí)器T0,開(kāi)始計(jì)時(shí) beep=0;/蜂鳴器發(fā)出聲音 led1=0;/燈亮 a=1; else k=k+0x06;/否則進(jìn)行下次時(shí)間查找 void int_t0(void) interrupt 1 x+; / if(x=40000)/250*400000=10000000=10s x=0; TR0=0; beep=1;/關(guān)閉打鈴閃光燈程序 led1=1; /小燈不亮 void main_display()/顯示年月日,時(shí)分秒星期的函數(shù)(主界面) c
36、har i,j; int x,y; tab2114=0xdf;/溫度符號(hào) tab203=singleread(0x8c)/16+0x30; tab204=singleread(0x8c)%16+0x30; tab205=0x00;/年 tab206=singleread(0x88)/16+0x30; tab207=singleread(0x88)%16+0x30; tab208=0x01;/月 tab209=singleread(0x86)/16+0x30; tab2010=singleread(0x86)%16+0x30; tab2011=0x02;/日 tab2015=singleread
37、(0x8a)+0x30;/星期 tab210=singleread(0x84)/16+0x30; tab211=singleread(0x84)%16+0x30;/時(shí) tab212=0x3a; tab213=singleread(0x82)/16+0x30; tab214=singleread(0x82)%16+0x30;/分 tab215=0x3a;/: tab216=singleread(0x80)/16+0x30; tab217=singleread(0x80)%16+0x30;/秒 tab218=0x03;/音樂(lè)符號(hào) if(singleread(0x80)>0x59)/判斷時(shí)間是
38、否錯(cuò)誤,如錯(cuò)誤則調(diào)用初始化的值 init_ds1302(); ds18b20();/調(diào)用(溫度) T=b*256+a; if(T&0xf000)=0xf000)/判斷是否為負(fù)數(shù) T=1-T; tab219='-' else/正數(shù) tab219=' ' x=T/16;/x為整數(shù) y=T%16;/y為小數(shù) tab2110=x/10+0x30;/整數(shù)的十位 tab2111=x%10+0x30;/整數(shù)的個(gè)位 tab2113=y*10/16+0x30;/小數(shù) writecom(0x80);/lcd1602固定顯示 for(i=0;i<=15;i+)/顯示 w
39、ritedate(tab20i); writecom(0x80+0x40); for(j=0;j<=15;j+) writedate(tab21j);void xgjm_display()/顯示年月日,時(shí)分秒星期的函數(shù)(修改界面) unsigned char k=0,a=0,b6,i,j; writecom(0x0e); writecom(0x01); tab2114=0xdf;/溫度符號(hào) tab203=singleread(0x8c)/16+0x30; tab204=singleread(0x8c)%16+0x30; tab205=0x00;/年 tab206=singleread(0
40、x88)/16+0x30; tab207=singleread(0x88)%16+0x30; tab208=0x01;/月 tab209=singleread(0x86)/16+0x30; tab2010=singleread(0x86)%16+0x30; tab2011=0x02;/日 tab2015=singleread(0x8a)+0x30;/星期 if(singleread(0x80)>0x59)/判斷時(shí)間是否錯(cuò)誤,如錯(cuò)誤則調(diào)用初始化的值 init_ds1302(); writecom(0x80);/lcd1602固定顯示 for(i=0;i<=15;i+)/顯示 writ
41、edate(tab20i); writecom(0x80+0x40); for(j=0;j<=15;j+)writedate(tab21j); writecom(0x80+0x40); while(k=0) switch(getkey() case 15:a1=1;k=1;break; case 14: if(getkey()=14)/保存界面 k=1; P1=0xff; if(b0*16+b1)<=23&&(b2*16+b3)<=59&&(b4*16+b5)<=59) singlewrite(protect,0x00);/關(guān)閉寫保護(hù)寄存
42、器 singlewrite(0X84,b0*16+b1); singlewrite(0X82,b2*16+b3); singlewrite(0X80,b4*16+b5); singlewrite(protect,0x80);/打開(kāi)寫保護(hù)寄存器 a1=0; break; case 13:k=1; writecom(01);break; default: if(getkey()!=16&&getkey()!=15&&getkey()!=14&&getkey()!=13)/除去退出鍵,保存建,功能切換鍵 delay();delay();delay();
43、 writedate(0x30+getkey();/顯示按鍵 ba=getkey(); a=a+1;/進(jìn)行下次按鍵存儲(chǔ) while(getkey()!=16); /消抖 switch(a) case 2: writedate(':');break; case 4: writedate(':');break; case 6: a=0;writecom(0x80+0x40);delay();break; break; void dljm_display()/打鈴界面 int i,j,k=0,a=0,b6; writecom(0x01);/清屏指令 writecom(
44、0x80); for(i=0;i<=15;i+)/顯示 writedate(tab30i); writecom(0x80+0x40); for(j=0;j<=15;j+) writedate(tab31j); writecom(0x80+0x48); while(k=0) switch(getkey()/按鍵獲取case 15:a1=2;k=1;break;case 14:if(getkey()=14) k=1; P1=0xff; if(b0*16+b1)<=23&&(b2*16+b3)<=59&&(b4*16+b5)<=59)/超
45、出不保存(修改時(shí)間) for(i=0;i<6;i+) writeby(0xa0,(randomread(0xa0,0x00)+i+1),bi); writeby(0xa0,0x00,(randomread(0xa0,0x00)+0x06);/數(shù)據(jù)保存 k=1; break; case 13:k=1;a1=0;break;/ 退出 default:if(getkey()!=16&&getkey()!=15&&getkey()!=14&&getkey()!=13)/除去退出鍵保存建,功能切換鍵 delay(); writedate(0x30+g
46、etkey();/顯示 ba=getkey(); a=a+1;/暫時(shí)保存:while(getkey()!=16); switch(a) case 2: writedate(':');break; case 4: writedate(':');break; case6: a=0;writecom(0x80+0x48);delay();break;break; 六、代碼調(diào)試1、編寫代碼一定要有明確的思路,不然代碼運(yùn)行時(shí)會(huì)有一點(diǎn)小問(wèn)題。2、“”一定要成對(duì)出現(xiàn),如果漏寫一個(gè)會(huì)出現(xiàn)錯(cuò)誤,而且不容易找到漏寫之處,浪費(fèi)時(shí)間。3、在調(diào)用一個(gè)函數(shù)之前,要記得函數(shù)聲明,如果不聲明同
47、樣會(huì)出現(xiàn)錯(cuò)誤七、實(shí)訓(xùn)小結(jié)Ø 第一次(第一天、第二天)今天是實(shí)訓(xùn)的第一天,感覺(jué)很充實(shí),聽(tīng)老師講了許多關(guān)于嵌入式工程師的相關(guān)內(nèi)容,比以前了解了嵌入式工程師所應(yīng)該具備的能力,了解了本次實(shí)訓(xùn)的任務(wù)要求,在同學(xué)的指導(dǎo)下完成第一個(gè)小任務(wù),感覺(jué)有點(diǎn)小失落,因?yàn)闆](méi)有看書的原因,許多知識(shí)都忘記了,因此做實(shí)驗(yàn)時(shí)有一點(diǎn)小困難,好在在同學(xué)的提示下順利地完成了。第二天做的LCD1602的固定顯示,有了第一天的經(jīng)歷,并且和同組員共同努力很快的完成了實(shí)驗(yàn)所需要的效果。這兩天給我的啟示是”溫故而知新”這句話非常的有道理,我們也應(yīng)該要溫故而知新。Ø 第二次(第三天、第四天) 今天的主要任務(wù)是使用時(shí)鐘芯片DS1302,在液晶顯示器LCD1602上顯示年月日、時(shí)分秒、星期,上課的時(shí)候老師利用20分鐘給我們復(fù)
溫馨提示
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2024年七年級(jí)歷史下冊(cè) 第16課 明朝的科技、建筑與文學(xué)說(shuō)課稿 新人教版
- 2025瓷磚買賣合同
- Unit 3 Family Matters Understanding ideas Like Father,Like Son 說(shuō)課稿 -2024-2025學(xué)年高中英語(yǔ)外研版(2019)必修第一冊(cè)
- 2024-2025學(xué)年高中語(yǔ)文 第三課 第4節(jié) 咬文嚼字-消滅錯(cuò)別字說(shuō)課稿2 新人教版選修《語(yǔ)言文字應(yīng)用》
- 21 古詩(shī)三首 第一課時(shí) 說(shuō)課稿-2024-2025學(xué)年統(tǒng)編版語(yǔ)文四年級(jí)上冊(cè)
- 2025購(gòu)銷合同范本
- 森林安全監(jiān)管方案
- 企業(yè)派駐合同范例
- 網(wǎng)狀吊索拱橋施工方案
- 黔東南綠化草坪施工方案
- 慢性腎衰竭的護(hù)理課件
- 2024-2025學(xué)年河南省鄭州市高二上期期末考試數(shù)學(xué)試卷(含答案)
- 甲流乙流培訓(xùn)課件
- 兒科學(xué)川崎病說(shuō)課
- 2025《省建設(shè)工程檔案移交合同書(責(zé)任書)》
- 2025年云南農(nóng)墾集團(tuán)總部春季社會(huì)招聘(9人)管理單位筆試遴選500模擬題附帶答案詳解
- 《石油鉆井基本知識(shí)》課件
- 電力兩票培訓(xùn)
- TCCEAS001-2022建設(shè)項(xiàng)目工程總承包計(jì)價(jià)規(guī)范
- 四百字作文格子稿紙(可打印編輯)
- 新概念二冊(cè)課文電子版
評(píng)論
0/150
提交評(píng)論