版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、端口引脚第二功能RXD (串行输入口)TXD(串行输出口) (外部中断0)(外部中断1)T0(定时器0)T1(定时器1)(外部数据存储器写选通)(外部数据存储器都选通)名 称符 号标 准 值单 位MINTYPEMAX电路电源VDD - VSSVLCD驱动电压VDD - VEEV输入电压VINV静电电压-100V工作温度-20+70°C储存温度-30+80°C名 称符 号测 试 条 件标 准 值单位MINTYPEMAX输入高电平VIH-VDDV输入低电平VIL-V输出高电平VOH-V输出低电平VOL-V工作电流IDDmA液晶驱动电压VDD- VEETa = 0°CV
2、Ta = 25°CTa = 50°C项 目符 号测试条件标 准 值单位MINTYPEMAX允许时间周期TCYCE1000ns允许脉冲宽度,高电平PWEH450-ns允许上升和下降时间tEr tEf-25ns地址建立时间tAS140-ns数据延迟时间tDDR-320ns数据建立时间tDSW195-ns数据保持时间tH10-nsDATA HOLD TIMEtDHR20-ns地址保持时间tAH10-ns引 线 号符 号名 称功 能1Vss接地0V2VDD电路电源5V±10%3VEE液晶驱动电压5V电压差4RS寄存器选择信号H:数据寄存器 L:指令寄存器5R/W读/写信号
3、H:读 L:写6E片选信号下降沿触发,锁存数据7|14DB0|DB7数据线数据传输RSR/W操 作00指令寄存器(IR)写入01忙标志和地址计数器读出10数据寄存器(DR)写入11数据寄存器读出 显 示 位 序 号1 2 3 4 5 40 DD RAM 地 址(HEX)第 一 行00 01 02 03 04 . 27第 二 行40 41 42 43 44 . 67#include<reg51.h>#include<intrins.h>#include<math.h>#define uchar unsigned char#define uint unsigne
4、d int#define S_RST DS_RST=1#define C_RST DS_RST=0#define S_CLK DS_CLK=1#define C_CLK DS_CLK=0#define Write_Disable RW_DS1302(0x8e,0x80) /写保护#define Write_Enable RW_DS1302(0x8e,0x00) /允许写入sbit SET = P15; /设置按键sbit ADD = P14; /调整加sbit DEC = P16; /调整减#define RdefineT
5、1 TH1=0;TL1=0;TR1=0;a=0; /初始化超时检测/#define Delay2us() _nop_();_nop_(); /延时2us,每nop 1us/#define Delay8us() _nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();#define ReDetectTime 20 /设置重复检测次次数,超出次数则超时/ds18b20命令#define
6、 SkipROM 0xCC#define MatchROM 0x55#define ReadROM 0x33#define SearchROM 0xF0#define
7、AlarmSearch 0xEC#define Convert 0x44 /启动温度转换#define WriteScr 0x4E#define ReadScr 0xBE#define CopyScr
8、160; 0x48#define RecallEE 0xB8#define ReadPower 0xB4#define md collect_time0&0x0f#define mg (collect_time0&0x70)/16#define
9、160; fd collect_time1&0x0f#define fg (collect_time1&0x70)/16#define sd collect_time2&0x0f#define sg (collect_time2&0x30)/16sbit DS_RST = P12;
10、; /DS复位端sbit DS_CLK = P10; /SCLK端sbit DS_IO = P11; /IO端sbit DS18B20 = P13; /温度传感器接口bit keyboard,flash,STA=1;uchar choose,a; uchar collect_time3=0x45,0x23,0x11;/定义变量秒分时uchar collect_temperature2 = 0;uchar num10 = 0x7e,0x48,0x3d,0x6d,0x4b,0x6
11、7,0x77,0x4c,0x7f,0x6f; /七段数码管显示的段码uchar display8 = 0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08;void delay(uint i)uint k;while(i-) for(k=0;k<120;k+);void Dat_Int(void)/数据初始化P0=0xff;P1=0xff;P2=0xff;choose=0;flash=1;void Time01_Int(void)TMOD = 0x12; /定时器0为8位自动重载定时采样,定
12、时器1为16位超时检测处理TCON = 0x00;TH0 = 0x60;TL0 = 0x60;TR0 = 1;IE = 0x0a; /允许定时器0、1中断IP = 0x00;/* &
13、#160; * DS18B20温度传感器程序段
14、*
15、; */*11微秒延时函数*/void delayus(uint t)for(;t>0;t-);/*18B20复位函数*/void ow_reset(void)char presence=1;while(presence)while(presence)DS18B20 = 1;_nop_();_nop_();DS18B20 = 0;delayus(50); / 550usDS18B20 = 1; delayus(6); / 66uspresence=DS18B20; / presence=0继续下一步 delayus(45);
16、160; /延时500uspresence = DS18B20;DS18B20 = 1; /*18B20写命令函数*/向 1-WIRE 总线上写一个字节void write_byte(uchar val)uchar i;for (i=8; i>0; i-) /DS18B20 = 1;_nop_();_nop_(); DS18B20 = 0;_nop_();_nop_();_nop_();_nop_();_nop_();/5usDS18B20 = val&0x01; /最低位移出delayus(6)
17、; /66usval=val/2; /右移一位DS18B20 = 1;delayus(1); /*18B20读1个字节函数*/从总线上读取一个字节uchar read_byte(void)uchar i;uchar value = 0;for (i=8;i>0;i-)DS18B20 = 1;_nop_();_nop_();value>>=1;DS18B
18、20 = 0; /_nop_();_nop_();_nop_();_nop_(); /4usDS18B20 = 1;_nop_();_nop_();_nop_();_nop_(); /4us if(DS18B20)value|=0x80;delayus(6); /66usDS18B20
19、= 1;return(value);/*读出温度函数*/void Ds18b20_ReadEE(void)ow_reset();write_byte(SkipROM); / Skip ROMwrite_byte(Convert); / 发转换命令ow_reset(); /总线复位write_byte(SkipROM); / 发Skip ROM命令write_byte(ReadScr); / 发读命令collect_temperature0=read_byte(); /温度低8位collect_temperature1=re
20、ad_byte(); /温度高8位/*
21、; * DS1302时钟芯片程序段 *
22、; */void DS1302_InputByte(uchar byte
23、) /往DS1302写入1Byte数据 uchar i;uchar temp;temp = byte; for(i=8; i>0; i-) DS_IO = temp&0x01; S_CLK; C_CLK; temp = temp >> 1; uchar DS1302_OutputByte(void) /从DS1302读取1Byte数据 uchar i;uchar temp=0
24、;for(i=0; i<8;i+) C_CLK; if(DS_IO!=0) temp|=(1<<i); S_CLK; return(temp); void RW_DS1302(uchar reg, uchar byte)/向DS1302寄存器写数据C_RST;C_CLK;S_RST;DS1302_InputByte(reg); DS1302_InputByte(byte);S_CLK;C_RST; uchar Read_DS1302(uchar reg)/从DS1302
25、寄存器读数据uchar byte; C_RST; C_CLK; S_RST;DS1302_InputByte(reg);byte = DS1302_OutputByte(); S_CLK; C_RST;return(byte);void GetTime_DS1302(uchar *ucCurtime) /读取DS1302当前时间 ucCurtime0 = Read_DS1302(0
26、x81);/格式为: 秒 分 时ucCurtime1 = Read_DS1302(0x83);ucCurtime2 = Read_DS1302(0x85);void Set_Time(uchar *receive) /写时间Write_Enable; /控制命令,允许写操作RW_DS1302(0x80,receive0);RW_DS1302(0x82,receive1);RW_DS1302(0x84,receive2);Write_Disable; / 控制命令,写保护 /*
27、 *
28、0; 数码管显示程序段 *
29、; */void deal(void)/送显前的数据处理uint timer2;uint lstemp;timer2+;if(STA) GetTime_DS1302(c
30、ollect_time);if(flash)/用于闪动效果的控制的display0 = numsg;display1 = numsd;display2 = numfg;display3 = numfd;display4 = nummg;display5 = nummd;elseswitch(choose)case 1:display0=0;break;case 2:display1=0;break;case 3:display2=0;break;case 4:display3=0;break;case 5:display4=0;break;case 6:display5=0;break;if(
31、timer2=3000)/间断性获取温度timer2=0;if(STA)TR0=0;Ds18b20_ReadEE();TR0=1;if(collect_temperature1>127)collect_temperature0=255-collect_temperature0; collect_temperature1=255-collect_temperature1; lstemp=(collect_temperature0)>>4)|(collect_temperature1)<<4);display6 = n
32、um(uchar)(lstemp)/10);display7 = num(uchar)(lstemp)%10); /* &
33、#160; * 按键控制程序段
34、60; * &
35、#160; */void Scan(void)if(SET=0&&keyboard=1) /检测设置键有无按下,并进行相应操作 if(SET=0&&keyboard=1) RdefineT1; /超时检测初始化 choose+; while(SET=0); if(choose=7)
36、; TR0=0; Set_Time(collect_time); TR0=1; STA=1; /设置完毕,重新开始采集时间 choose=0; if(choose) /只有在时间调整时,加减按键才有作用 if(ADD=0&&keyboard=1) /检测加调整键有无按下,并进行相应操作
37、0; if(ADD=0&&keyboard=1) RdefineT1; /超时检测初始化a=0TR0=0; switch (choose) case 1 :if(sg=2) collect_time2 = collect_time2&0x0f; else collect_
38、time2+=16; break; case 2 :if(sg<2)&&(sd=9) collect_time2 &= 0x30; if(sg>=2)&&(sd=3) collect_time2 &= 0x30;
39、160; else collect_time2+; break; case 3: if(fg=5) collect_time1 &= 0x0f; else collect_time1+=16; break; case 4: if(fd=9)
40、160; collect_time1 &= 0xf0; else collect_time1+; break; case 5: if(mg=5) collect_time0 &= 0x0f; else collect_time0+=16;
41、; break; case 6: if(md=9) collect_time0 &= 0xf0; else collect_time0+; break; TR0=1; while(ADD=0); if(DEC=0&&keyb
42、oard=1) /检测减调整键有无按下,并进行相应操作 if(DEC=0&&keyboard=1) RdefineT1; /超时检测初始化 TR0=0; switch (choose) case 1 :if(sg=0) collect_time2=0x20;
43、0; else collect_time2-=16; break; case 2 :if(sg<2&&sd=0) collect_time2 |= 0x09; if(sg=2&&sd=0) collect_time2 |= 0x03;
44、160; else collect_time2-=1; break; case 3 :if(fg=0) collect_time1 |= 0x50; else collect_time1-=16; break; case 4 :
45、if(fd=0) collect_time1 |= 0x09; else collect_time1-=1; break; case 5 :if(mg=0) collect_time0 |= 0x50; else collect_time0
46、-=16; break; case 6 :if(md=0) collect_time0 |= 0x09; else collect_time0-=1; break; TR0=1; while(DEC=0);
47、0; if(choose!=0)TR1=1;STA=0; /在设置模式下停止采集时间else TR1=0;STA=1;/* *
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026年情绪管理能力评估试卷
- 2026年计算机网络应用实操测试题库
- 2026年系统架构设计师专业水平考试要求试题
- 注塑厂巡检常见试题及详细答案
- 商务接待相关试题及参考答案
- 互联网时代下的品牌传播策略探讨真题
- 浙江省义乌市2027届九上化学期末复习检测模拟试题含解析
- 2026年古代文献版本研究评估试卷及答案
- 宁波市安全监理模拟考试试题及答案
- 2026事业单位工勤技能-山东-山东防疫员五级(初级工)历年参考题库含答案详解3套试卷
- 2026江西农商联合银行金融科技人才招聘30人笔试参考题库及答案详解
- 2026年福建厦门市统计局招聘非在编辅助岗位人员1人笔试参考题库及答案详解
- 2026年机械产品检验工专项题库(附答案与解释)
- 成都市龙泉中学高一入学数学分班考试真题含答案
- 2026年河南省中考数学试卷真题及答案解析
- 2026年中考开放性测试题及答案
- 中国博物馆数字技术应用及案例研究2025年度报告
- 2026年高考数学终极冲刺:培优专题04 解析几何 6大重难题型(大题专练)(原卷版及全解全析)
- 食品生产企业飞行检查要点培训
- 娱乐经营许可证延续许可申请书
- 2026年高等职业教育知识考前冲刺模拟题库含答案详解(新)
评论
0/150
提交评论