6675连接51单片机进行温度显示程序

6675连接51单片机进行温度显示程序,第1张

呵呵,本人给你一个程序希望可以帮到你:***************************************************************************************************/ //LCD1602对比度已调试好,可以直接使用。 // *** 作方法如下: //1.正确安装液晶1602,请查看使用手册目录下的液晶安装方法。 //2.下载本程序 //该程序使用LCD1602显示 //3.调节液晶对比度致液晶清晰显示字符,若已调节好可跳过此步。 //4.实验板上S3键为功能键,按下后可选择调节哪个部分。 //5.S7为数字增大键。 //6.SB为数字减小键。 #include<reg52.h>#define uint unsigned int #define uchar unsigned char uchar a,miao,shi,fen,ri,yue,nian,week,flag,temp,key1n#define yh 0x80 //第一行的初始位置 #define er 0x80+0x40 //第二行初始位置 //sbit cs1=P3^7//sbit ledk=P2^5sbit dula=P2^6sbit wela=P2^7sbit wr=P3^6sbit rs=P3^5sbit en=P3^4sbit SCLK=P2^1// 6 P1.1 sbit IO=P2^0// 7 P1.0 sbit RST=P2^5//时钟 5 P1.2 sbit ACC0=ACC^0sbit ACC7=ACC^7sbit key=P3^7sbit key1=P3^0sbit key2=P3^1sbit key3=P3^2uchar code tab1[]={"2009- - THU"}uchar code tab2[]={" : : "}void delay(uint xms)//延时函数 { uint x,yfor(x=xmsx>0x--) for(y=110y>0y--)} /******************液晶写入************************/ write_1602com(uchar com)//液晶写入指令函数 { rs=0//置为写入命令 P0=com//送入数据 delay(1)en=1//拉高使能端 delay(1)en=0//完成高脉冲 } write_1602dat(uchar dat) { rs=1//置为写入数据 P0=dat//送入数据 delay(1)en=1delay(1)en=0} /*********************over***********************/ /********************ds1302****************************/ void write_byte(uchar dat) { ACC=datRST=1for(a=8a>0a--) { IO=ACC0SCLK=0SCLK=1ACC=ACC>>1} } uchar read_byte() { RST=1for(a=8a>0a--) { ACC7=IOSCLK=1SCLK=0ACC=ACC>>1} return (ACC)} void write_1302(uchar add,uchar dat) { RST=0SCLK=0RST=1write_byte(add)write_byte(dat)SCLK=1RST=0} uchar read_1302(uchar add) { uchar tempRST=0SCLK=0RST=1write_byte(add)temp=read_byte()SCLK=1RST=0return(temp)} uchar BCD_Decimal(uchar bcd) { uchar DecimalDecimal=bcd>>4return(Decimal=Decimal*10+(bcd&=0x0F))} void ds1302_init() { RST=0SCLK=0write_1302(0x80,miao|0x00)//允许写 } void write_sfm(uchar add,uchar dat)//写时分秒 { uchar gw,swgw=dat%10sw=dat/10write_1602com(er+add)write_1602dat(0x30+sw)write_1602dat(0x30+gw) } void write_nyr(uchar add,uchar dat) { uchar gw,swgw=dat%10sw=dat/10write_1602com(yh+add)write_1602dat(0x30+sw)write_1602dat(0x30+gw) } void write_week(uchar week)//写星期函数 { write_1602com(yh+0x0d)switch(week) { case 1:write_1602dat('M')//delay(5)write_1602dat('O')//delay(5)write_1602dat('N')break case 2:write_1602dat('T')//delay(5)write_1602dat('U')//delay(5)write_1602dat('E')break case 3:write_1602dat('W')//delay(5)write_1602dat('E')//delay(5)write_1602dat('D')break case 4:write_1602dat('T')//delay(5)write_1602dat('H')//delay(5)write_1602dat('U')break case 5:write_1602dat('F')//delay(5)write_1602dat('R')//delay(5)write_1602dat('I')break case 6:write_1602dat('S')//delay(5)write_1602dat('T')//delay(5)write_1602dat('A')break case 7:write_1602dat('S')//delay(5)write_1602dat('U')//delay(5)write_1602dat('N')break} } lcd_init()//液晶初始化函数 { wr=0write_1602com(0x38)//设置液晶工作模式 write_1602com(0x0c)//开显示不显示光标 write_1602com(0x06)//整屏不移动,指针加一 write_1602com(0x01)write_1602com(yh+2)//字符写入的位置 for(a=0a<14a++) { write_1602dat(tab1[a])//delay(3)} write_1602com(er+4)for(a=0a<8a++) { write_1602dat(tab2[a])//delay(3)} } void keyscan() { key=0if(key1==0)//key1为功能键 { delay(5)if(key1==0) { while(!key1)key1n++if(key1n==9) key1n=1switch(key1n) { case 1: TR0=0//关闭定时器 //TR1=0write_1602com(er+0x0b)//写入光标位置 write_1602com(0x0f)//设置光标为闪烁 temp=(miao)/10*16+(miao)%10write_1302(0x8e,0x00)write_1302(0x80,0x80|temp)//miao write_1302(0x8e,0x80)breakcase 2: write_1602com(er+8)//fen //write_1602com(0x0f)breakcase 3: write_1602com(er+5)//shi //write_1602com(0x0f)breakcase 4: write_1602com(yh+0x0f)//week //write_1602com(0x0f)breakcase 5: write_1602com(yh+0x0b)//ri //write_1602com(0x0f)breakcase 6: write_1602com(yh+0x08)//yue //write_1602com(0x0f)breakcase 7: write_1602com(yh+0x05)//nian //write_1602com(0x0f)breakcase 8: write_1602com(0x0c)//设置光标不闪烁 TR0=1//打开定时器 temp=(miao)/10*16+(miao)%10write_1302(0x8e,0x00)write_1302(0x80,0x00|temp)//miao write_1302(0x8e,0x80)break } } } if(key1n!=0)//当key1按下以下。再按以下键才有效 { if(key2==0) //上调键 { delay(5)if(key2==0) { while(!key2)switch(key1n) { case 1:miao++if(miao==60) miao=0write_sfm(0x0a,miao)//写入新的秒数 temp=(miao)/10*16+(miao)%10write_1302(0x8e,0x00)write_1302(0x80,0x80|temp)write_1302(0x8e,0x80)write_1602com(er+0x0b)//因为设置液晶的模式是写入数据后,指针自动加一,在这里是写回原来的位置 //write_1602com(0x0b)breakcase 2:fen++if(fen==60) fen=0write_sfm(0x07,fen)temp=(fen)/10*16+(fen)%10write_1302(0x8e,0x00)write_1302(0x82,temp)write_1302(0x8e,0x80)write_1602com(er+8)breakcase 3:shi++if(shi==24) shi=0write_sfm(4,shi)temp=(shi)/10*16+(shi)%10write_1302(0x8e,0x00)write_1302(0x84,temp)write_1302(0x8e,0x80)write_1602com(er+5)breakcase 4:week++if(week==8) week=0write_week(week) write_1602com(yh+0x0f)breakcase 5:ri++if(ri==31) ri=0write_nyr(10,ri)temp=(ri)/10*16+(ri)%10write_1302(0x8e,0x00)write_1302(0x86,temp)write_1302(0x8e,0x80)write_1602com(yh+11)breakcase 6:yue++if(yue==13) yue=0write_nyr(7,yue)temp=(yue)/10*16+(yue)%10write_1302(0x8e,0x00)write_1302(0x88,temp)write_1302(0x8e,0x80)write_1602com(yh+8)breakcase 7:nian++if(nian==100) nian=0write_nyr(4,nian)write_1602com(yh+5)break } } } if(key3==0) { delay(5)if(key3==0) { while(!key3)switch(key1n) { case 1:miao--if(miao==-1) miao=59write_sfm(0x0a,miao)//写入新的秒数 write_1602com(er+0x0b)//因为设置液晶的模式是写入数据后,指针自动加一,在这里是写回原来的位置 //write_1602com(0x0b)breakcase 2:fen--if(fen==-1) fen=59write_sfm(7,fen)temp=(fen)/10*16+(fen)%10write_1302(0x8e,0x00)write_1302(0x82,temp)write_1302(0x8e,0x80)write_1602com(er+8)breakcase 3:shi--if(shi==-1) shi=23write_sfm(4,shi)temp=(shi)/10*16+(shi)%10write_1302(0x8e,0x00)write_1302(0x84,temp)write_1302(0x8e,0x80)write_1602com(er+5)breakcase 4:week--if(week==-1) week=7write_week(week)write_1602com(yh+0x0f)breakcase 5:ri--if(ri==-1) ri=30write_nyr(10,ri)temp=(ri)/10*16+(ri)%10write_1302(0x8e,0x00)write_1302(0x86,temp)write_1302(0x8e,0x80)write_1602com(yh+11)breakcase 6:yue--if(yue==-1) yue=12write_nyr(7,yue)temp=(yue)/10*16+(yue)%10write_1302(0x8e,0x00)write_1302(0x88,temp)write_1302(0x8e,0x80)write_1602com(yh+8)break case 7:nian--if(nian==-1) nian=99write_nyr(4,nian)write_1602com(yh+5)break } } } } } void init() { TMOD=0x11TH0=0TL0=0EA=1ET0=1TR0=1 } void cmg(void)//数码管锁存函数 { dula=1P0=0x00dula=0wela=1P0=0x00wela=0} void main() { cmg()//数码管锁存 lcd_init()ds1302_init()init()while(1) { //TH0=(65536-60000)/256//TL0=(65536-60000)%256 keyscan() } } void timer0() interrupt 1 { miao = BCD_Decimal(read_1302(0x81))fen = BCD_Decimal(read_1302(0x83))shi = BCD_Decimal(read_1302(0x85))ri = BCD_Decimal(read_1302(0x87))yue = BCD_Decimal(read_1302(0x89))nian=BCD_Decimal(read_1302(0x8d))week=BCD_Decimal(read_1302(0x8b))//keyscan() write_sfm(10,miao)//write_1602com(er+0x0a)//write_1602dat(':')write_sfm(7,fen)//write_1602com(er+0x07)//write_1602dat(':')write_sfm(4,shi) //write_nyr(4,nian)write_nyr(10,ri)write_nyr(7,yue)//write_week(week)} 最后还不明白的请到本技术论坛,寻找各种技术支持: http://hjdz.5d6d.com/

满意请采纳

void delay_us(uchar m)

{

while(m--)

}

uint Read_6675()

{

uchar i=0

uint temp=0

uint dat6675=0

//-------------

//接口初始化

CS=1

SCK=0

delay_us(10)

//--------------

CS=0

delay_us(10)

//获取16位数据

for(i=0i<16i++)

{

SCK=1

temp=temp<<1

if(SO==1)

temp=temp|0x01

SCK=0

delay_us(10)

}

CS=1

//---------------

//取出其中12位温度数据

temp=temp<<1

temp=temp>>4

dat6675=temp

//---------------

return dat6675

}


欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/yw/11344636.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-15
下一篇 2023-05-15

发表评论

登录后才能评论

评论列表(0条)

保存