当前位置: 首页 > news >正文

房地产集团网站建设军事网站 模板

房地产集团网站建设,军事网站 模板,网站文章优化,江西核工业建设有限公司网站需要先编写OneWire模块#xff0c;再在DS18B20模块中调用OneWire模块的函数 先根据原理图做好端口的声明#xff1a; sbit OneWire_DQ P3^7;接下来像之前一样把时序结构用代码模拟出来#xff1a; unsigned char OneWire_Init(void) {unsigned char i;unsigned char Ac… 需要先编写OneWire模块再在DS18B20模块中调用OneWire模块的函数 先根据原理图做好端口的声明 sbit OneWire_DQ P3^7;接下来像之前一样把时序结构用代码模拟出来 unsigned char OneWire_Init(void) {unsigned char i;unsigned char AckBit;OneWire_DQ 1;OneWire_DQ 0; //总线拉低//延时500usi 227; while (--i);OneWire_DQ 1; //释放总线//延时70usi 29; while (--i);AckBit OneWire_DQ;//延时500usi 227; while (--i);return AckBit; }void OneWire_SendBit(unsigned char Bit) {unsigned char i;OneWire_DQ 0; //总线拉低//延时10us后直接读电平i 4; while(--i);OneWire_DQ Bit;//延时50us凑满时间片i 22; while(--i);OneWire_DQ 1; }unsigned char OneWire_ReceiveBit(void) {unsigned char i;unsigned char Bit;OneWire_DQ 0;//延时5usi 2; while(--i);OneWire_DQ 1;//延时5usi 2; while(--i);Bit OneWire_DQ;//延时50usi 22; while(--i);return Bit; }void OneWire_SendByte(unsigned char Byte) {unsigned char i;for(i 0; i 8; i ) {OneWire_SendBit(Byte (0x01i));} }unsigned char OneWire_ReceiveByte(void) {unsigned char i;unsigned char Byte 0x00;for(i 0; i 8; i ) {if(OneWire_ReceiveBit()) {Byte | (0x01i);}}return Byte; }至此OneWire模块就写好了接下来在DS18B20模块中模拟数据帧 #include REGX52.H #include OneWire.h#define DS18B20_SKIP_ROM 0xCC #define DS18B20_CONVERT_T 0x44 #define DS18B20_READ_SCRATCHPAD 0xBEvoid DS18B20_ConvertT(void) {OneWire_Init();OneWire_SendByte(DS18B20_SKIP_ROM);OneWire_SendByte(DS18B20_CONVERT_T); }float DS18B20_ReadT(void) {unsigned char TLSB, TMSB;int temp;float T;OneWire_Init();OneWire_SendByte(DS18B20_SKIP_ROM);OneWire_SendByte(DS18B20_READ_SCRATCHPAD);TLSB OneWire_ReceiveByte();TMSB OneWire_ReceiveByte();temp (TMSB8) | TLSB;T temp / 16.0;return T; }之后只需要在main中调用即可 #include REGX52.H #include LCD1602.h #include DS18B20.hfloat T;void main() {LCD_Init();LCD_ShowString(1, 1, Temperature!);while(1){DS18B20_ConvertT();T DS18B20_ReadT();if(T 0){LCD_ShowChar(2, 1, -);T -T;}else{LCD_ShowChar(2, 1, );}LCD_ShowNum(2, 2, T, 3);//整数部分LCD_ShowChar(2, 5, .);LCD_ShowNum(2, 6, (unsigned long)(T *10000) % 10000, 4); //小数部分} }接下来进行一些综合的应用温度报警器按键可调整报警温度的上下限且能用AT24C02记录上下限掉电不丢失这里默认所有温度不会超过DS18B20的芯片范围 #include REGX52.H #include LCD1602.h #include DS18B20.h #include Delay.h #include AT24C02.h #include Key.h #include Timer0.hfloat T, TShow; char THigh, TLow; unsigned char KeyNum;void main() {THigh AT24C02_ReadByte(0);TLow AT24C02_ReadByte(1);//第一次读可能是非法值所以要特判一下if(THigh 125 || TLow - 55 || THigh TLow){THigh 20;TLow 15;}Timer0_Init();LCD_Init();LCD_ShowString(1, 1, T:);LCD_ShowString(2, 1, TH:);LCD_ShowString(2, 9, TL:);LCD_ShowSignedNum(2, 4, THigh, 3);LCD_ShowSignedNum(2, 12, TLow, 3);while(1){KeyNum Key();/*温度读取及显示*/DS18B20_ConvertT();T DS18B20_ReadT();if(T 0){LCD_ShowChar(1, 3, -);TShow -T;}else{LCD_ShowChar(1, 3, );TShow T;}LCD_ShowNum(1, 4, TShow, 3);LCD_ShowChar(1, 7, .);LCD_ShowNum(1, 8, (unsigned long)(TShow * 100)%100, 2);/*阈值判断及显示*/if(KeyNum){if(KeyNum 1) THigh ;if(KeyNum 2) THigh --;if(KeyNum 3) TLow ;if(KeyNum 4) TLow --;LCD_ShowSignedNum(2, 4, THigh, 3);LCD_ShowSignedNum(2, 12, TLow, 3);AT24C02_WriteByte(0, THigh);Delay(5);AT24C02_WriteByte(1, TLow);Delay(5);}if(T THigh) LCD_ShowString(1, 13, OV:H);else if(T TLow) LCD_ShowString(1, 13, OV:L);else LCD_ShowString(1, 13, );} }void Timer0_Routine() interrupt 1 {static unsigned int T0Count;TL0 0x66; //设置定时初值TH0 0xFC; //设置定时初值T0Count ;if(T0Count 20) //20ms执行一次{T0Count 0;Key_Loop();} }这还没完在与定时器的结合中定时器的中断会影响OneWire的延时从而影响其中的时序结构进而影响温度实时获取所以在时序结构编写的代码中需要加上屏蔽定时器中断的代码开始时加上EA 0,最后加上EA 1改版后的OneWire模块如下 #include REGX52.Hsbit OneWire_DQ P3^7;unsigned char OneWire_Init(void) {unsigned char i;unsigned char AckBit;EA 0; //屏蔽中断OneWire_DQ 1;OneWire_DQ 0; //总线拉低//延时500usi 227; while (--i);OneWire_DQ 1; //释放总线//延时70usi 29; while (--i);AckBit OneWire_DQ;//延时500usi 227; while (--i);EA 1;return AckBit; }void OneWire_SendBit(unsigned char Bit) {unsigned char i;EA 0; //屏蔽中断OneWire_DQ 0; //总线拉低//延时10us后直接读电平i 4; while(--i);OneWire_DQ Bit;//延时50us凑满时间片i 22; while(--i);OneWire_DQ 1;EA 1; }unsigned char OneWire_ReceiveBit(void) {unsigned char i;unsigned char Bit;EA 0; //屏蔽中断OneWire_DQ 0;//延时5usi 2; while(--i);OneWire_DQ 1;//延时5usi 2; while(--i);Bit OneWire_DQ;//延时50usi 22; while(--i);EA 1;return Bit; }void OneWire_SendByte(unsigned char Byte) {unsigned char i;for(i 0; i 8; i ) {OneWire_SendBit(Byte (0x01i));} }unsigned char OneWire_ReceiveByte(void) {unsigned char i;unsigned char Byte 0x00;for(i 0; i 8; i ) {if(OneWire_ReceiveBit()) {Byte | (0x01i);}}return Byte; }但是这样虽然能维护好单总线的通信但这样直接屏蔽中断却会影响定时器的计时准确度从而对定时器控制的其他模块造成影响这也就是单总线的一大缺点不过在这个实例中按键的定时器准度要求并不高所以这样控制影响不大
http://www.huolong8.cn/news/421537/

相关文章:

  • clo3d代做网站国家电力安全网站两学一做
  • 工信部清理未备案网站朔州路桥建设有限责任公司网站
  • 网站建设大致价格2017小白网页制作软件
  • 新浪推网站博客建站程序
  • 宝山湖网站建设怎么做网站链接广告
  • 网站代码加密ios开发者账号多少钱
  • 怎么做响应式网站大连零基础网站建设培训哪里有
  • 长沙大的建网站公司平面设计网址推荐
  • 东莞智通人才网官方网站网页设计基础学什么
  • 如何建设动漫网站百合怎么做网站
  • 网站开发如何收费导航网址大全
  • 做网站时怎样图片上传怎么才能让图片不变形有什么插件吗百度推广账号注册
  • 老域名做网站湖南网站制作哪家专业
  • 餐饮网站建设方案wordpress安装权限设置
  • 城市建设游戏模拟网站免费申请一个网站
  • 永久免费建站空间什么是响应式
  • 网站建设 猫云seo做企业平台的网站有哪些
  • 哈尔滨 网站建设仟路电子软件开发工资多少钱
  • wordpress 制作网站齐家装饰公司官网
  • 国际网站怎么样做河北企业建站
  • 怎么做彩票网站网络营销经典案例
  • 手机可以做网站吗?百度识图识别
  • 南京做网站xjrkj桦甸网站建设
  • 北京网站营销seo方案dw个人网页设计
  • 深圳市新朗建设工程有限公司网站百姓网免费招聘信息
  • 如何利用谷歌云做自己的网站久其软件公司网站
  • 网站建设后端前端网站建设乚金手指花总15
  • 澄海建设局网站上不了优化关键词怎么做
  • wordpress 4.9.4 下载兰州官网seo技巧
  • 网站对应不同域名网站ico图标怎么用