DS1302+DS18B20+LCD1602单片机c语言驱动程序案例.docx
- 文档编号:5267467
- 上传时间:2022-12-14
- 格式:DOCX
- 页数:20
- 大小:94.78KB
DS1302+DS18B20+LCD1602单片机c语言驱动程序案例.docx
《DS1302+DS18B20+LCD1602单片机c语言驱动程序案例.docx》由会员分享,可在线阅读,更多相关《DS1302+DS18B20+LCD1602单片机c语言驱动程序案例.docx(20页珍藏版)》请在冰豆网上搜索。
DS1302+DS18B20+LCD1602单片机c语言驱动程序案例
程有华老师MCS51系列单片机教学(C语言)源代码——
“DS1302+DS18B20+LCD1602”实验
申明:
本文档的程序在Proteus8.7和开发板上成功测试,确保正确能用。
本文档程序版权所有,不得转发和用于商业转卖!
【文档构成】
第一部分:
Proteus仿真原理图
第三部分:
KeilC程序源代码(可copy使用)
(程有华单片机培训工作室制作)
第一部分:
Proteus仿真原理图
第二部分:
KeilC程序源代码(可copy使用)
#include
#include
#defineucharunsignedchar
#defineuintunsignedint
sbitp20=P2^0;
sbitp21=P2^1;
sbitp22=P2^2;
sbitp23=P2^3;
sbitp24=P2^4;
sbitp25=P2^5;
sbitLCDRS=P2^7;
sbitLCDE=P2^6;
sbitSCLK=P1^0;
sbitIO=P1^1;
sbitREST=P1^2;
sbitp34=P3^4;
sbitp17=P1^7;
sbitDQ=P1^6;
floatn;
bitsanyear;bitsanmonth;bitsanday;bitsanweek;
bitsanhour;bitsanmin;bitsansec;
bitsan;
ucharseccs=0X55,mincs=0X59,hourcs=0X22,daycs=0X09,monthcs=0X10,yearcs=0X07,weekcs=0X01;
ucharsec,min,hour,day,month,year,week;
ucharkey=0xaa;
ucharrl=0;uintqq,time,yy;
uintTEMPL,TEMPH,aa,bb;
ucharcodezimo[]={
0x00,0x0E,0x00,0x0E,0x00,0x1F,0x00,0x00,//三
0x00,0x1F,0x15,0x15,0x1B,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
};
ucharcodelcdadd[]={0x86,0x8a,0x8e,0xc8,0xcb,0xce,0x82};
ucharcodesz[]={"0123456789"};
voidkeyer(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(!
p24);key=0x07;}
if(!
p25){while(!
p25);key=0x08;}
}/**************盼键*************/
voidinto0init(void)
{
TMOD=0X01;
TH0=15536/256;
TL0=5536%256;
IE=0X82;
TR0=1;
}/************INTO0INITIALIZTION***/
voidinto0deal(void)interrupt1
{
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
time=time+1;
if(time==8){time=0;san=!
san;}
}
voiddelayus(ucharn)
{
while(--n);
}/************USDELAY*************/
voiddelay(uintm)
{
uinti,j;
for(i=0;i for(j=0;j<125;j++); }/************MSDELAY************/ voidLCD_WC(uchari) { LCDRS=0; LCDE=1; P0=i; delay(5); LCDE=0; delay (1); }/************LCDWTIRECOMMAND****/ voidLCD_WD(uchari) { LCDRS=1; LCDE=1; P0=i; delay(5); LCDE=0; delay (2); }/***********LCDWTIREDATA*******/ voidLCD_WB(void) { uchari; LCD_WC(0x40); for(i=0;i<64;i++)LCD_WD(zimo[i]); }/************LCDWTIREWORD******/ voidLCD_CS(void) { LCD_WC(0x01); LCD_WC(0x02); LCD_WC(0x06); LCD_WC(0x0C); LCD_WC(0x14); LCD_WC(0x38); delay(10); LCD_WB(); }/************LCDINITIALIZTION**/ bitDS18b20_CS(void) { bitdp; DQ=0; delayus(237); DQ=1; delayus(27); dp=DQ; delayus(237); return(dp); }/***********DS18b20INITIALIZTION*/ voidwbit(bitbp) { DQ=0; delayus(3); if(bp)DQ=bp; delayus(20); DQ=1; }/***********DS18b20WRITEBIT*****/ voidwbyte(ucharm) { uchari; for(i=0;i<8;i++) { wbit(m&0x01); m=m>>1; } }/***********DS18b20WRITEBYTE***/ bitrbit(void) { bitbp; DQ=0; delayus(3); DQ=1; if(DQ)bp=1; elsebp=0; delayus(20); return(bp); }/***********DS18b20READBIT*****/ ucharrbyte(void) { uchari,m=0; for(i=0;i<8;i++) { m=m>>1; if(rbit())m=m|0x80; } return(m); }/***********DS18b20READBYTE****/ voidSTARTUPDS18b20(void) { while(DS18b20_CS()); wbyte(0xcc); wbyte(0x44); //delay(750); for(yy=0;yy<10;yy++){keyer();if(key! =0xaa)break;} }/***********STARTUPDS18b20******/ voidREADTEMP(void) { STARTUPDS18b20(); while(DS18b20_CS()); //delay (1); wbyte(0xcc); wbyte(0xbe); TEMPL=rbyte(); TEMPH=rbyte(); n=(TEMPL+TEMPH*256)*0.0625; n=n*100; }/***********READTEMPINDS18b20*/ voidDISPDS18b20(void) { uintm; READTEMP(); LCD_WC(0x0c0); m=(uint)n; LCD_WD(sz[m/1000]); aa=sz[m/1000]; m=m%1000; LCD_WD(sz[m/100]); bb=sz[m/100]; m=m%100; LCD_WD('.'); LCD_WD(sz[m/10]); m=m%10; LCD_WD(sz[m]); LCD_WD('C'); if((aa>=sz[2])&&(bb>=sz[5])){p17=! p17;} if((aa>=sz[2])&&(bb==sz[5]))p17=0; if((aa<=sz[2])&&(bb }/*DS18b20TEMPDEALWITHANDRENOVATE*/ ucharDS1302read(ucharaddress) { uintb,c,e; e=address; 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); } voidDS1302wirte(ucharaddress,uchardataes) { uinta,adddat; SCLK=0;REST=0;REST=1; adddat=address; for(a=0;a<8;a++) { SCLK=0; IO=(bit)(adddat&0x01);//adddat&0x01;////ddress&0x01); SCLK=1; adddat=adddat>>1; } adddat=dataes; for(a=0;a<8;a++) { SCLK=0; IO=(bit)(adddat&0x01);//adddat&0x01;//dataes&0x01; SCLK=1; adddat=adddat>>1; } REST=0; } voidDS1302readrealtime(void) { sec=DS1302read(0x81); min=DS1302read(0x83); hour=DS1302read(0x85); day=DS1302read(0x87); month=DS1302read(0x89); year=DS1302read(0x8d); week=DS1302read(0x8b); } voidDS1302init(void) { DS1302wirte(0x8e,0x00); DS1302wirte(0x90,0xa9); DS1302wirte(0x80,seccs); DS1302wirte(0x82,mincs); DS1302wirte(0x84,hourcs); DS1302wirte(0x86,daycs); DS1302wirte(0x88,monthcs); DS1302wirte(0x8a,weekcs); DS1302wirte(0x8c,yearcs); } voidOnlyMeSee(void) { seccs=sec;mincs=min;hourcs=hour;weekcs=week; daycs=day;monthcs=month;yearcs=year; } voidrealtimedisplay(void) { LCD_WC(0x80); LCD_WD('2'); LCD_WD('0'); if(sanyear==0){ LCD_WD(sz[year/16]); LCD_WD(sz[year%16]); } else {LCD_WD('');LCD_WD('');} LCD_WC(0x84); LCD_WD(4); LCD_WD(''); if(sanmonth==0){ LCD_WD(sz[month/16]); LCD_WD(sz[month%16]); } else {LCD_WD('');LCD_WD('');} LCD_WC(0x88); LCD_WD(5); LCD_WD(''); if(sanday==0){ LCD_WD(sz[day/16]); LCD_WD(sz[day%16]); } else {LCD_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); if(6==week%16)LCD_WD(3); if(7==week%16)LCD_WD(6); } else {LCD_WD('');} LCD_WD('>'); LCD_WC(0xc8); if(sanhour==0){ LCD_WD(sz[hour/16]); LCD_WD(sz[hour%16]); } else {LCD_WD('');LCD_WD('');} LCD_WC(0xca); LCD_WD(': '); if(sanmin==0){ LCD_WD(sz[min/16]); LCD_WD(sz[min%16]); } else {LCD_WD('');LCD_WD('');} LCD_WC(0xcd); LCD_WD(': '); if(sansec==0){ LCD_WD(sz[sec/16]); LCD_WD(sz[sec%16]); } else {LCD_WD('');LCD_WD('');} } voidOnlyMeSee1(void) { EA=0;sanyear=0;sanmonth=0;sanday=0; sanweek=0;sanhour=0;sanmin=0;sansec=0; } voidkeywith(void) { keyer(); if(key==0x08) { key=0xaa;EA=1; while (1) { 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;sanmonth=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(key==0x08){break;} if(key==0x03){OnlyMeSee();DS1302init();break;} if(key==0x05){key=0xaa;rl=rl-1;if(rl==255)rl=6;gotoloop;} if(key==0x07){key=0xaa;rl=rl+1;if(rl==7)rl=0;gotoloop;} if(key==0x02) {key=0xaa; switch(rl) { case0: { LCD_WC(0x82);year=year+0x01; switch(year) { case0x0a: year=0x10;break; case0x1a: year=0x20;break; case0x2a: year=0x30;break; case0x31: year=0x00;break; } LCD_WD(sz[year/16]);LCD_WD(sz[year%16]);LCD_WC(0x82);gotoloop; } case1: { LCD_WC(0x86);month=month+0x01; switch(month) { case0x0a: month=0x10;break; case0x13: month=0x01;break; } LCD_WD(sz[month/16]);LCD_WD(sz[month%16]);LCD_WC(0x86);gotoloop; } case2: { LCD_WC(0x8a);day=day+0x01; switch(day) { case0x0a: day=0x10;break; case0x1a: day=0x20;break; case0x2a: day=0x30;break; case0x32: day=0x01;break; } LCD_WD(sz[day/16]);LCD_WD(sz[day%16]);LCD_WC(0x8a);gotoloop; } case3: { LC
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- DS1302 DS18B20 LCD1602 单片机 语言 驱动程序 案例