单片机温控系统(8)

2019-01-26 16:19

毕业论文设计

{ unsigned char i; epr_sd=1; epr_sd=1; epr_sd=1; for(i=0;i<8;i++) {

epr_sc=1; epr_sc=1;

temp1=temp1<<1; temp1_0=epr_sd; epr_sc=0; epr_sc=0; epr_sc=0;

}

return(temp1); }

///////////////24c256 waddr void waddr() {

start();

wrby(0xa0); ask();}

///////////////24c256 raddr unsigned char raddr() {

start();

第 36 页 共 48 页

毕业论文设计

wrby(0xa1); ask(); temp1=rdby(); noack(); stop(); return(temp1); }

void w16addr(unsigned int x) {

union {

unsigned int int_type; unsigned char char_type[1]; }u_int_char;

unsigned m,n;

u_int_char.int_type=x; //将x的高位赋给m,低位赋给n m=u_int_char.char_type[0]; n=u_int_char.char_type[1];

wrby(m ); ask(); wrby(n ); ask(); }

/////////////////延时 void d5ms() {

unsigned char a, b;

第 37 页 共 48 页

毕业论文设计

for (a=0;a<=15;a++) {

for (b=0;b<0x7f;b++) {;} } }

//24c256 读出一字节

unsigned char epr_read(unsigned int x) {

bit ea; ea=EA;

EA=0; //关中断

EPR_WEN; d5ms();

waddr(); w16addr(x); temp1=raddr(); EA=ea;//开中断 return(temp1); }

//24c256 写入一字节

void epr_write(unsigned int f,unsigned char x) {

bit ea; ea=EA;

EA=0 ; //关中断

d5ms();

waddr(); w16addr(f); wrby(x);

第 38 页 共 48 页

毕业论文设计

ask(); stop(); d5ms(); }

//存储器驱动程序结束 汇编部分:

TEMPERATURE_L DATA 31H ;DS18B20低8位Buffer TEMPERATURE_H DATA 30H ;DS18B20高8位Buffer

TEMPERATURE_HC DATA 32H ;计算后的百位和十位的BCD码存放

;BUFFER

TEMPERATURE_LC DATA 33H ;计算后的个位和小数位的BCD码存放

TEMPERATURE_ZH DATA 34H ; 计算后十位和个位HEX码的存放BUFFER

DIS_BUF_X DATA 35H ;数码管小数位Buffer

DIS_BUF_G DATA 36H ;数码管个位Buffer DIS_BUF_S DATA 37H ;数码管十位Buffer DIS_BUF_B DATA 38H ;数码管百位Buffer

KEY_BUF_G DATA 39H ;键盘输入后,的个位值 KEY_BUF_S DATA 49H ;键盘输入后,的十位值 KEY_BUF_B DATA 41H ;键盘输入后,的百位值 K_UP EQU P1.1 ;上调按钮 K_DOWN EQU P1.2 ;下调按钮

K_ENTER EQU P1.0 ;输入数据确认按钮

P_DS18B20 EQU P3.0 ;读取DS18B20的输入端口 P_SWITCH EQU P3.1 ;可控硅控制

FLAG EQU 20H.0 ;标志位,确定是否存在DS18B20 ENTER_FLAG EQU 20H.1 ;键盘输入的标志位, ORG 0000H LJMP MAIN ORG 0100H

MAIN: MOV SP,#60H ;初始化

MOV KEY_BUF_G,#00H ;由于KEY_BUF是由用户输入的,所以先赋值初始化 MOV KEY_BUF_S,#00H MOV KEY_BUF_B,#00H

NEXT:

LCALL READ_TEMP ;调用读温度子程序

JB FLAG,NORMAL ;判断是否有DS18B20的存在 CALL ERR ;不存在时显示错误信息 AJMP NEXT

NORMAL: LCALL DATA_DEA ;处理从DS18B20得到的数据 LCALL SET_DIS_BUF ;赋值给DIS_BUF_X,G,S,B

第 39 页 共 48 页

EA=ea; //开中断

毕业论文设计

LCALL DISPLAY ;调用数码管显示子程序 LCALL SCAN_KEY ;扫描键盘 LCALL SWITCH ;处理可控硅 AJMP NEXT

;程序名称:ERR

;功能:程序出错处理,显示四个8,即8888 ;入口参数:无

;出口参数:DIS_BUF_X,DIS_BUF_G, DIS_BUF_S, DIS_BUF_B

ERR: MOV DIS_BUF_X,#08H ;如果没有找到DS18B20,那么就显示错误,错误

;显示为888

MOV DIS_BUF_G,#08H MOV DIS_BUF_S,#08H MOV DIS_BUF_B,#08H LCALL DISPLAY RET

;程序名称:DATA_DEAL ;功能:处理采集后的的数据 ;入口参数:TEMPERATURE_L

;出口参数:DIS_BUF_G, DIS_BUF_S, DIS_BUF_ DATA_DEAL:

MOV A,TEMPERATURE_H ;判温度是否零下 ANL A,#80H

JZ TEMPC1 ;A为0,说明是正数,如果是负数,则

;对低8为进行补码处理

CLR C

MOV A,TEMPERATURE_L ;二进制数求补(双字节) CPL A ;取反加1 ADD A,#01H

MOV TEMPERATURE_L,A MOV A,TEMPERATURE_H CPL A

ADDC A,#00H

MOV TEMPERATURE_H,A ;写回TEMPERATURE_H MOV TEMPERATURE_HC,#0BH SJMP TEMPC11

TEMPC1: MOV TEMPERATURE_HC,#0AH TEMPC11: MOV A,TEMPERATURE_HC SWAP A

MOV TEMPERATURE_HC,A MOV A,TEMPERATURE_L ANL A,#0FH

MOV DPTR,#TEMPDOTTAB MOVC A,@A+DPTR ;查表

MOV TEMPERATURE_LC,A ;TEMPERATURE_LC LOW=小数部分 BCD MOV DIS_BUF_X,A ;小数位的BCD码送入显示buffer中

第 40 页 共 48 页


单片机温控系统(8).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:毕业论文(设计)格式样本- 广东金融学院

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

马上注册会员

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