第一范文网 - 专业文章范例文档资料分享平台

基于at89s52单片机用12864液晶lcd显示带ds18b20测温的万年历电子时钟

来源:用户分享 时间:2025/5/29 17:53:48 本文由loading 分享 下载这篇文档手机版
说明:文章内容仅供预览,部分内容可能不全,需要完整文档或者需要复制内容,请下载word后使用。下载word有问题请添加微信号:xxxxxxx或QQ:xxxxxx 处理(尽可能给您提供完整文档),感谢您的支持与谅解。

sbit cs1 = P2^5; // 片选1 sbit cs2 = P2^2; // 片选2 sbit RST = P2^6;

#define uchar unsigned char #define uint unsigned int

/*-----定义LCD大小-----*/

#define LCD_X_MAX 128 // 定义液晶x轴的像素数 #define LCD_Y_MAX 64 // 定义液晶y轴的像素数

//ASCII 字模宽度及高度 #define ASC_CHR_WIDTH 8 #define ASC_CHR_HEIGHT 16 #define HZ_CHR_WIDTH 16 #define HZ_CHR_HEIGHT 16

//函数原形

void LCD_Init(void); //初始化函数

void LCD_Clr(uchar screen); //清屏函数

void Out_Char(uchar x, uchar y, bit mode, char *fmt); // 在指定位置显示字符

#endif

/**********************#include #include #include #include \#include \

unsigned tem_flag=0; int temp;

sbit DS18B20=P1^7; unsigned char i[2]={0};

void delayb(unsigned int count) //delay {

unsigned char i; while(count) {

i=200; while(i>0) i--; count--;

} }

void DS18B20Init(void) //DS18B20初始化

temp.c

************************/

{

unsigned int i; DS18B20=0; i=103;

while(i>0)i--; DS18B20=1; i=4; while(i>0)i--; }

bit TempReadBit(void) // 读一位 {

unsigned int i; bit dat;

DS18B20=0;i++; //延时 DS18B20=1;i++;i++; dat=DS18B20; i=8;while(i>0)i--; return (dat); }

unsigned char TempRead(void) //读字节 {

unsigned char i,j,dat; dat=0;

for(i=1;i<=8;i++) {

j=TempReadBit();

dat=(j<<7)|(dat>>1); //读出的数据最低位在最前面,这样刚好一个字节在DAT里 }

return(dat); //将一个字节数据返回 }

void TempWriteByte(unsigned char dat)

{ //写一个字节到DS18B20里 unsigned int i; unsigned char j; bit testb;

for(j=1;j<=8;j++) {

testb=dat&0x01;

dat=dat>>1;

if(testb) // 写1部分 {

DS18B20=0; i++;i++; DS18B20=1; i=8;while(i>0)i--; } else

{

DS18B20=0; //写0部分 i=8;while(i>0)i--; DS18B20=1; i++;i++; } } }

void TempChange(void) //发送温度转换命令 {

DS18B20Init(); //初始化DS18B20 delayb(1); //延时

TempWriteByte(0xcc); // 跳过序列号命令 TempWriteByte(0x44); //发送温度转换命令 }

int GetTemp() //获得温度 {

float tt;

unsigned char a,b;

DS18B20Init(); delayb(1);

TempWriteByte(0xcc);

TempWriteByte(0xbe); //发送读取数据命令 a=TempRead(); //低位温度数据

//高位温度数据 //如果温度为负

b=TempRead(); if(b&0x80)

tem_flag=1; else

tem_flag=0;

temp=b; temp<<=8;

temp=temp|a; //两字节合成一个整型变量。 if(tem_flag) //如果温度为负转换为正

temp=~temp+1; tt=temp*0.0625; //得到真实十进制温度值,因为DS18B20 可以精确到0.0625度,所以读回数据的最低位代表的是0.0625度。

temp=tt*10+0.5; //放大十倍,这样做的目的将小数点后第一位 也转换为可显示数字,同时进行一个四舍五入操作。 return temp; //返回温度值 }

void DisplayTemp(void) {

unsigned int temp; unsigned char a,b,c; TempChange(); temp=GetTemp(); a=temp/100; i[0]=a+0x30; b=temp/10-a*10; i[1]=b+0x30; Out_Char(45, 6, 1,i); }

/***********************#include #include #include #include \

//#include \#include \

sbit KEY1=P1^0; //定义端口参数 sbit KEY2=P1^1; sbit KEY3=P1^2; sbit KEY4=P1^3; sbit KEY5=P1^4; sbit KEY6=P1^5; sbit LED=P1^6; //int m,w=0; int flag,next;

unsigned char time1,time=0; unsigned char second=0; unsigned char minute=18; unsigned char hour=12; unsigned char day=23; unsigned char month=8; unsigned char year=12; unsigned char cent=20;

main.c

************************/

基于at89s52单片机用12864液晶lcd显示带ds18b20测温的万年历电子时钟.doc 将本文的Word文档下载到电脑,方便复制、编辑、收藏和打印
本文链接:https://www.diyifanwen.net/c64mmi7ndpe3h0qq03o65_4.html(转载请注明文章来源)
热门推荐
Copyright © 2012-2023 第一范文网 版权所有 免责声明 | 联系我们
声明 :本网站尊重并保护知识产权,根据《信息网络传播权保护条例》,如果我们转载的作品侵犯了您的权利,请在一个月内通知我们,我们会及时删除。
客服QQ:xxxxxx 邮箱:xxxxxx@qq.com
渝ICP备2023013149号
Top