毕业设计 基于单片机的温度采集控制系统45(8)

2019-06-05 14:52

河南理工大学毕业论文 第 36 页 共 52 页

系统源程序

#include #include

#define wlcdcom XBYTE[0xf8ff] #define rlcdcom XBYTE[0xfcff] #define wlcddata XBYTE[0xfaff] #define rlcddata XBYTE[0xfeff]

typedef unsigned char byte; typedef unsigned int word;

unsigned char code tab0[]={0,0,1,1,2,3,3,4,5,5,6,6,7,8,8,9};

unsigned char code tab1[]={'T','h','e',' ','p','r','o','g','r','a','m','m','e',' ','i','s',0x00}; unsigned char code tab2[]={'d','e','s','i','g','n','e','d',' ','b','y',' ','h','i','f','i',0x00}; unsigned char code tab3[]={'0','1','2','3','4','5','6','7','8','9'};

unsigned char code tab4[16][4]={{'0','0','0','0'},{'0','6','2','5'},{'1','2','5','0'},{'1','8','7','5'}, {'2','5','0','0'},{'3','1','2','5'},{'3','7','5','0'},{'4','3','7','5'},

{'5','0','0','0'},{'5','6','2','5'},{'6','2','5','0'},{'6','8','7','5'}, {'7','5','0','0'},{'8','1','2','5'},{'8','7','5','0'},{'9','3','7','5'}};

char

Unsigned

temp[9],time[9],high[7]={'H','T','0','0','.','0',0x00},low[7]={'L','T','0','0','.','0',0x00}; unsigned char h[3],l[3],nonce_t[3]; sbit busy=ACC^7; sbit DQ=P3^2;

sbit time_set=P1^0; sbit temp_set=P1^1; sbit inc=P1^2; sbit dec=P1^3; sbit bell=P1^6; sbit fan=P1^4; sbit heater=P1^5; sbit l_led=P2^6; sbit h_led=P2^7;

河南理工大学毕业论文 第 37 页 共 52 页

unsigned int b,c;

unsigned char t,tf,set_coun,temp_coun; unsigned char hour,minute,second; bit time_flag,set_flag,temp_flag; bit t_c,bell_flag,ring_flag; bit flag1;flag2;

//查询忙标志位// void wait(void) { do

ACC=rlcdcom;

while(busy); }

//LCD初始化//

void lcd_init(void) { wlcdcom=0x38; wait();

wlcdcom=0x06; wait();

wlcdcom=0x0c; wait();

wlcdcom=0x01; wait(); }

//LCD驱动

void lcd_display(c_a,pos) unsigned char pos; unsigned char *c_a; { wlcdcom=pos; wait();

while(*c_a!=0x00) { wlcddata=*c_a;

河南理工大学毕业论文 第 38 页 共 52 页

wait(); } //延时

void delay(word useconds) {

for(;useconds>0;useconds--); } //复位

byte ow_reset(void) {

byte presence; DQ = 0; delay(29); DQ = 1; delay(3); presence = DQ; delay(25); return(presence); }

//从 1-wire 总线上读取一个字节 byte read_byte(void) { byte i; byte v_alue = 0; for (i=8;i>0;i--) {

v_alue>>=1; DQ = 0; DQ = 1;

c_a++; }

河南理工大学毕业论文 第 39 页 共 52 页

delay(1);

if(DQ) v_alue|=0x80; delay(6); }

return(v_alue); }

//向 1-WIRE 总线上写一个字节 void write_byte(char val) { byte i;

for (i=8; i>0; i--) { DQ = 0; DQ = val&0x01; delay(5); DQ = 1; val=val/2; } delay(5); }

//读取温度

unsigned int Read_Temperature(void) { union{ byte c[2]; unsigned int x; }temp; ow_reset(); write_byte(0xCC); write_byte(0xBE); temp.c[1]=read_byte(); temp.c[0]=read_byte(); ow_reset();

河南理工大学毕业论文 第 40 页 共 52 页

write_byte(0xCC); write_byte(0x44); return temp.x; }

//BCD码转换

void bcd_transform(void) { unsigned char b,c,n; unsigned int; unsigned int tm,a; tm=Read_Temperature(); a=tm>>4;

c=(unsigned char)a&0x00ff; n=c/100; b=c0; temp[0]=tab3[n]; n=b/10; temp[1]=tab3[n]; nonce_t[0]=n; n=b; temp[2]=tab3[n]; nonce_t[1]=n; temp[3]='.';

a=(unsigned char)tm&0x000f; for(b=0;b<=4;b++) { temp[b+4]=tab4[a][b]; }

nonce_t[2]=tab0[a]; temp[8]=0x00; }

//定时器0中断服务程序 void time0() interrupt 1 using 1 { TH0=0x3c; TL0=0xa8;

//整数部分 //小数部分


毕业设计 基于单片机的温度采集控制系统45(8).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:九年义务教育课本二年级第二学期数学教参

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

马上注册会员

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