单片机课程设计报告 - 温度报警器 - 图文(5)

2019-03-04 15:16

徐州工程学院单片机原理及应用课程设计

sbit Beep = P1^5 ;

void delay(unsigned int i) ;

void delay(unsigned int i) {

char j;

for(i; i > 0; i--)

for(j = 200; j > 0; j--); }

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

* 函数名 : main * 函数功能

: 主函数

* 输入 : 无 * 输出 : 无

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

void main() {

TMOD = 0x01; TH0 = 60536/256; TL0 = 60536%6; EA=1; ET0=1; LcdInit();

//初始化LCD1602

//写地址 80表示初始地址

LcdWriteCom(0x88); LcdWriteData('C'); while(1) {

17

徐州工程学院单片机原理及应用课程设计

LcdDisplay(Ds18b20ReadTemp()); if(Ds18b20ReadTemp()>=400) //25 {

TR0=1;

}else{ }

Delay1ms(1000);//1s钟刷一次

TR0=0;

// }

}

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

* 函数名 : 定时器0 中断服务程序 * 函数功能

:

* 输入 : v * 输出 : 无

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

void Timer0(void) interrupt 1 { }

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

* 函数名 : LcdDisplay() * 函数功能

: LCD显示读取到的温度

TH0 = 60536/256;

TL0 = 60536%6; //产生发声100Hz的平率 Beep = ~Beep;

* 输入 : v * 输出 : 无

18

徐州工程学院单片机原理及应用课程设计

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

void LcdDisplay(int temp) //lcd显示 {

unsigned char datas[] = {0, 0, 0, 0, 0}; //定义数组

float tp; if(temp< 0)

//当温度值为负数

{

LcdWriteCom(0x80);

//写地址 80表示初始地址 //显示负

LcdWriteData('-');

//因为读取的温度是实际温度的补码,所以减1,再取反求出原码 temp=temp-1; temp=~temp; tp=temp;

temp=tp*0.0625*100+0.5;

//留两个小数点就*100,+0.5是四舍五入,因为C语言浮点数转换为整型的时候把小数点

//后面的数自动去掉,不管是否大于0.5,而+0.5之后大于0.5的就是进1了,小于0.5的就 } else {

//写地址 80表示初始地址 //显示正

//算由?.5,还是在小数点后面。

LcdWriteCom(0x80);

LcdWriteData('+');

tp=temp;//因为数据处理有小数点所以将温度赋给一个浮点型变量 //如果温度是正的那么,那么正数的原码就是补码它本身 temp=tp*0.0625*100+0.5;

//留两个小数点就*100,+0.5是四舍五入,因为C语言浮点数转换为整型的时候把小数点

19

徐州工程学院单片机原理及应用课程设计

//后面的数自动去掉,不管是否大于0.5,而+0.5之后大于0.5的就是进1了,小于0.5的就 }

LCD1602显示程序文件: #include\

20

}

//算加上0.5,还是在小数点后面。

datas[0] = temp / 10000; datas[1] = temp % 10000 / 1000; datas[2] = temp % 1000 / 100; datas[3] = temp % 100 / 10; datas[4] = temp % 10;

LcdWriteCom(0x82); //写地址 80表示初始地址

LcdWriteData('0'+datas[0]); //百位

LcdWriteCom(0x83);

//写地址 80表示初始地址

LcdWriteData('0'+datas[1]); //十位

LcdWriteCom(0x84); //写地址 80表示初始地址

LcdWriteData('0'+datas[2]); //个位

LcdWriteCom(0x85); //写地址 80表示初始地址 //显示 ‘.’

LcdWriteData('.');

LcdWriteCom(0x86); //写地址 80表示初始地址

LcdWriteData('0'+datas[3]); //显示小数点

LcdWriteCom(0x87); //写地址 80表示初始地址

LcdWriteData('0'+datas[4]); //显示小数点

徐州工程学院单片机原理及应用课程设计

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

* 函 数 名 : Lcd1602_Delay1ms * 函数功能

: 延时函数,延时1ms

* 输 入 : c * 输 出 : 无

* 说 名 : 该函数是在12MHZ晶振下,12分频单片机的延时。

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

void Lcd1602_Delay1ms(uint c) //误差 0us {

uchar a,b;

for (; c>0; c--) { }

for (b=199;b>0;b--) {

for(a=1;a>0;a--); }

}

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

* 函 数 名 : LcdWriteCom * 函数功能

: 向LCD写入一个字节的命令

* 输 入 : com * 输 出 : 无

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

#ifndef LCD1602_4PINS //当没有定义这个LCD1602_4PINS时 void LcdWriteCom(uchar com) //写入命令

21


单片机课程设计报告 - 温度报警器 - 图文(5).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:圆度仪及圆柱度仪的概况1

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

马上注册会员

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