for(y=0;y<255;y++)
;
}
bitReadTempFlag;
unsignedcharcodedofly_DuanMa[10]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};//显示段码值0~9
unsignedcharcodedofly_WeiMa[]={0xef,0xdf,0xbf,0x7f};//分别对应相应的数码管点亮,即位码
unsignedcharTempData[8];//存储显示值的全局变量
voidDisplay(unsignedcharFirstBit,unsignedcharNum);//数码管显示函数
voidInit_Timer0(void);//定时器初始化
voidmain(void)
{
unsignedintTempH,TempL,temp;
Init_Timer0();
while
(1)//主循环
{
if(ReadTempFlag==1)
{
ReadTempFlag=0;
temp=ReadTemperature();
TempH=temp>>4;
TempL=temp&0x0F;
TempL=TempL*6/10;//小数近似处理
if(TempH>OVERTEMP)//如果超温则提示
{
ET1=1;
ET0=0;
DataPort=0xff;
wx=0xff;
delay(100);
ET0=1;
}
else
{
ET1=0;ET0=1;
}
if(TempH/100==0)
TempData[0]=0;
else
TempData[0]=dofly_DuanMa[TempH/100];//十位温度
if((TempH/100==0)&&((TempH%100)/10==0))//消隐
TempData[0]=0;
else
TempData[0]=dofly_DuanMa[(TempH%100)/10];//十位温度
TempData[1]=dofly_DuanMa[(TempH%100)%10]&0x7f;//个位温度,带小数点
TempData[2]=dofly_DuanMa[TempL];
TempData[3]=0xc6;//显示C符号
}
}
}
voidDisplay(unsignedcharFirstBit,unsignedcharNum)
{
staticunsignedchari=0;
DataPort=0;
wx=dofly_WeiMa[i+FirstBit];//取位码
;
DataPort=TempData[i];//取显示数据,段码
i++;
if(i==Num)
i=0;
}
voidInit_Timer0(void)
{
TMOD=0x11;
EA=1;//总中断打开
ET0=1;//定时器中断打开
TR0=1;
IT0=1;
ET1=0;//定时器中断打开
TR1=1;//定时器开关打开
}
voidTimer0_isr(void)interrupt1
{
staticunsignedintnum;
TH0=(65536-2000)/256;//重新赋值2ms
TL0=(65536-2000)%256;
Display(0,4);//调用数码管扫描
num++;
if(num==300)
{
num=0;
ReadTempFlag=1;//读标志位置1
}
}
voidTimer1_isr(void)interrupt3
{
TH1=(65536-800)/256;//重新赋值2ms
TL1=(65536-800)%256;;
spk=!
spk;
}
#include"delay.h"
/*------------------------------------------------
uS延时函数,含有输入参数unsignedchart,无返回值
unsignedchar是定义无符号字符变量,其值的范围是
0~255这里使用晶振12M,精确延时请使用汇编,大致延时
长度如下T=tx2+5uS
------------------------------------------------*/
voidDelayUs2x(unsignedchart)
{
while(--t);
}
/*------------------------------------------------
mS延时函数,含有输入参数unsignedchart,无返回值
unsignedchar是定义无符号字符变量,其值的范围是
0~255这里使用晶振12M,精确延时请使用汇编
------------------------------------------------*/
voidDelayMs(unsignedchart)
{
while(t--)
{
//大致延时1mS
DelayUs2x(245);
DelayUs2x(245);
}
}
#include"delay.h"
#include"18b20.h"
/*------------------------------------------------
18b20初始化
------------------------------------------------*/
bitInit_DS18B20(void)
{
bitdat=0;
DQ=1;//DQ复位
DelayUs2x(5);//稍做延时
DQ=0;//单片机将DQ拉低
DelayUs2x(200);//精确延时大于480us小于960us
DelayUs2x(200);
DQ=1;//拉高总线
DelayUs2x(50);//15~60us后接收60-240us的存在脉冲
dat=DQ;//如果x=0则初始化成功,x=1则初始化失败
DelayUs2x(25);//稍作延时返回
returndat;
}
/*------------------------------------------------
读取一个字节
------------------------------------------------*/
unsignedcharReadOneChar(void)
{
unsignedchari=0;
unsignedchardat=0;
for(i=8;i>0;i--)
{
DQ=0;//给脉冲信号
dat>>=1;
DQ=1;//给脉冲信号
if(DQ)
dat|=0x80;
DelayUs2x(25);
}
return(dat);
}
/*------------------------------------------------
写入一个字节
------------------------------------------------*/
voidWriteOneChar(unsignedchardat)
{
unsignedchari=0;
for(i=8;i>0;i--)
{
DQ=0;
DQ=dat&0x01;
DelayUs2x(25);
DQ=1;
dat>>=1;
}
DelayUs2x(25);
}
/*------------------------------------------------
读取温度
------------------------------------------------*/
unsignedintReadTemperature(void)
{
unsignedchara=0;
unsignedintb=0;
unsignedintt=0;
Init_DS18B20();
WriteOneChar(0xCC);//跳过读序号列号的操作
WriteOneChar(0x44);//启动温度转换
DelayMs(10);
Init_DS18B20();
WriteOneChar(0xCC);//跳过读序号列号的操作
WriteOneChar(0xBE);//读取温度寄存器等(共可读9个寄存器)前两个就是温度
a=ReadOneChar();//低位
b=ReadOneChar();//高位
b<<=8;
t=a+b;
return(t);
}
实习收获
在这次生产实习中,我感受颇深,收获颇多,使我见到了很多从课本上没有的元件,增长了实际操作经验,也是第一次把学到东西与现实联系起来。
不仅锻炼了动手能力,也对自己的专业有了更深层的了解,在焊接试验板时由于元件的细小,需要调整好几次才能放对位置,这使我锻炼了自己的耐心,我很珍惜学校为我们安排实习这一理论与现实连接的重要环节。
在实习中,我锻炼了自己动手技巧,提高了自己解决问题的能力,还培养了自己对科学和工作一丝不苟的态度,对以后的学习、工作和生活都大有裨益。
实习使我的理论落实到了实际中,弥补了学习上的不足,今后的学习生活中要更加努力,填补知识上的空白。
学生:
日期:
2011-6-22至2011-7-1