基于51单片机的温湿度及万年历设计 - 图文(7)

2019-02-15 16:54

基于51单片机的温湿度及万年历设计 课程设计 for (i=12;i<16;i++) {

write_12864dat(table4[d]); d++;

delay_50us(1); } }

void display3() {

uchar a;

if (disp[10]==0x31) a=0; if (disp[10]==0x32) a=1; if (disp[10]==0x33) a=2; if (disp[10]==0x34) a=3; if (disp[10]==0x35) a=4; if (disp[10]==0x36) a=5; if (disp[10]==0x37) a=6; write_12864com(0x88); write_12864dat(0x32); write_12864dat(0x30); write_12864dat(disp[12]); write_12864dat(disp[11]); write_12864dat(0xa3); write_12864dat(0xad); write_12864dat(disp[9]); write_12864dat(disp[8]); write_12864dat(0xa3); write_12864dat(0xad); write_12864dat(disp[7]); write_12864dat(disp[6]); write_12864dat(0x20); write_12864dat(0x20); write_12864dat(0xa2); write_12864dat(0xe5+a); }

void display4() {

write_12864com(0x98); write_12864dat(0x20); write_12864dat(0x20); write_12864dat(disp[5]); write_12864dat(disp[4]); write_12864dat(0xa1); write_12864dat(0xc3);

//显示日期

//2 //0

//显示时间

29

基于51单片机的温湿度及万年历设计 课程设计 write_12864dat(disp[3]); write_12864dat(disp[2]); write_12864dat(0xa1); write_12864dat(0xc3); write_12864dat(disp[1]); write_12864dat(disp[0]); write_12864dat(0x20); write_12864dat(0x20); write_12864dat(0x20); write_12864dat(0x20); }

/****************DHT11程序****************/ void Delay (uint z) {

uchar x,y;

for(x=z;x>0;x--)

For(y=110;y>0;y--); }

void delay_10us() {

uchar i; i--; i--; i--; i--; i--; i--; }

void jieshou (void) //数据0 1确认 {

uchar i; zijie=0;

for(i=0;i<8;i++) { flag=2;

while((!SJ)&&flag++); //1bit是否结束 delay_10us(); delay_10us(); delay_10us(); if(SJ) {

wei=1; // 超过28us依然为高电平 表示为1 flag=2;

30

基于51单片机的温湿度及万年历设计 课程设计 while((SJ)&&flag++); } else

wei=0;

zijie<<=1; zijie|=wei; } }

void read (void) {

SJ=0;

Delay(34); //主机拉低高于18ms SJ=1;

delay_10us(); delay_10us(); delay_10us(); delay_10us();

SJ=1; //主机设为输入 判断从机响应信号 if(!SJ) { flag=2;

while((!SJ)&&flag++);//判断从机是否发出 80us 的低电平响应号是否结束 flag=2;

while((SJ)&&flag++); //判断从机是否发出 80us 如发据接收状态 jieshou(); //数据接收状态 sdzs=zijie; //湿度整数8位 jieshou();

sdxs=zijie;//湿度小数8位 jieshou();

wdzs=zijie; //温度整数8位 jieshou();

wdxs=zijie; //温度小数8位 jieshou();

jiaoyan=zijie; //校验位 SJ=1;

JY=(sdzs+sdxs+wdzs+wdxs);

if(JY==jiaoyan) //数据校验 正确执行 { SZ=sdzs; SX=sdxs; WZ=wdzs; WX=wdxs; //JY=jiaoyan; }

31

基于51单片机的温湿度及万年历设计 课程设计 } table3[0]=0x3a;

table3[1]=(char)(0x30+WZ/10); table3[2]=(char)(0x30+WZ); table3[3]=0x63;

table4[0]=0x3a;

table4[1]=(char)(0x30+SZ/10); table4[2]=(char)(0x30+SZ); table4[3]=0x25; }

/***************DS1302程序*********************/

void write_1302_byte(uchar dat) //写字节 {

uchar i;

for (i=0;i<8;i++) { sck=0;

io=dat&0x01; dat>>=1; sck=1; } }

void write_1302(uchar add,uchar dat) { rst=0; _nop_(); sck=0; _nop_(); rst=1; _nop_();

write_1302_byte(add); write_1302_byte(dat); rst=0; _nop_(); io=1; sck=1; }

uchar read_1302(uchar add) { uchar i,value; rst=0; _nop_(); sck=0; _nop_();

32

基于51单片机的温湿度及万年历设计 课程设计 rst=1; _nop_();

write_1302_byte(add); for (i=0;i<8;i++) {

value>>=1; sck=0; if(io)

value=value|0x80; sck=1; } rst=0; _nop_(); sck=0; _nop_(); sck=1; io=1;

return value; }

void set_rct(void)//设置时间 { uchar i;

for(i=0;i<7;i++) //10进制转换16进制 {

t ime_data1[i]=time_data[i]+time_data[i]/10*16; }

write_1302(0x8e,0x00);//去除写保护 for(i=0;i<7;i++) {

write_1302(write_add[i],time_data1[i]); }

write_1302(0x8e,0x80);//添加写保护 }

void read_rct(void) //对时间 { uchar i;

for(i=0;i<7;i++) {

time_data2[i]=read_1302(read_add[i]); //此时数组里面是从里面读出来的时间(16进制的) } }

void time_pros(void) //处理函数 {

disp[0]=(char)(time_data2[6]+0x30); //6表示秒 disp[1]=(char)(time_data2[6]/16+0x30);

disp[2]=(char)(time_data2[5]+0x30); //5表示分

33


基于51单片机的温湿度及万年历设计 - 图文(7).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:新煤矿安全生产法律法规

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: