张飞基于单片机的温度报警器设计论文(初稿) - 图文(7)

2019-02-15 12:26

附录1 程序代码

#include //包含单片机寄存器的头文件 #include

#define uchar unsigned char #define uint unsigned int uint num;

static int num1=80; sbit cs=P3^5; sbit rd=P3^6; sbit wr=P3^7; sbit lcden=P1^2; sbit rw=P1^1; sbit lcdrs=P1^0; sbit K2=P3^1; sbit K3=P3^2; sbit K4=P3^3; sbit K5=P3^4;

sbit LED1=P1^4; //警情指示灯 sbit LED2=P1^3; //正常指示灯

sbit DQ=P1^5; //定义DS18B20总线I/O sbit fmq=P1^7;

uchar temp[]={0,0,0,0,0}; uchar temp1[]={0,0,0,0,0}; uchar temp2[5]; uchar temp3[4];

int shangxian=34; //上限报警温度,默认值为38 int xiaxian=6; //下限报警温度,默认值为5 uint a,b,c,d,e,f,g,h;

int ss,ss1,wendu,pinlv1=0;pinlv=0,baojing=0,shezhi=0,dianji=0,moshi=0;

/***************************************************** 函数功能:延时若干毫秒 入口参数:n

***************************************************/ void delayms(uint xms) {

uint a,b;

for(a=xms;a>0;a--) for(b=110;b>0;b--); }

void Delay(uint i) {

while( i-- ); }

28

/***************************************************** 液晶写命令函数

*****************************************************/ void write_com(uchar com) {

lcdrs=0; P0=com;

delayms(5); lcden=1; delayms(5); lcden=0; }

/***************************************************** 液晶写数据函数

*****************************************************/ void write_data(uchar date) {

lcdrs=1; P0=date; delayms(5); lcden=1; delayms(5); lcden=0; }

/***************************************************** 液晶初始化函数

*****************************************************/ void init() {

lcden=0;

write_com(0x38); //液晶初始化 write_com(0x0c); write_com(0x06); write_com(0x01); write_com(0x80); write_com(0x80); }

/***************************************************** 函数功能:按键控制子程序

******************************************************/ void key() { K2=1; if(K2==0)

29

{ }

delayms(5); if(K2==0) {moshi++;

if(moshi==2) moshi=0; dianji=0; while(!K2); }

K3=1;

if(K3==0) {

delayms(5); if(K3==0) { shezhi++;

if(shezhi==4) shezhi=0; while(!K3); } }

if(shezhi>0) {K4=1; if(K4==0) {

delayms(5); if(K4==0)

{ switch(shezhi)

{case 1: num1++; if(num1>=20000) num1=20000; break; case 2: shangxian++; if(shangxian>=100) shangxian=99; break; case 3: xiaxian++; if(shangxian<=xiaxian) xiaxian=shangxian-1; break; }

while(!K4); } } K5=1; if(K5==0) {

delayms(5); if(K5==0)

{switch(shezhi)

30

{case 1: num1--; if(num1<=0) num1=0; break;

case 2: shangxian--; if(shangxian<=xiaxian) shangxian=xiaxian+1; break;

case 3: xiaxian--; if(xiaxian<=0) xiaxian=0; break; } while(!K5); } } } }

/***************************************************** 函数功能:AD0804将模拟信号转换成数字信号

***************************************************/ void adstart() {

cs=0; _nop_(); wr=0; _nop_(); wr=1; _nop_(); cs=1; }

uchar A_D() {

uchar a; P2=0xff; cs=0; _nop_(); rd=0; _nop_(); a=P2; _nop_(); rd=1; _nop_(); cs=1; _nop_(); wr=0; return a; }

/*****初始化DS18B20*****/ void Init_DS18B20(void) {

31

unsigned char x=0; DQ=1;

Delay(8); //稍做延时

DQ=0; //单片机将DQ拉低 Delay(80); //精确延时,大于480us DQ=1; //拉高总线 Delay(14);

x=DQ; //稍做延时后,如果x=0则初始化成功,x=1则初始化失败 Delay(20); }

/*****读一个字节*****/

unsigned char ReadOneChar(void) {

unsigned char i=0; unsigned char dat=0; for (i=8;i>0;i--) {

DQ=0; // 给脉冲信号 dat>>=1;

DQ=1; // 给脉冲信号 if(DQ) dat|=0x80; Delay(4); }

return(dat); }

/*****写一个字节*****/

void WriteOneChar(unsigned char dat) {

unsigned char i=0; for (i=8; i>0; i--) {

DQ=0;

DQ=dat&0x01; Delay(5); DQ=1; dat>>=1; } }

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

Init_DS18B20();

WriteOneChar(0xCC); //跳过读序号列号的操作

32


张飞基于单片机的温度报警器设计论文(初稿) - 图文(7).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:北京外国语学院网络教育国际商务谈判 01次作业(第1-4单元)答题

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

马上注册会员

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