久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 1352|回復(fù): 1
打印 上一主題 下一主題
收起左側(cè)

精確值很高的單片機(jī)數(shù)碼管報(bào)警器程序

  [復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:21069 發(fā)表于 2018-12-3 14:16 | 只看該作者 |只看大圖 回帖獎勵 |倒序?yàn)g覽 |閱讀模式
  1. #include<reg51.h>
  2. #include<intrins.h>
  3. #define uchar unsigned char
  4. #define uint unsigned int
  5. sbit DQ=P3^6;
  6. sbit BEEP=P3^7;
  7. sbit HI_LED=P1^4;
  8. sbit LO_LED=P1^5;
  9. bit HI_Alarm=0,LO_Alarm=0;
  10. bit DS18B20_IS_OK=1;
  11. uchar code DSY_CODE[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x00};  
  12. uchar code df_Table[]={0,1,1,2,3,3,4,4,5,6,6,7,8,8,9,9};  
  13. uchar CurrentT=0;            
  14. uchar Display_Digit[]={0,0,0,0};      
  15. uchar Temp_Value[]={0x00,0x00};        
  16. uint Time0_Count=0;           
  17. char Alarm_Temp_HL[2]={70,-20};
  18. /***********延時(shí)程序*************/
  19. void Delay(uint x)
  20. {
  21.       
  22.         while(--x);
  23.       
  24. }
  25. /**********DS18B20初始化********/
  26. uchar Init_DS18B20()  
  27. {
  28.       
  29.         uchar status;  
  30.       
  31.         DQ=1;Delay(8);  
  32.       
  33.         DQ=0;Delay(90);  
  34.       
  35.         DQ=1;Delay(8);  
  36.       
  37.         status=DQ;  
  38.       
  39.         Delay(100);  
  40.       
  41.         DQ=1;  
  42.       
  43.         return status;  
  44.       
  45. }  
  46. /**********DS18B20讀字節(jié)********/  
  47. uchar ReadOneByte()  
  48. {   
  49.       
  50.         uchar i,dat=0;  
  51.       
  52.         DQ=1;_nop_();  
  53.       
  54.         for(i=0;i<8;i++)  
  55.                
  56.         {   DQ=0;dat >>=1;DQ=1;_nop_();_nop_();  
  57.       
  58.         if (DQ) dat |=0x80; Delay(30); DQ=1;  
  59.       
  60.         }   
  61.       
  62.         return dat;  
  63.       
  64. }   
  65. /**********DS18B20寫字節(jié)********/  
  66. void WriteOneByte(uchar dat)  
  67. {  
  68.       
  69.         uchar i;  
  70.       
  71.         for(i=0;i<8;i++)
  72.                
  73.         {   
  74.                
  75.                 DQ=0;DQ=dat & 0x01;Delay(5); DQ=1; dat>>=1;  
  76.                
  77.         }  
  78.       
  79. }  
  80. /**********從DS18B20讀取溫度********/  
  81. void Read_Temperature()  
  82. {   
  83.       
  84.         if( Init_DS18B20()==1)  
  85.                
  86.                 DS18B20_IS_OK=0;  
  87.       
  88.         else  
  89.                
  90.         {   
  91.                
  92.                 WriteOneByte(0xCC);  
  93.                
  94.                 WriteOneByte(0x44);  
  95.                
  96.                 Init_DS18B20();  
  97.                
  98.                 WriteOneByte(0xCC);  
  99.                
  100.                 WriteOneByte(0xBE);   
  101.                
  102.                 Temp_Value[0]=ReadOneByte();   
  103.                
  104.                 Temp_Value[1]=ReadOneByte();  
  105.                
  106.                 DS18B20_IS_OK=1;  
  107.                
  108.         }  
  109.       
  110. }
  111. /**********給DS18B20設(shè)置報(bào)警值********/   
  112. void Set_Alarm_Temp_Value()   
  113. {
  114.       
  115.         Init_DS18B20();
  116.       
  117.         WriteOneByte(0xcc);   
  118.       
  119.         WriteOneByte(0x4e);   
  120.       
  121.         WriteOneByte(Alarm_Temp_HL[0]); //寫TH
  122.       
  123.         WriteOneByte(Alarm_Temp_HL[1]); //寫TL
  124.       
  125.         WriteOneByte(0x7f);    //12位精度
  126.       
  127.         Init_DS18B20();
  128.       
  129.         WriteOneByte(0xcc);    //跳過序列號
  130.       
  131.         WriteOneByte(0x48);    //將溫度報(bào)警值存入DS18B20
  132.       
  133. } /**********溫度值顯示******************/  
  134. void Display_Temperature()      //顯示溫度
  135. {
  136.       
  137.         uchar i;
  138.       
  139.         uchar t=150;                     //延時(shí)值
  140.       
  141.         uchar ng=0,np=0;     //負(fù)數(shù)標(biāo)示及負(fù)號顯示位置
  142.       
  143.         char Signed_Current_Temp;
  144.       
  145.         if((Temp_Value[1]&0xf8)==0xf8)  //如果為負(fù)數(shù)取反加1設(shè)置負(fù)數(shù)標(biāo)示及負(fù)號顯示位置
  146.                
  147.         {
  148.                
  149.                 Temp_Value[1]=~Temp_Value[1];
  150.                
  151.                 Temp_Value[0]=~Temp_Value[0]+1;
  152.                
  153.                 if(Temp_Value[0]==0x00)Temp_Value[1]++;
  154.                
  155.                 ng=1;np=0xfd;
  156.                
  157.         }
  158.       
  159.         Display_Digit[0]=df_Table[Temp_Value[0]&0x0f];   
  160.       
  161.         CurrentT=((Temp_Value[0]&0xf0)>>4)|((Temp_Value[1]&0x07)<<4);
  162.       
  163.         Signed_Current_Temp=ng? -CurrentT : CurrentT;
  164.       
  165.         HI_Alarm= Signed_Current_Temp >= Alarm_Temp_HL[0] ? 1:0;
  166.       
  167.         LO_Alarm= Signed_Current_Temp <= Alarm_Temp_HL[1] ? 1:0;
  168.       
  169.         Display_Digit[3]=CurrentT/100;
  170.       
  171.         Display_Digit[2]=CurrentT%100/10;
  172.       
  173.         Display_Digit[1]=CurrentT%10;
  174.       
  175.         if(Display_Digit[3]==0)     
  176.                
  177.         { Display_Digit[3]=10;
  178.       
  179.         np=0xfb;
  180.       
  181.         if(Display_Digit[2]==0)
  182.                
  183.         {  
  184.                
  185.                 Display_Digit[2]=10;
  186.                
  187.                 np=0xf7;
  188.                
  189.         }
  190.       
  191.         }
  192.       
  193.         for(i=0;i<30;i++)    //刷新數(shù)碼管顯示溫度值
  194.                
  195.         {
  196.                
  197.                 P0=0X39;P2=0X7F;Delay(t);P2=0XFF;
  198.                
  199.                 P0=0X63;P2=0XBF;Delay(t);P2=0XFF;
  200.                
  201.                 P0=DSY_CODE[Display_Digit[0]];
  202.                
  203.                 P2=0XDF;Delay(t);P2=0XFF;
  204.                
  205.                 P0=(DSY_CODE[Display_Digit[1]])|0X80;
  206.                
  207.                 P2=0XEF;Delay(t);P2=0XFF;
  208.                
  209.                 P0=DSY_CODE[Display_Digit[2]];
  210.                
  211.                 P2=0XF7;Delay(t);P2=0XFF;
  212.                
  213.                 P0=DSY_CODE[Display_Digit[3]];
  214.                
  215.                 P2=0XFB;Delay(t);P2=0XFF;
  216.                
  217.                 if(ng) {P0=0X40;P2=np;Delay(t);P2=0XFF;}
  218.                
  219.         }
  220.       
  221. }
  222. /**********定時(shí)器0中斷控制報(bào)警聲音********/  
  223. void T0_INT()interrupt 1
  224. {
  225.       
  226.         TH0=-1000/256;
  227.       
  228.         TL0=-1000%256;
  229.       
  230.         BEEP=!BEEP;
  231.       
  232.         if(++Time0_Count==400)
  233.                
  234.         {
  235.                
  236.                 Time0_Count=0;
  237.                
  238.                 if(HI_Alarm)HI_LED=~HI_LED;
  239.                
  240.                 else HI_LED=1;
  241.                
  242.                 if(LO_Alarm)LO_LED=~LO_LED;
  243.                
  244.                 else LO_LED=1;
  245.                
  246.         }
  247.       
  248. }
  249. void main()
  250. {
  251.       
  252.         IE=0X82;
  253.       
  254.         TMOD=0X01;       //方式1計(jì)數(shù)
  255.       
  256.         TH0=-1000/256;
  257.       
  258.         TL0=-1000%256;
  259.       
  260.         TR0=0;
  261.       
  262.         HI_LED=1;
  263.       
  264.         LO_LED=1;
  265.       
  266.         Set_Alarm_Temp_Value();
  267.       
  268.         Read_Temperature();
  269.       
  270.         Delay(50000); Delay(50000);
  271.       
  272.         while(1)
  273.                
  274.         {
  275.                
  276.                 Read_Temperature();
  277.                
  278.                 if(DS18B20_IS_OK)
  279.                        
  280.                 {
  281.                        
  282.                         if(HI_Alarm==1||LO_Alarm==1)TR0=1;
  283.                        
  284.                         else TR0=0;
  285.                        
  286.                         Display_Temperature();   
  287.                        
  288.                 }
  289.                
  290.                 else{P0=P2=0X00;}  
  291.                
  292.         }
  293.       
  294. }
復(fù)制代碼


評分

參與人數(shù) 3黑幣 +73 收起 理由
shuisheng + 15
yoxi + 8 贊一個(gè)!
admin + 50 共享資料的黑幣獎勵!

查看全部評分

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復(fù)

使用道具 舉報(bào)

沙發(fā)
ID:472242 發(fā)表于 2019-2-7 01:26 | 只看該作者
回復(fù)

使用道具 舉報(bào)

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則

手機(jī)版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 国产精品久久久久久久久久99 | 天天拍天天插 | 黄色一级免费看 | 欧美成人免费在线视频 | 国产免费一区二区三区最新6 | 欧美11一13sex性hd | 嫩草伊人| 老司机精品福利视频 | 久久久综合精品 | 一区二区三区中文字幕 | 手机日韩| 亚洲一区二区三区免费在线观看 | 视频一区二区中文字幕日韩 | 一级黄色毛片免费 | 午夜电影一区二区 | 欧美一级大片免费看 | 日韩av第一页 | 日韩av电影院 | 国产在线视频一区二区董小宛性色 | 一级久久久久久 | 成年人网站在线观看视频 | 欧美精品在线一区 | 国产一区二区在线播放 | 日韩在线 | 日韩国产中文字幕 | 欧美久久久久久久久 | 欧美成人一区二区三区 | 国产日韩一区二区三免费高清 | 男女视频在线观看免费 | 成人一区二 | 成人在线视频一区二区三区 | 久久99精品久久久久久青青日本 | 国产精品一区在线 | www.色综合| 久久大陆| 欧美极品在线播放 | 国产精品免费一区二区三区四区 | 二区高清 | 久久亚洲欧美日韩精品专区 | 午夜影院在线观看免费 | 自拍偷拍中文字幕 |