多点温度检测系统实验

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

多点温度检测系统实验(设计性实验) 一、实验目的

通过仿真搭建和实物搭建相结合,完成多点温度检测单片机系统设计。

二、实验内容

1、方案一: 用8279芯片为键盘和数码显示控制芯片,完成灵活的设置与显示设计,建立基本的串行口(MAX232接口),普通的I/0口,A/D转换口功能,采样多个点,并按键显示不同的通道采样数据。方案二: 以8255或8155芯片为键盘显示控制芯片,建立基本的串行口(MAX232楼口),普通的I/0日,VD转换转换口功能,采样多个点,并按键显示不同的通道采样数据。

2、用Proteus仿真软件搭建仿真硬件电路图。验证编制软件。

3、用prote199s布原理图、建PCB板图。

4、实物器件焊接搭建。

三、硬件设计

硬件元件参考清单

单片机AT89C5 1 瓷片电容CAP30PF 晶振CRYSTAL12MHZ 电解电容CAP-ELEC 电阻RES 按钮BUTTON 发光数码管LED 插针8*2

开关SWTTCH 排阳RES PACK-8 8*2排座单排20*1插针

DS18B20 8255芯片热敏电阻74LS 138芯片

74LS373 74LS245 DAC0809 232芯片以DS18B20为传感器、AT89C51单片机为控制核心组成多点温度测试系统。

四、实验程序以及系统框图:

(一)系统框图:

(二)实验程序:

#include

#include

#include

#define uint unsigned int

#define uchar unsigned char

uchar temp_value; //温度值

uchar TempBuffer[7];

void show_time(); //液晶显示程序

uchar temp_value1; //温度值

uchar TempBuffer1[7];

char xiaoshu=0;

char xiaoshu1=0;

void show_time1();

/***********1602液晶显示部分子程序****************/

char done,count,temp,flag,up_flag,down_flag;

//Port Definitions

sbit LcdRs = P2^0;

sbit LcdRw = P2^1;

sbit LcdEn = P2^2;

sfr DBPort = 0x80; //P0=0x80,P1=0x90,P2=0xA0,P3=0xB0.数据端口sbit DQ = P1^7; //温度传送数据IO口

sbit DQ1=P1^6;

//内部等待函数

unsigned char LCD_Wait(void){

LcdRs=0;

LcdRw=1; _nop_();

LcdEn=1; _nop_();

LcdEn=0;

return DBPort;

}

//向LCD写入命令或数据

#define LCD_COMMAND 0 // Command

#define LCD_DATA 1 // Data

#define LCD_CLEAR_SCREEN 0x01 // 清屏

#define LCD_HOMING 0x02 // 光标返回原点void LCD_Write(bit style, unsigned char input){

LcdEn=0;

LcdRs=style;

LcdRw=0; _nop_();

DBPort=input; _nop_();

LcdEn=1; _nop_();

LcdEn=0; _nop_();

LCD_Wait();

}

//设置显示模式

#define LCD_SHOW 0x04 //显示开

#define LCD_HIDE 0x00 //显示关

#define LCD_CURSOR 0x02 //显示光标

#define LCD_NO_CURSOR 0x00 //无光标

#define LCD_FLASH 0x01 //光标闪动

#define LCD_NO_FLASH 0x00 //光标不闪动

void LCD_SetDisplay(unsigned char DisplayMode){

LCD_Write(LCD_COMMAND, 0x08|DisplayMode);

}

//设置输入模式

#define LCD_AC_UP 0x02

#define LCD_AC_DOWN 0x00 // default

#define LCD_MOVE 0x01 // 画面可平移

#define LCD_NO_MOVE 0x00 //default

void LCD_SetInput(unsigned char InputMode){

LCD_Write(LCD_COMMAND, 0x04|InputMode);

}

//初始化LCD

void LCD_Initial(){

LcdEn=0;

LCD_Write(LCD_COMMAND,0x38); //8位数据端口,2行显示,5*7点阵LCD_Write(LCD_COMMAND,0x38);

LCD_SetDisplay(LCD_SHOW|LCD_NO_CURSOR); //开启显示, 无光标

LCD_Write(LCD_COMMAND,LCD_CLEAR_SCREEN); //清屏

LCD_SetInput(LCD_AC_UP|LCD_NO_MOVE); //AC递增, 画面不动

}

//液晶字符输入的位置

void GotoXY(unsigned char x, unsigned char y){

if(y==0)

LCD_Write(LCD_COMMAND,0x80|x);

if(y==1)

LCD_Write(LCD_COMMAND,0x80|(x-0x40));

}

//将字符输出到液晶显示

void Print(unsigned char *str){

while(*str!='\0'){

LCD_Write(LCD_DATA,*str);

str++;

}

}

/************************ds18b20子程序*************************/

/***********ds18b20延迟子函数(晶振12MHz )*******/

void delay_18B20(unsigned int i){

while(i--);

}

/***************ds18b20初始化函数*****************/

void Init_DS18B20(void) {

unsigned char x=0;

DQ = 1; //DQ复位

delay_18B20(8); //稍做延时

DQ = 0; //单片机将DQ拉低

delay_18B20(80); //精确延时大于480us

DQ = 1; //拉高总线

delay_18B20(14);

x=DQ; //稍做延时后如果x=0则初始化成功x=1则初始化失败

delay_18B20(20);

}

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

unsigned char ReadOneChar(void){

uchar i=0;

uchar dat = 0;

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

DQ = 0; // 给脉冲信号

相关文档
最新文档