DS1302+DS18B20+LCD1602單片機c語言驅(qū)動程序案例_第1頁
DS1302+DS18B20+LCD1602單片機c語言驅(qū)動程序案例_第2頁
DS1302+DS18B20+LCD1602單片機c語言驅(qū)動程序案例_第3頁
DS1302+DS18B20+LCD1602單片機c語言驅(qū)動程序案例_第4頁
DS1302+DS18B20+LCD1602單片機c語言驅(qū)動程序案例_第5頁
已閱讀5頁,還剩16頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內(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. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論