预览加载中,请您耐心等待几秒...
1/10
2/10
3/10
4/10
5/10
6/10
7/10
8/10
9/10
10/10

亲,该文档总共12页,到这已经超出免费预览范围,如果喜欢就直接下载吧~

如果您无法下载资料,请参考说明:

1、部分资料下载需要金币,请确保您的账户上有足够的金币

2、已购买过的文档,再次下载不重复扣费

3、资料包下载后请先用软件解压,在使用对应软件打开

基于PIC单片机的实时温度控制系统 //实现的功能:数码管显示实时温度,支持负温度//芯片PIC16F877//XT:4MHZ//*********************************************************#include<pic.h>//包含单片机内部资源预定义#defineLVP0x3f39 //晶振:XT;代码:没有代码保护;上电延时定时器关闭;//低电压复位禁止;看门狗关闭;低电压编程禁止__CONFIG(XT&UNPROTECT&PWRTDIS&BORDIS&WDTDIS&LVP); #defineuchunsignedchar//给unsignedchar起别名uch#defineDQRA2//定义18B20数据端口#defineDQ_DIRTRISA2//定义18B20D口方向寄存器#defineDQ_HIGH()DQ_DIR=1//设置数据口为输入#defineDQ_LOW()DQ_DIR=0;DQ=0//设置数据口为输出 constunsignedcharledcode[12]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F,0x00,0x40};//不带小数点的共阴极数码管0123456789段码,正负符号位constunsignedcharledcode1[12]={0xBF,0x86,0xDB,0xCF,0xE6,0xED,0xFD,0x87,0xFF,0xEF,0x00,0x40};//带小数点的共阴极数码管0123456789段码,正负符号位 voidinit_port(void);voiddelay(charx,chary);voiddelay_1ms(void);voiddelay_ms(unsignedinttime);voidinterruptdealtime();voidtmint(void);voidtimetoseg(uchfh_temp,uchbai_temp,uchshi_temp,uchge_temp,uchsf_temp,uchbf_temp,uchqf_temp,uchwf_temp);voidbinary_temp(uchTL,signedcharTH);voidreset(void);voidwrite_byte(uchval);uchread_byte(void);voidget_temp(void); unsignedchardisplay_data[8];unsignedcharintcount=0;uchTLV=0;//采集到的温度高8位uchTHV=0;//采集到的温度低8位 uniontemp//定义一个联合体{intT;uchTV[2];}temp; signedcharTZ=0;//转换后的温度值整数部分,有符号位uchTX=0;//转换后的温度值小数部分 unsignedintwd;//转换后的温度值BCD码形式 unsignedcharfh;//符号位unsignedcharbai;//整数百位unsignedcharshi;//整数十位unsignedcharge;//整数个位unsignedcharshifen;//十分位unsignedcharbaifen;//百分位unsignedcharqianfen;//千分位unsignedcharwanfen;//万分位 //*********************************************************//主程序//*********************************************************voidmain(void){init_port();tmint();while(1){get_temp();timetoseg(fh,bai,shi,ge,shifen,baifen,qianfen,wanfen);}}//*********************************************************//端口初始化//PORTD作为数码管段驱动(高有效)//PORTE作为数码管位选择驱动(低有效)//*********************************************************voidinit_port(void){RBPU=0;//PORTB=0xFF;TRISB=0xFF;PORTD=0x00;//TRISC=0x00;//C口控制LED指示灯,设置成输出TRISD=0;//D口当作数码管段,设置成输出ADCON1=0x07;//使A口,E口全为数字I/O口TRISE=0x00