




版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領
文檔簡介
1、程有華老師MCS51 系列單片機教學(C 語言)源代碼DS1302+DS18B20+LCD16”實驗 02申明:本文檔的程序在Proteus8.7 和開發(fā)板上成功測試,確保正確能用。 本文檔程序版權所有,不得轉(zhuǎn)發(fā)和用于商業(yè)轉(zhuǎn)賣!第一部分:Proteus 仿真原理圖第三部分:Keil C 程序源代碼(可 copy 使用 )第一部分:Proteus 仿真原理圖第 2 頁 / 共 16 頁第二部分:Keil C 程序源代碼(可 copy 使用)#include<reg52.h>#include<intrins.h>#define uchar unsigned char#def
2、ine uint unsigned intsbit p20=P20;sbit p21=P21;sbit p22=P22;sbit p23=P23;sbit p24=P24;sbit p25=P25;sbit LCDRS = P27;sbit LCDE = P26;sbit SCLK = P10;sbit IO = P11;sbit REST = P12;sbit p34 = P34;sbit p17 = P17;sbit DQ = P16;float n;bit sanyear; bit sanmonth; bit sanday; bit sanweek;bit sanhour; bit sa
3、nmin; bit sansec;bit san;ucharseccs=0X55,mincs=0X59,hourcs=0X22,daycs=0X09,monthcs=0X10,yearcs=0X07,weekcs=0X01;uchar sec,min,hour,day,month,year,week;uchar key=0xaa;uchar rl=0; uint qq,time,yy;uint TEMPL,TEMPH,aa,bb;uchar code zimo=0x00,0x0E,0x00,0x0E,0x00,0x1F,0x00,0x00,/三0x00,0x1F,0x15,0x15,0x1B,
4、0x11,0x1F,0x00,/四0x00,0x1E,0x08,0x1E,0x0A,0x0A,0x1F,0x00,/五0x00,0x04,0x00,0x1F,0x0A,0x11,0x00,0x00,/六0x04,0x0F,0x12,0x0F,0x0A,0x1F,0x02,0x02,/年0x0F,0x09,0x0F,0x09,0x0F,0x09,0x13,0x00,/月0x1F,0x11,0x11,0x1F,0x11,0x11,0x1F,0x00,/日0x04,0x0E,0x1C,0x1F,0x1C,0x0E,0x04,0x00;uchar code lcdadd=0x86,0x8a,0x8e,
5、0xc8,0xcb,0xce,0x82;uchar code sz="0123456789"void keyer(void)p20=1;p21=0;if(!p22) while(!p22);key=0x01; if(!p23) while(!p23);key=0x02; if(!p24) while(!p24);key=0x03; if(!p25) while(!p25);key=0x04; p20=0;p21=1;if(!p22) while(!p22); key=0x05; if(!p23) while(!p23);key=0x06; if(!p24) while(!p
6、24);key=0x07; if(!p25) while(!p25);key=0x08; /*盼鍵 */void into0init(void)TMOD = 0X01;TH0 = 15536/256;TL0 = 5536%256;IE = 0X82;TR0 = 1;*/* INTO0 INITIALIZTIONvoid into0deal(void) interrupt 1TH0 = (65536-50000)/256;TL0 = (65536-50000)%256;time=time+1;if(time=8)time=0;san=!san;void delayus(uchar n)while
7、(-n);/* US DELAY */void delay(uint m)uint i,j;for(i=0;i<m;i+) for(j=0;j<125;j+);/* MS DELAY */void LCD_WC(uchar i)LCDRS = 0;LCDE = 1;P0 = i;delay(5);LCDE = 0;delay(1);void LCD_WD(uchar i)LCDRS=1;LCDE=1;P0=i;delay(5);LCDE=0;delay(2);void LCD_WB(void)uchar i;LCD_WC(0x40);/* LCD WTIRE COMMAND */*
8、LCD WTIRE DATA */for(i=0;i<64;i+)LCD_WD(zimoi); void LCD_CS(void)LCD_WC(0x01);LCD_WC(0x02);LCD_WC(0x06);LCD_WC(0x0C);LCD_WC(0x14);LCD_WC(0x38); delay(10);LCD_WB();bit DS18b20_CS(void)/*LCD WTIRE WORD */* LCD INITIALIZTION */bit dp;DQ=0; delayus(237);DQ=1; delayus(27);dp=DQ; delayus(237); return(d
9、p); void wbit(bit bp)DQ=0; delayus(3);/* DS18b20 INITIALIZTION */if(bp)DQ=bp;delayus(20);DQ=1;/* DS18b20 WRITE BIT */void wbyte(uchar m) uchar i;for(i=0;i<8;i+) wbit(m&0x01);m=m>>1;/* DS18b20 WRITE BYTE */bit rbit(void) bit bp;DQ=0;delayus(3);DQ=1;if(DQ)bp=1;else bp=0;delayus(20); retur
10、n(bp);/* DS18b20 READ BIT */uchar rbyte(void)uchar i,m=0;for(i=0;i<8;i+) m=m>>1;if(rbit()m=m|0x80; return(m);/* DS18b20 READ BYTE */void STARTUPDS18b20(void)while(DS18b20_CS();wbyte(0xcc); wbyte(0x44);/ delay(750);for (yy=0;yy<10;yy+)keyer();if(key!=0xaa)break;/* STARTUP DS18b20 */void R
11、EADTEMP(void)STARTUPDS18b20();while(DS18b20_CS();/ delay(1);wbyte(0xcc);wbyte(0xbe);TEMPL=rbyte();TEMPH=rbyte();n=(TEMPL+TEMPH*256)*0.0625;n=n*100;/* READ TEMP IN DS18b20 */void DISPDS18b20(void)uint m;READTEMP();LCD_WC(0x0c0);m=(uint)n;LCD_WD(szm/1000);aa=szm/1000;m=m%1000;LCD_WD(szm/100);bb=szm/10
12、0;m=m%100;LCD_WD('.');LCD_WD(szm/10);m=m%10;LCD_WD(szm);LCD_WD('C');if(aa>=sz2)&&(bb>=sz5)p17=!p17;if(aa>=sz2)&&(bb=sz5)p17=0;if(aa<=sz2)&&(bb<sz4)p17=1;/* DS18b20 TEMP DEAL WITH AND RENOVATE */uchar DS1302read(uchar address)uint b,c,e;e = addre
13、ss;SCLK = 0; REST = 0; REST = 1;for (b=0;b<8;b+)SCLK = 0;IO = (bit)(e & 0x01);SCLK = 1;e = e >> 1;for (b=0;b<8;b+)SCLK = 0;c = c >> 1; if(IO)c=c|0x80;SCLK = 1;REST = 0;SCLK = 1; return (c);void DS1302wirte(uchar address,uchar dataes)uint a,adddat;SCLK = 0; REST = 0; REST = 1; a
14、dddat = address;for(a=0;a<8;a+)SCLK = 0;/adddat & 0x01;/ddress&0x01);/adddat & 0x01;/dataes&0x01;IO = (bit)(adddat & 0x01);SCLK = 1;adddat = adddat >> 1; adddat = dataes;for(a=0;a<8;a+)SCLK = 0;IO = (bit)(adddat & 0x01);SCLK = 1;adddat = adddat >> 1;REST = 0
15、;void DS1302readrealtime(void)sec = DS1302read(0x81);min = DS1302read(0x83);hour = DS1302read(0x85);day = DS1302read(0x87); month= DS1302read(0x89);year = DS1302read(0x8d);week = DS1302read(0x8b);void DS1302init (void)DS1302wirte(0x8e,0x00);DS1302wirte(0x90,0xa9);DS1302wirte(0x80,seccs);DS1302wirte(
16、0x82,mincs);DS1302wirte(0x84,hourcs);DS1302wirte(0x86,daycs);DS1302wirte(0x88,monthcs);DS1302wirte(0x8a,weekcs);DS1302wirte(0x8c,yearcs);void OnlyMeSee (void)seccs = sec; mincs = min; hourcs = hour; weekcs = week;daycs = day;monthcs = month; yearcs = year;void realtimedisplay(void)LCD_WC(0x80);LCD_W
17、D('2');LCD_WD('0');if(sanyear=0)LCD_WD(szyear/16);LCD_WD(szyear%16);elseLCD_WD(' ');LCD_WD(' ');LCD_WC(0x84);LCD_WD(4);LCD_WD(' ');if(sanmonth=0)LCD_WD(szmonth/16);LCD_WD(szmonth%16);elseLCD_WD(' ');LCD_WD(' ');LCD_WC(0x88);LCD_WD(5);LCD_WD(
18、9; ');if(sanday=0)LCD_WD(szday/16);LCD_WD(szday%16);elseLCD_WD(' ');LCD_WD(' ');LCD_WC(0x8C);LCD_WD(6);LCD_WD('<');if(sanweek=0)if (1=week%16)LCD_WD('-');if (2=week%16)LCD_WD('=');if (3=week%16)LCD_WD(0);if (4=week%16)LCD_WD(1);if (5=week%16)LCD_WD(2);i
19、f (6=week%16)LCD_WD(3);if (7=week%16)LCD_WD(6);elseLCD_WD(' ');LCD_WD('>');LCD_WC(0xc8);if(sanhour=0)LCD_WD(szhour/16);LCD_WD(szhour%16);elseLCD_WD(' ');LCD_WD(' ');LCD_WC(0xca);LCD_WD(':');if(sanmin=0)LCD_WD(szmin/16);LCD_WD(szmin%16);elseLCD_WD(' '
20、;);LCD_WD(' ');LCD_WC(0xcd);LCD_WD(':');if(sansec=0)LCD_WD(szsec/16);LCD_WD(szsec%16);elseLCD_WD(' ');LCD_WD(' ');void OnlyMeSee1(void)EA=0;sanyear=0;sanmonth=0;sanday=0;sanweek=0;sanhour=0;sanmin=0;sansec=0;void keywith (void)keyer();if(key=0x08)key=0xaa;EA=1;while(1
21、)loop:realtimedisplay();if(rl=0)sanyear = san;sanmonth=0;sanday=0;sanweek=0;sanhour=0;sanmin=0;sansec=0; if(rl=1)sanmonth= san;sanyear=0;sanday=0;sanweek=0;sanhour=0;sanmin=0;sansec=0; if(rl=2)sanday = san;sanyear=0;sanmonth=0;sanweek=0;sanhour=0;sanmin=0;sansec=0; if(rl=3)sanweek = san;sanyear=0;sa
22、nmonth=0;sanday=0;sanhour=0;sanmin=0;sansec=0; if(rl=4)sanhour = san;sanyear=0;sanmonth=0;sanday=0;sanweek=0;sanmin=0;sansec=0; if(rl=5)sanmin = san;sanyear=0;sanmonth=0;sanday=0;sanweek=0;sanhour=0;sansec=0; if(rl=6)sansec = san;sanyear=0;sanmonth=0;sanday=0;sanweek=0;sanhour=0;sanmin=0; keyer();if
23、(key=0x08)break;if(key=0x03)OnlyMeSee();DS1302init();break; if(key=0x05)key=0xaa;rl=rl-1;if(rl=255)rl=6;goto loop; if(key=0x07)key=0xaa;rl=rl+1;if(rl=7)rl=0;goto loop; if(key=0x02) key=0xaa; switch(rl) case 0:LCD_WC(0x82); year=year+0x01; switch(year)break;break;break;break;case 0x0a :year=0x10;case
24、 0x1a :year=0x20;case 0x2a :year=0x30; case 0x31 :year=0x00;LCD_WD(szyear/16);LCD_WD(szyear%16);LCD_WC(0x82);goto loop;case 1: LCD_WC(0x86);month = month+0x01;switch(month)case 0x0a :month=0x10; break;case 0x13 :month=0x01; break;LCD_WD(szmonth/16);LCD_WD(szmonth%16);LCD_WC(0x86);goto loop;case 2: L
25、CD_WC(0x8a);day = day+0x01;switch(day)case 0x0a :day=0x10; break;case 0x1a :day=0x20; break;case 0x2a :day=0x30; break;case 0x32 :day=0x01; break;LCD_WD(szday/16);LCD_WD(szday%16);LCD_WC(0x8a);goto loop;case 3: LCD_WC(0x8e);week = week+1;if(week=8)week=1;if (1=week%16)LCD_WD('-');LCD_WC(0x8e
26、);goto loop;if (1=week%16)LCD_WD('-');if (2=week%16)LCD_WD('=');if (3=week%16)LCD_WD(0);if (4=week%16)LCD_WD(1);if (5=week%16)LCD_WD(2);if (6=week%16)LCD_WD(3);if (7=week%16)LCD_WD(6);LCD_WC(0x8e);goto loop;case 4: LCD_WC(0xc8);hour = hour+0x01; switch(hour)case 0x0a :hour=0x10; brea
27、k;case 0x1a :hour=0x20; break;case 0x24 :hour=0x00; break;LCD_WD(szhour/16);LCD_WD(szhour%16);LCD_WC(0xc8);goto loop;case 5: LCD_WC(0xcb); min = min+0x01;switch(min)case 0x0a :min=0x10; break;case 0x1a :min=0x20; break;case 0x2a :min=0x30; break;case 0x3a :min=0x40; break;case 0x4a :min=0x50; break;
28、case 0x5a :min=0x00; break;LCD_WD(szmin/16);LCD_WD(szmin%16);LCD_WC(0xcb);goto loop;case 6: LCD_WC(0xce);sec = sec+0x01;switch(sec)case 0x0a :sec=0x10; break;case 0x1a :sec=0x20; break;case 0x2a :sec=0x30; break;case 0x3a :sec=0x40; break;case 0x4a :sec=0x50; break;case 0x5a :sec=0x00; break;LCD_WD(
29、szsec/16);LCD_WD(szsec%16);LCD_WC(0xce);goto loop;if(key=0x06) key=0xaa;switch(rl)case 0:LCD_WC(0x82); year=year-0x01;switch(year)case 0xff :year=0x30;break;case 0x2f :year=0x29;break;case 0x1f :year=0x19;break;case 0x0f :year=0x09;break;LCD_WD(szyear/16);LCD_WD(szyear%16);LCD_WC(0x82);goto loop;cas
30、e 1: LCD_WC(0x86);month = month-0x01; switch(month)case 0x00 :month=0x12; break;case 0x0f :month=0x09; break;LCD_WD(szmonth/16);LCD_WD(szmonth%16);LCD_WC(0x86);goto loop;case 2: LCD_WC(0x8a);day = day-0x01;switch(day)case 0x00 :day=0x31; break;case 0x2f :day=0x29; break;case 0x1f :day=0x19; break;case 0x0f :day=0x09; break;LCD_WD(szday/16);LCD_WD(szday%16);LCD_WC(0x8a);goto loop;case 3: LCD_WC(0x8e);week = week-1;switch(week)case 0x00 :week=0x07;break;if (1=week%16)LCD_WD('-');if (2=week%16)LCD_WD('=');if (3=week%16)
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 個人裝修委托書
- 雙方設備合作合同范本
- 南瓜訂貨合同范例
- 斷層解剖復習題+答案
- 合伙買車合作協(xié)議合同范例
- 七年級下學期語文總結
- 兼職游泳教練合同范本
- 保潔合同范本(完美版)
- 廠里員工租房合同范本
- 《贈劉景文》和《山行》古詩的教學反思
- 2025年萍鄉(xiāng)衛(wèi)生職業(yè)學院單招職業(yè)傾向性測試題庫審定版
- 人教版四年級數(shù)學下冊《圖形的運動(二)》試題(含答案)
- 2024-2025學年五年級(下)信息科技教學計劃
- 2024年江西交通職業(yè)技術學院單招職業(yè)技能測試題庫及答案解析
- 教科版科學五年級下冊《熱》單元教材解讀分析
- 安脈學生信息化管理系統(tǒng)(課堂PPT)
- 化學實驗室安全培訓課件課件
- 渤海灣盆地構造演化及其油氣意義
- 中西醫(yī)結合腫瘤學試卷(含答案)
- 開學第一課我們開學啦主題班會PPT課件(帶內(nèi)容)
- 體育訓練隊隊規(guī)
評論
0/150
提交評論