版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、基于单片机的低功耗温度记录仪设计方案附录 1:总体电路图:附录 2:单片机程序:#include #include #define uchar unsigned charbit Tflag;/温度正负标志sbit DQ=P37;/温度输入口sbit DIN=P07;/LED小数点控制uchar codeditab16=0x00,0x01,0x01,0x02,0x03,0x03,0x04,0x04,0x05,0x06,0x06,0x07,0x08,0x08,0x09,0x09;/温度小数部分用查表法unsigned char code dispcode=0x3f,0x06,0x5b,0x4f,0
2、x66,0x6d,0x7d,0x07,0x7f,0x6f,0x00,0x40;/共阴led段码表0x40负unsigned char dispbitcode=0xfe,0xfd,0xfb,0xf7,;uchar data temp_data2=0x00,0x00;/unsigned char dispbuf5=0,0,0,0,0;读出温度暂放void digitalshow(unsigned char a3,unsigned char a2,unsigned char a1,unsigned char a0)unsigned char i;dispbuf0=a0;dispbuf1=a1;dis
3、pbuf2=a2;dispbuf3=a3;for(i=0;i4;i+)P2=0xff;/关闭所有显示P0=dispcodedispbufi;P2=dispbitcodei;if(i=1)DIN=1;/*该程序为总线上只有一个器件*/ 毫秒延时 11.059 Mhzvoid dmsec (unsigned int count)unsigned int i;/ 1ms延时while (count-)for (i=0;i125;i+)void Delay(unsigned int num)/延时函数while( -num );/ 复位脉冲void tmreset (void)DQ=0;Delay(9
4、0);/精确延时大于480usDQ=1;Delay(4);/ 90,4可以小范围变化/ 存在脉冲void tmpre (void)while (DQ);while (DQ);Delay(4);/ 读一个位bit tmrbit (void)unsigned int i;bit dat;DQ = 0; i+;/ i+;大概1usDQ = 1; i+; i+;dat = DQ;Delay(8);return (dat);/ 读一个比特unsigned char tmrbyte (void)unsigned char i,j,dat;dat = 0;for (i=1;i=8;i+)j = tmrbit
5、 ();dat = (j 1);return (dat);/ 写一个比特void tmwbyte (unsigned char dat)unsigned int i;unsigned char j;bit testb;for (j=1;j 1;/从低位开始?if (testb)/ Write 1DQ=0;i+; i+;/先拉低/ 1usDQ=1;Delay(4);else/ Write 0DQ=0;Delay(4);/大一点没影响,但不能太大,写一个位在30us 内DQ=1;i+; i+;/再拉高/ds1820开始转换void tmstart (void)dmsec(1);tmreset ()
6、;tmpre ();dmsec (1);tmwbyte (0xcc);tmwbyte (0x44);/ skip rom/转换/ 读取温度read_temp()tmreset ();tmpre ();dmsec (1);tmwbyte (0xcc);/ skip romtmwbyte (0xbe);/转换temp_data0 = tmrbyte ();temp_data1= tmrbyte ();if(temp_data1 & 0x80)=0x80)/LSB低8位/MSB 高 8位/ 判断温度正负temp_data1=temp_data1;temp_data0=temp_data0+1;/ 负
7、温度处理( DS18B20的负温度是正的反码,即将它取反+1,就得到正的温度)Tflag=0;elseTflag=1;/* MAIN */void main (void)uchar last;uchar lsb,msb;uchar i;tmstart();dmsec(450);/初始化ds18b20while(1)tmstart();/ ds1820dmsec(2);read_temp(); /读取温度开始转换dispbuf4=temp_data0&0x0f;dispbuf0=ditabdispbuf4;dispbuf4=(temp_data0&0xf0)4)|(temp_data1&0x0f
8、)0;i-)if(Tflag=1)/正温if(dispbuf4126) if(dispbuf4100)digitalshow(10,dispbuf2,dispbuf1,dispbuf0); /温度小于100 度,则百位不显示elsemsb=msb%10;/温度大于 100 度时十位需要在除digitalshow(Tflag,dispbuf2,dispbuf1,dispbuf0); /10 取余温度大于100 度,百位显示为1else digitalshow(11,11,11,11); /温度大于125 度时显示 -elseif(dispbuf456)/负温大于 -55 度时正常显示digita
9、lshow(11,dispbuf2,dispbuf1,dispbuf0);elsedigitalshow(11,11,11,11);/负温小于 -55 度时显示为 -附录3PC机程序:Dim n As IntegerDim t As Integer定义全局变量Private Sub Command1_Click()Dim i As Integer单击温度设置按钮程序If Len(Trim(Text2.Text) 100 Or Val(Text2.Text) 0 Or Left(Right(Text2.Text, 2), 1) . ThenLabel3.Caption = 设定输入错误,不发送
10、ElseLabel3.Caption = Select Case Len(Trim(Text2.Text)Case 5Text8.Text = Trim(Text2.Text)Case 4Text8.Text = 0 & Trim(Text2.Text)Case 3Text8.Text = 00 & Trim(Text2.Text)End SelectMSComm1.Output = CTimer2.Enabled = TrueEnd IfEnd SubPrivate Sub Command2_Click()单击按钮执行数据采集或停止采集If Command2.Caption = 采集数据 T
11、henCommand2.Caption = 停止采集 Timer1.Enabled = TrueMSComm1.Output = AElseCommand2.Caption = 采集数据 Timer1.Enabled = FalseMSComm1.Output = BMSComm1.Output = BEnd IfEnd SubPrivate Sub Command4_Click()Text1.Text = Text4.Text = End Sub单击按钮清空数据Private Sub Command5_Click() If Command5.Caption = 单击按钮开关通信端口开通信端口
12、 ThenCommand5.Caption = 关通信端口 COM.Enabled = FalseCommand2.Enabled = TrueCommand1.Enabled = TrueText2.Enabled = TrueSelect Case COM.ListIndex指定端口号( COM)Case 0MSComm1.CommPort = 1Case 1MSComm1.CommPort = 2Case 2MSComm1.CommPort = 3Case 3MSComm1.CommPort = 4End SelectMSComm1.Settings = 9600,n,8,19600波特
13、,无校验, 8 位数据位, 1 位停止位MSComm1.InputMode = comInputModeText 接收文本数据MSComm1.InputLen = 0读出接收缓冲区的所有内容MSComm1.InBufferSize = 1024MSComm1.OutBufferSize = 1024MSComm1.RThreshold = 1每接收到 1 个字符,发生 1 次事件MSComm1.PortOpen = True打开串口ElseTimer1.Enabled = FalseMSComm1.Output = BMSComm1.Output = BCommand5.Caption = 开
14、通信端口 COM.Enabled = TrueMSComm1.PortOpen = FalseCommand2.Caption = 采集数据 Command2.Enabled = FalseCommand1.Enabled = FalseText2.Enabled = FalseEnd IfEnd SubPrivate Sub Command7_Click()单击按钮保存温度数据CommonDialog1.Action = 2Open CommonDialog1.FileName For Append As #1Write #1, NowWrite #1, Text4.TextClose #1
15、End SubPrivate Sub Form_Load()COM.AddItem COM1COM.AddItem COM2COM.AddItem COM3COM.AddItem COM4End SubPrivate Sub MSComm1_OnComm()Select Case MSComm1.CommEventCase comEvReceiveText1.Text = Text1.Text & MSComm1.InputCase ElseEnd SelectEnd Sub串口接收到数据时读出数据Private Sub Text1_Change() 对读出的数据进行处理 If (Len(Te
16、xt1.Text) Mod 4 = 0) And (Len(Text1.Text) 0) Then Text3.Text = Right$(Text1.Text, 4) & Text4.Text = Time & Chr$(6) & Chr$(6) & Chr$(6) & Text3.Text & & Text4.TextText7.Text = Time$n = n + 1End IfIf n = 100 Thenn = 0Text1.Text = End IfEnd SubPrivate Sub Text5_Change() Timer1.Interval = Val(Text5.Text
17、) * 1000 End Sub改变读数据的时间Private Sub Timer1_Timer()采集数据后进行绘图MSComm1.Output = ADim a As SingleDim a1 As StringDim a2 As StringDim a3 As StringDim k As IntegerStatic b(200) As IntegerText7.Text = TimeFor k = 1 To 199b(k) = b(k + 1)Next kb(200) = Val(Text3.Text)With MSChart1For i = 1 To 200a = Val(Mid(T
18、ext7.Text,1, 2) * 3600 + Val(Mid(Text7.Text,4,2) *60+Val(Mid(Text7.Text, 7, 2) - 200 * Val(Text5.Text) + i * Val(Text5.Text) + 1 If a 86400 Thena = a - 86400End IfIf a 3600 10 Thena1 = 0 & (a 3600)Elsea1 = Str(a 3600)End IfIf (a Mod 3600) 60 10 Thena2 = 0 & (a Mod 3600) 60)Elsea2 = (a Mod 3600) 60End IfIf (a Mod 3600) Mod 60) 10 Thena3 = 0 & (a Mod 3600) Mod 60)Elsea3 = (a Mod 3600) Mod 60)End If.Row = i.Data = b(i).RowLabel = a1 & : & a2 & : & a3Next iEnd WithEnd SubPrivate Sub Timer2_Timer()设置温度时间隔开发送数据的时间,以使If t = 0 ThenMSComm1.Output = Mid(Text8.Text, 1, 1)t = t
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 中药茶剂工安全理论测试考核试卷含答案
- 凹版印刷员班组协作竞赛考核试卷含答案
- 光学镜头装配调试工安全演练评优考核试卷含答案
- 脂肪酸酰化及酯化操作工标准化水平考核试卷含答案
- 2026年新科教版初中九年级科学下册第一单元生物遗传规律练习卷含答案
- 钽电解电容器赋能、被膜工岗前保密意识考核试卷含答案
- 玻璃灯工岗前安全宣教考核试卷含答案
- 钢琴共鸣盘制作工安全知识竞赛能力考核试卷含答案
- 肉品分级员班组考核考核试卷含答案
- 火锅料理师班组评比考核试卷含答案
- AI在药物研发中的应用
- 新人教版七至九年级英语单词表
- 中医病证诊断疗效
- 关键施工技术、工艺与工程项目实施的重点、难点和解决方案
- 2023年环境卫生(正高)考试历年难点与易错点考核试题3答案解析
- 50套普通话测试题与答案
- GB/T 4325.23-2013钼化学分析方法第23部分:氧量和氮量的测定惰气熔融红外吸收法-热导法
- GB/T 2970-2016厚钢板超声检测方法
- 中小学生励志主题班会课件《告诉你孩子:几年的放纵-换来的是一生卑微和坎坷》
- 022pet热灌装饮料生产工艺及品质控制
- 二年级上册语文课件-《登鹳雀楼》人教部编版 (共18张PPT)
评论
0/150
提交评论