12864液晶+DS12C887时钟芯片+DS18B20.docx
- 文档编号:8758209
- 上传时间:2023-05-14
- 格式:DOCX
- 页数:18
- 大小:17.13KB
12864液晶+DS12C887时钟芯片+DS18B20.docx
《12864液晶+DS12C887时钟芯片+DS18B20.docx》由会员分享,可在线阅读,更多相关《12864液晶+DS12C887时钟芯片+DS18B20.docx(18页珍藏版)》请在冰点文库上搜索。
12864液晶+DS12C887时钟芯片+DS18B20
12864液晶显示DS18B20温度和DS12C887时钟芯片的时间日期
#include
#include<12864.h>
#include
#include
#include
#defineuintunsignedint
#defineucharunsignedchar
voidmain()
{
lcd_init();//液晶初始化
ds_init();//DS18B20初始化
ds12c887_init();//DS12C887初始化
screen_1();//显示功能画面1
while
(1)
{
sendChangeCmd();//获取温度并转换
delay(750);
display();//显示温度
show_time();//显示日期时间
}
}
<12864.c>
#include
#include
#include
#include
#defineuintunsignedint
#defineucharunsignedchar
ucharcodetable[]={"℃"};
ucharcodetable0[]={"温度报警系统"};
ucharcodetable1[]={"当前温度:
"};
ucharcodetable2[]={"时间:
"};
ucharcodetable3[]={"日期:
20"};
ucharcodetable4[]={"1.设置日期时间"};
ucharcodetable5[]={"2.设置手机号码"};
ucharcodetable6[]={"3.设置报警温度"};
ucharcodetable7[]={"4.设置闹铃时间"};
ucharnian0,nian1,nian2,yue0,yue1,yue2,ri0,ri1,ri2,shi0,shi1,shi2,fen0,fen1,fen2,miao0,miao1,miao2;
sbitRS=P3^5;
sbitRW=P3^6;
sbitEN=P3^4;
sbitPSB=P3^7;
sbitwela=P2^6;
sbitdula=P2^7;
uinti;
/*****写指令到LCD*****/
voidwrite_cmd(ucharcmd)
{
RS=0;
RW=0;
EN=0;
P0=cmd;
delay(5);
EN=1;
delay(5);
EN=0;
}
/*****写数据到LCD*****/
voidwrite_dat(uchardat)
{
RS=1;
RW=0;
EN=0;
P0=dat;
delay(5);
EN=1;
delay(5);
EN=0;
}
/*****设定显示位置*****/
voidlcd_pos(ucharX,ucharY)
{
ucharpos;
if(X==0)
X=0x80;
elseif(X==1)
X=0x90;
elseif(X==2)
X=0x88;
elseif(X==3)
X=0x98;
pos=X+Y;
write_cmd(pos);
}
/*****写字符串*****/
voidwriteString(uchar*str,ucharlength)
{
uchari;
for(i=0;i { write_dat(str[i]); } } /*****初始化*****/ voidlcd_init() { wela=0; dula=0; PSB=1;//并口方式 write_cmd(0x30); delay(5); write_cmd(0x0c); delay(5); write_cmd(0x01); delay(5); } /*****显示功能1画面*****/ voidscreen_1() { i=0; lcd_pos(0,1); while(table0[i]! ='\0') { write_dat(table0[i]); i++; } i=0; lcd_pos(1,0); while(table1[i]! ='\0') { write_dat(table1[i]); i++; } i=0; lcd_pos(2,0); while(table2[i]! ='\0') { write_dat(table2[i]); i++; } i=0; lcd_pos(3,0); while(table3[i]! ='\0') { write_dat(table3[i]); i++; } } /*****显示得到的温度*****/ voiddisplay() { get_temp(); write_cmd(0x30); lcd_pos(1,5); write_dat((a%100)/10+48);//12864显示语句要“+48” write_dat(a%10+48); lcd_pos(1,6); write_dat('.'); write_dat(b+48); lcd_pos(1,7); i=0; while(table[i]! ='\0') { write_dat(table[i]); i++; } } /*****显示日期时间*****/ voidshow_time() { /*****获取时间*****/ shi0=read_ds(4);//时 shi1=shi0/10; shi2=shi0%10; fen0=read_ds (2);//分 fen1=fen0/10; fen2=fen0%10; miao0=read_ds(0);//秒 miao1=miao0/10; miao2=miao0%10; nian0=read_ds(9);//年 nian1=nian0/10; nian2=nian0%10; yue0=read_ds(8);//月 yue1=yue0/10; yue2=yue0%10; ri0=read_ds(7);//日 ri1=ri0/10; ri2=ri0%10; /*****在液晶显示日期时间*****/ lcd_pos(2,3); write_dat(shi1+48); write_dat(shi2+48); lcd_pos(2,4); write_dat(': '); write_dat(fen1+48); lcd_pos(2,5); write_dat(fen2+48); write_dat(': '); lcd_pos(2,6); write_dat(miao1+48); write_dat(miao2+48); lcd_pos(3,4); write_dat(nian1+48); write_dat(nian2+48); lcd_pos(3,5); write_dat('/'); write_dat(yue1+48); lcd_pos(3,6); write_dat(yue2+48); write_dat('/'); lcd_pos(3,7); write_dat(ri1+48); write_dat(ri2+48); } <12864.h> #ifndef__12864_H__ #define__12864_H__ externvoiddelay(unsignedint); externvoidwrite_cmd(unsignedchar); externvoidwrite_dat(unsignedchar); externvoidlcd_pos(unsignedchar,unsignedchar); externvoidwriteString(unsignedchar,unsignedchar); externvoidlcd_init(void); externvoidshow_time();//显示日期时间 externvoiddisplay();//显示温度 externvoidscreen_1();//显示功能画面1 sbitRS=P3^5; sbitRW=P3^6; sbitEN=P3^4; sbitPSB=P3^7; sbitwela=P2^6; sbitdula=P2^7; #endif #include #include #include<12864.h> #defineuintunsignedint #defineucharunsignedchar sbitds=P2^2; unsignedchara,b; /*****初始化*****/ voidds_init() { uinti; ds=0; i=100; while(i>0)i--; ds=1; i=4; while(i>0)i--; } /*****DS18B20复位,初始化函数*****/ voiddsWait() { uinti; while(ds); while(~ds); i=4; while(i>0)i--; } /*****读1位数据函数*****/ bitreadBit() { uinti; bitb; ds=0; i++; ds=1; i++;i++; b=ds; i=8; while(i>0)i--; returnb; } /*****读1个字节数据函数*****/ unsignedcharreadByte() { uinti; ucharj,dat; dat=0; for(i=0;i<8;i++) { j=readBit(); dat=(j<<7)|(dat>>1); } returndat; } /*****向DS18B20写一个字节数据函数*****/ voidwriteByte(uchardat) { uinti; ucharj; bitb; for(j=0;j<8;j++) { b=dat&0x01; dat>>=1; if(b) { ds=0;i++;i++; ds=1; i=8;while(i>0)i--; } else { ds=0; i=8;while(i>0)i--; ds=1; i++;i++; } } } /*****获取温度并转换*****/ voidsendChangeCmd() { ds_init(); dsWait();//DS18B20复位 delay (1); writeByte(0xcc); writeByte(0x44); } /*****得到转换的温度,value为整型,得到的温度为get_temp(),可以直接取get_temp()的值*****/ voidsendReadCmd()//发送温度命令 { ds_init(); dsWait(); delay (1); writeByte(0xcc);//跳过读ROM指令 writeByte(0xbe);//写温度转换指令 } voidget_temp()//得到的温度 { unsignedcharlow,high; sendReadCmd(); low=readByte();//读取低8位 high=readByte();//读取高8位 a=low/16+high*16; b=(low&0x0f)*10/16; } #ifndef__DS18B20_H__ #define__DS18B20_H__ externvoidds_init(void); externvoiddsWait(void); externbitreadBit(void); externunsignedcharreadByte(void); externvoidwriteByte(unsignedchar); externvoidsendChangeCmd(void); externvoidsendReadCmd(void); externvoidget_temp(); externunsignedchara,b; sbitds=P2^2; #endif #include #defineuintunsignedint #defineucharunsignedchar sbitdsirq=P3^3; sbitdsas=P1^5; sbitdscs=P1^4; sbitdsds=P1^7; sbitdsrw=P1^6; /*****写DS12C887函数*****/ voidwrite_ds(ucharadd,uchardate)//往某个地址写数据 { dscs=0; dsas=1; dsds=1; dsrw=1; P0=add; dsas=0; dsrw=0; P0=date; dsrw=1; dsas=1; dscs=1; } /*****读DS12C887函数*****/ ucharread_ds(ucharadd)//读某个地址被写进去的数据 { uchards_date; dsas=1; dsds=1; dsrw=1; dscs=0; P0=add; dsas=0; dsds=0; P0=0xff; ds_date=P0; dsds=1; dsas=1; dscs=1; returnds_date; } /*****首次操作12C887时给予寄存器初始化******/ //首次上电初始化时间函数 voidset_time() { write_ds(0,0);//秒 write_ds(1,0);//闹铃秒 write_ds(2,15);//分 write_ds(3,0);//闹铃分 write_ds(4,8);//时,采用24小时制 write_ds(5,0);//闹铃时 write_ds(6,0);//星期 write_ds(7,15);//日 write_ds(8,5);//月 write_ds(9,13);//年 } /*****初始化*****/ voidds12c887_init() { EA=1; EX1=1; IT1=1; /*****以下为在首次设置DS12C887时使用,以后不必写入*****/ write_ds(0x0a,0x20);//打开内部振荡器 write_ds(0x0b,0x26);//设置24小时模式,数据二进制格式,开启闹铃中断 set_time();//设置上电默认时间//第一次设置的时候加上该语句(可以设置为当前的时间), } #ifndef__DS12C887_H__ #define__DS12C887_H__ sbitdsirq=P3^3; sbitdsas=P1^5; sbitdscs=P1^4; sbitdsds=P1^7; sbitdsrw=P1^6; externvoidwrite_ds(unsignedchar,unsignedchar); externunsignedcharread_ds(unsignedchar); externvoidset_time(void); externvoidds12c887_init(void); #endif voiddelay(unsignedintz)//延时1秒 { unsignedintx,y; for(x=z;x>0;x--) for(y=110;y>0;y--); } #ifndef__DELAY_H__ #define__DELAY_H__ externvoiddelay(unsignedint); #endif
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 12864 液晶 DS12C887 时钟 芯片 DS18B20
![提示](https://static.bingdoc.com/images/bang_tan.gif)