找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1223|回复: 1
打印 上一主题 下一主题
收起左侧

单片机温度传感器代码 显示到数码管上

[复制链接]
跳转到指定楼层
楼主
ID:506929 发表于 2019-4-18 17:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
  1. #include "STC15Fxxxx.h"
  2. #include "INTRINS.H"
  3. #include "stdio.h"
  4. #include "string.h"
  5. #include "DS18B20.h"
  6. #include  "HC595.H"

  7. sbit LED1  = P6^0;
  8. sbit SPEAKER  = P1^3;
  9. sbit SingleKey = P0^7;////把P0.7接地,设置P0.0~P0.3为4个独立按键

  10. sbit KEY1 = P0^0;////P0.0为KEY1
  11. sbit KEY2 = P0^1;////P0.1为KEY2
  12. sbit KEY3 = P0^2;////P0.2为KEY3
  13. sbit KEY4 = P0^3;////P0.3为KEY4

  14. unsigned char  displayDat[8]={0x00};  //显示单元数据,共8个数据和一个运算暂用
  15. //Function Definition 函数声明
  16. extern unsigned char display_index;        //显示位索引

  17. void Delaylong(unsigned int t);
  18. //串行口初始化
  19. void UartInit(void);
  20. ////////////////////////////////////////////////////
  21. void Delaylong(unsigned int t)//
  22. {
  23.         unsigned int i,j;
  24.         for(i=0;i<t;i++)
  25.         {
  26.                 for(j=0;j<10;j++);
  27.         }
  28. }
  29. //////////////////////////////////////
  30. void Beep(unsigned int dd)
  31. {
  32. //    SPEAKER=1;
  33.         Delaylong(dd);
  34.         SPEAKER=0;
  35. }
  36. //////////////////////////////////////
  37. void UartSend(unsigned char ch)
  38. {
  39.            SBUF=ch;
  40.         while(!TI);
  41.         TI=0;
  42. }
  43. ///////////////////////////////////////////////////////////////////////
  44. // 串口初始化函数
  45. ///////////////////////////////////////////////////////////////////////
  46. void UartInit(void)                //9600bps@11.0592MHz
  47. {
  48.         SCON = 0x50;                //8位数据,可变波特率
  49.         AUXR |= 0x40;                //定时器1时钟为Fosc,即1T
  50.         AUXR &= 0xFE;                //串口1选择定时器1为波特率发生器
  51.         TMOD &= 0x0F;                //设定定时器1为16位自动重装方式
  52.         TL1 = 0xE0;                //设定定时初值
  53.         TH1 = 0xFE;                //设定定时初值
  54.         ET1 = 0;                //禁止定时器1中断
  55.         TR1 = 1;                //启动定时器1
  56.         
  57. //        ES = 1; //使能串口1中断
  58.         REN =1;
  59. }
  60. ////////////////////////////
  61. void PortInit()
  62. {
  63. P0M1 =0X00;
  64.    P0M0 =0X00;

  65. //   P1M1 =0X00;
  66. //   P1M0 =0X08;////P1.3强驱动模式,P1.3蜂鸣器

  67.    P2M1 =0X00;
  68.    P2M0 =0X00;

  69.    P3M1 =0X00;
  70.    P3M0 =0X00;

  71.    P4M1 =0X00;
  72.    P4M0 =0X00;

  73.    P5M1 =0X00;
  74.    P5M0 =0X00;

  75.    P6M1 =0X00;
  76.    P6M0 =0X00;
  77. //   P7M1 =0X00;
  78. //   P7M0 =0X10;////P7.4强驱动模式继电器
  79.    KEY1 =1;
  80.    KEY2 =1;
  81.    KEY3 =1;
  82.    KEY4 =1;
  83. }
  84. void Timer0Init(void)                //1毫秒@11.0592MHz
  85. {
  86.         AUXR |= 0x80;                //定时器时钟1T模式
  87.         TMOD &= 0xF0;                //设置定时器模式
  88.         TL0 = 0xCD;                //设置定时初值
  89.         TH0 = 0xD4;                //设置定时初值
  90.         TF0 = 0;                //清除TF0标志
  91.         TR0 = 1;                //定时器0开始计时
  92.         ET0 = 1;                                    //使能定时器中断
  93. }
  94. /*******************************************************************************/
  95. void main(void) //主函数
  96. {
  97.         unsigned char i;
  98.         unsigned int temp,DS18B20_ID[8];
  99.         
  100.         AUXR =0x00;
  101.         PortInit();
  102.         UartInit(); // 串口1//注意,下载程序选择晶振:11.0592MHz,波特率9600bps
  103.     Delaylong(500);
  104.         SingleKey = 0;////把P0.7接地,设置P0.0~P0.3为4个独立按键
  105.         Timer0Init();
  106.         UartSend(0xaa);
  107. //        Beep(5000);
  108.     for(i=0; i<8; i++)        displayDat[i] = 0x10;        //上电消隐
  109.         EA=1;
  110. while(1)
  111. {
  112. //    UartSend(display_index);
  113. //        if(KEY1==0)        ////读出地址0x00处的一个字节
  114.         {
  115. //           Delaylong(30);         
  116. //           while(KEY1==0);////等待按键抬起
  117.            temp = Conversion(ds18b20ReadTemp());
  118. //           UartSend(temp&&0xFF);
  119. //           UartSend((temp>>8)&&0xFF);
  120. //           EA=0;
  121.            displayDat[1] = temp / 10000;
  122.            displayDat[2] = temp % 10000 / 1000;
  123.        displayDat[3] = temp % 1000 / 100;
  124.        displayDat[5] = temp % 100 / 10;
  125.            displayDat[6] = temp % 10;
  126. //           EA=1;
  127. //           Beep(3000);
  128.         }
  129.         if(KEY2==0)        ////
  130.         {
  131.            Delaylong(30);         
  132.            while(KEY2==0);////等待按键抬起
  133.            ds18b20_reset();
  134.            delay_1ms(1);
  135.            ds18b20WriteByte(0x33);////读取DS18B20的8个字节ID        
  136.            for(i=0;i<8;i++)
  137.            {
  138.                      DS18B20_ID[i]=ds18b20ReadByte();
  139.            }
  140.            for(i=0;i<8;i++) UartSend(DS18B20_ID[i]);
  141.            Beep(3000);
  142.         }
  143. //   for(i=0;i<8;i++)  //8位LED扫描控制
  144. //      {
  145. //        display(i,displayDat[i]);
  146. //          }


  147.   }
  148. }//main


  149. void timer0_Isr(void) interrupt 1 //using 1
  150. {
  151. //   unsigned char i;

  152.    DisplayScan();        //1ms扫描显示一位
  153. //   B_1ms = 1;                //1ms标志
  154. }
复制代码

温度模块zxy.rar

88.57 KB, 下载次数: 7, 下载积分: 黑币 -5

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:1 发表于 2019-4-18 22:45 | 只看该作者
本帖需要重新编辑补全电路原理图,源码,详细说明与图片即可获得100+黑币(帖子下方有编辑按钮)
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表