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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

LM75溫度傳感器的單片機控制程序 帶掉電保護(hù)功能

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:210244 發(fā)表于 2017-6-11 21:36 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
基于STC12C5A60S2芯片,有掉電保護(hù)程序

單片機源程序如下:
  1. //LM75溫度控制器//
  2. //頭文件
  3. #include<STC12C5A60S2.h>
  4. #include<intrins.h>
  5. //宏
  6. #define uchar unsigned char
  7. #define uint  unsigned int
  8. #define CONF   0X01  //配置寄存器
  9. #define TEMP   0X00  //溫度寄存器只讀
  10. #define ALARM  0X03  //超溫關(guān)閉極限寄存器默認(rèn)5000H
  11. #define DELAY  0X02  //滯后寄存器默認(rèn)4B00H
  12. #define WADDR  0X90  //寫地址
  13. #define RADDR  0X91  //讀地址
  14. //////////////
  15. uchar code tab[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};//共陰  段
  16.                                   //0,    1,   2   3    4    5    6    7    8    9
  17. uchar out[]={0x01,0x02,0x04,0x08};                   //位
  18. uchar discount=0;                                                               
  19. sbit sda=P3^5;
  20. sbit scl=P3^4;
  21. sbit os=P3^2;
  22. sbit key1=P1^0;
  23. sbit key2=P1^1;
  24. sbit key3=P1^4;
  25. sbit redled=P1^2;
  26. uint disshu=0;
  27. float tempchu;
  28. uchar tempcount=0;
  29. uint Tsettemp;
  30. bit dp=0;
  31. uchar dat;
  32. //IAP
  33. #define ENABLE_IAP 0X83
  34. #define IAP_ADDRESS 0X0000//定義EEPROM 的起始地址
  35. sfrIAP_DATA=0XC2;
  36. sfrIAP_ADDRH=0XC3;
  37. sfrIAP_ADDRL=0XC4;
  38. sfrIAP_CMD=0XC5;
  39. sfrIAP_TRIG=0XC6;
  40. sfrIAP_CONTR=0XC7;
  41. //*****************************************************//函數(shù)名
  42. void init(void);                                                                             //初始化
  43. void start(void);                                                                            //起始
  44. void stop(void);                                                                             //終止
  45. void ack(void);                                                                                     //應(yīng)答
  46. void noack(void);                                                                             //非應(yīng)答
  47. bit rack(void);                                                                                   //接受應(yīng)答位
  48. void send(uchar date);                                                                   //發(fā)送數(shù)據(jù) 1字節(jié)
  49. uchar read(void);                                                                            //接受數(shù)據(jù) 1字節(jié)
  50. uchar w_config(uchar cdata);                                                   //寫配置寄存器
  51. uchar Twendu(uchar Twd,uchar wen_high,uchar wen_low);  //高低溫
  52. float read_16(uchar addr);                               //讀2字節(jié)
  53. uchar read8(uchar adder);                                                           //讀1字節(jié)
  54. void disseg(uint seg);                                                                   //顯示
  55. void delay(void);                                                                            //5us
  56. void delay10ms(void);                                  //10us
  57. void delay500ms(void);                                 //500ms
  58. void kaishi(void);                                     //
  59. //AIP                                                                                                   //
  60. void iapidle();                                                                                   //AIP初始化函數(shù)
  61. uchar iapreadbyte(uint addr);                                                   //讀EEPROM的一個字節(jié)地址的內(nèi)容
  62. void iapprogrambyte(uint addr,uchar dat);                            //寫一個字節(jié)的IAP/ISP/EEPROM空間
  63. void iaperasesector(uint addr);                                               //扇區(qū)擦除
  64. //*****************************************************//
  65. //初始化
  66. void init(void)
  67. {       
  68.         scl=1;
  69.         delay();
  70.         sda=1;
  71.         delay();
  72. }
  73. //起始
  74. void start(void)
  75. {
  76.         scl=1;
  77.         sda=1;
  78.         delay();
  79.         sda=0;
  80.         delay();
  81.         scl=0;
  82. }
  83. //終止
  84. void stop(void)
  85. {
  86.         scl=0;
  87.         sda=0;
  88.         delay();
  89.         scl=1;
  90.         delay();
  91.         sda=1;
  92.         delay();
  93.         sda=0;
  94. }
  95. //應(yīng)答
  96. void ack(void)
  97. {
  98.         uchar a;
  99.         sda=0;
  100.         scl=1;
  101.         delay();
  102.         while(sda==1&&(a<255))
  103.         {
  104.                 a++;
  105.         }
  106.         scl=0;
  107.         delay();
  108. }
  109. //非應(yīng)答
  110. void noack(void)
  111. {
  112.         sda=1;
  113.         scl=1;
  114.         delay();
  115.         scl=0;
  116.         sda=0;
  117. }
  118. //接受應(yīng)答位
  119. bit rack(void)
  120. {
  121.         bit flag;
  122.         scl=1;
  123.         delay();
  124.         flag=sda;
  125.         scl=0;
  126.         delay();
  127.         return flag;
  128. }
  129. //發(fā)送數(shù)據(jù) 1字節(jié)
  130. void send(uchar date)
  131. {
  132.         uchar s,temp;
  133.         temp=date;
  134.         for(s=0;s<8;s++)
  135.         {
  136.                 temp=temp<<1;
  137.                 scl=0;
  138.                 delay();
  139.                 sda=CY;
  140.                 delay();
  141.                 scl=1;
  142.                 delay();
  143.         }
  144.         scl=0;
  145.         delay();
  146.         sda=1;
  147.         delay();
  148. }
  149. //接受數(shù)據(jù) 1字節(jié)
  150. uchar read(void)
  151. {
  152.         uchar s,temp;
  153.         scl=0;
  154.         delay();
  155.         sda=1;
  156.         for(s=0;s<8;s++)
  157.         {
  158.                 scl=1;
  159.                 delay();
  160.                 temp=(temp<<1)|sda;
  161.                 scl=0;
  162.                 delay();
  163.         }
  164.         delay();
  165.         return temp;
  166. }
  167. //寫配置寄存器
  168. uchar w_config(uchar cdata)
  169. {
  170.         bit i=0;  
  171.         start();
  172.         send(WADDR);
  173.         i=rack();
  174.         if(i)
  175.         {  
  176.                 stop();
  177.                 return 0;
  178.         }   
  179.         send(CONF);
  180.         i=rack();
  181.         if(i)
  182.         {   
  183.                 stop();
  184.                   return 0;
  185.         }   
  186.         send(cdata);
  187.         i=rack();
  188.         if(i)
  189.         {        
  190.                 stop();  
  191.                   return 0;
  192.         }
  193.         delay();
  194.         stop();
  195. }
  196. //寫2字節(jié)溫度
  197. uchar Twendu(uchar Twd,uchar wen_high,uchar wen_low)
  198. {
  199.         bit i=0;
  200.         start();
  201.         send(WADDR);
  202.         i=rack();
  203.         if(i)
  204.         {  
  205.                 return 0;
  206.         }
  207.         send(Twd);
  208.         i=rack();
  209.         if(i)
  210.         {  
  211.                 return 0;
  212.         }
  213.         send(wen_high);
  214.         i=rack();
  215.         if(i)
  216.         {  
  217.                 return 0;
  218.         }
  219.         send(wen_low);
  220.         i=rack();
  221.         if(i)
  222.         {  
  223.                 return 0;
  224.         }
  225.         delay();
  226.         stop();   
  227. }
  228. //讀16位
  229. float read_16(uchar addr)
  230. {
  231.         bit i=0;
  232.     float cun16;
  233.         uchar cun1,cun2;
  234.         start();
  235.         send(WADDR);
  236.         i=rack();
  237.         if(i)
  238.         {  
  239.                 stop();
  240.                 return 0;
  241.         }
  242.         send(addr);
  243.         i=rack();
  244.         if(i)
  245.         {
  246.                 stop();
  247.                 return 0;
  248.         }
  249.         start();
  250.         send(RADDR);
  251.         i=rack();
  252.         if(i)
  253.         {  
  254.                 stop();
  255.                 return 0;
  256.         }
  257.          cun1=read();// cun16=read();
  258.                      //cun16=cun16<<8;
  259.          ack();
  260.          cun2=read()>>7;           //cun16|=read();
  261.          noack();
  262.          delay();
  263.          stop();
  264.          if(cun1&0x80)
  265.         {
  266.                 dp=1;
  267.                 cun16=((~(cun1<<1))>>1+1)+cun2*0.5;
  268.         }
  269.         else
  270.         {
  271.                 dp=0;
  272.                 cun16=cun1+cun2*0.5;
  273.         }      
  274.      return cun16;       
  275. }
  276. uchar read8(uchar adder)
  277. {
  278.         uchar i,m;
  279.         start();
  280.         send(WADDR);
  281.         i=rack();
  282.         if(i)
  283.         {  
  284.                 return 0;
  285.         }
  286.         send(adder);
  287.         i=rack();
  288.         if(i)
  289.         {  
  290.                 return 0;
  291.         }
  292.         start();
  293.         send(RADDR);
  294.         i=rack();
  295.         if(i)
  296.         {  
  297.                 return 0;
  298.         }
  299.         m=read();
  300.         noack();
  301.         delay();
  302.         stop();
  303.         return m;
  304. }
  305. //************************************************IAP*************************************************************//
  306. void iapidle()                                                         //****初始化函數(shù)
  307. {
  308.         IAP_CONTR=0;                                                 //關(guān)閉IAP功能
  309.         IAP_CMD=0;                                                         //CMD寄存器初始化
  310.          IAP_TRIG=0;                                                 //清空觸發(fā)寄存器
  311.         IAP_ADDRH=0X80;                                                 //數(shù)據(jù)指針指向非EEPROM區(qū)
  312.         IAP_ADDRL=0;                                                 //CLEAR IAP address to preventmisuse
  313. }
  314. uchar iapreadbyte(uint addr)                         //讀EEPROM的一個字節(jié)地址的內(nèi)容
  315. {
  316.         IAP_CONTR=ENABLE_IAP;                                 //設(shè)置IAP控制寄存器
  317.         IAP_CMD=1;                                                         //設(shè)置IAP的命令寄存器為讀狀態(tài)
  318.         IAP_ADDRL=addr;                                                 //設(shè)置EERPROM的低8位地址
  319.         IAP_ADDRH=addr>>8;
  320.         IAP_TRIG=0X5A;
  321.         IAP_TRIG=0XA5;
  322.         _nop_();
  323.         _nop_();
  324.         dat=IAP_DATA;
  325.         iapidle();
  326.         return dat;
  327. }
  328. void iapprogrambyte(uint addr,uchar dat) //寫一個字節(jié)的IAP/ISP/EEPROM空間
  329. {
  330.         IAP_CONTR=ENABLE_IAP;                                 //打開IAP功能并設(shè)置等待時間
  331.         IAP_CMD=2;                                                         //設(shè)置寫命令
  332.         IAP_ADDRL=addr;                                                 //設(shè)置字節(jié)地址低8位
  333.         IAP_ADDRH=addr>>8;                                         //設(shè)置字節(jié)地址的高8位
  334.         IAP_DATA=dat;                                                 //寫內(nèi)容
  335.         IAP_TRIG=0X5A;                                                  //發(fā)送觸發(fā)命令1
  336.         IAP_TRIG=0XA5;                                                 //發(fā)送觸發(fā)命令2
  337.         _nop_();                                                         //等待直到寫操作完成   60us
  338.         iapidle();
  339. }
  340. void iaperasesector(uint addr)                         //扇區(qū)擦除
  341. {
  342.         IAP_CONTR=ENABLE_IAP;                             //開IAP功能并設(shè)置等待時間
  343.         IAP_CMD=3;                                                         //設(shè)置擦除命令
  344.         IAP_ADDRL=addr;
  345.         IAP_ADDRH=addr>>8;
  346.         IAP_TRIG=0x5a;
  347.         IAP_TRIG=0XA5;
  348.          _nop_();                                                          // 21ms
  349.         iapidle();
  350. }
  351. //************************************************IAP*************************************************************//
  352. void kaishi(void)
  353. {
  354.         P2M0 = 0xff;
  355.         P2M1 = 0x00;                  
  356.         P0M0 = 0xff;
  357.         P0M1 = 0x00;
  358.         TMOD = 0x11;
  359.         ET0 = 1;                                         //定時器中斷允許
  360.         TR0 = 1;                                                //定時器0啟動
  361.         TH0 = 0x3C;                                                           //定時器0初值      1Ms
  362.     TL0 = 0xb0;
  363.         ET1 = 1;                                         //定時器中斷允許
  364.         TR1 = 1;                                                //定時器1啟動
  365.         TH1 = 0xFC;                                                           //定時器1初值      1Ms
  366.     TL1 = 0x18;
  367.         EA=1;
  368. }
  369. void main(void)
  370. {
  371.         uchar xuhuan=0;
  372.         bit js=1;
  373.         uchar dat0;
  374.         bit fffz=0;
  375.         float Tset;
  376.         w_config(0x00);       
  377.         iapreadbyte(0x00);                                          //讀數(shù)
  378.         dat0=dat;
  379.         Twendu(ALARM,dat0,0x00);
  380.         Twendu(DELAY,0x00,0x00);
  381.         kaishi();
  382.         while(1)
  383.         {
  384.                 if(!key1&&js)
  385.                 {
  386.                         delay10ms();
  387.                         if(!key1&&js)
  388.                         {
  389.                                 js=0;
  390.                                 TR0=0;
  391.                                 Tset=read_16(ALARM)*10;
  392.                                 Tsettemp=Tset;
  393.                                 xuhuan=1;
  394.                                 redled=1;
  395.                         }
  396.                 }
  397.                 while(xuhuan==1)
  398.                 {
  399.                         disshu=Tsettemp;
  400.                         if(!key2&&js)
  401.                         {
  402.                                 delay10ms();
  403.                                 if(!key2&&js)
  404.                                         {
  405.                                                 Tsettemp=Tsettemp+10;
  406.                                                 if(Tsettemp>=1500)
  407.                                                 {
  408.                                                    Tsettemp=1500;
  409.                                                 }
  410.                                                 js=0;
  411.                                         }                                       
  412.                         }
  413.                         if(!key3&&js)
  414.                         {
  415.                                 delay10ms();
  416.                                 if(!key3&&js)
  417.                                         {
  418.                                                 Tsettemp=Tsettemp-10;
  419.                                                 if(Tsettemp<=100)
  420.                                                 {
  421.                                                    Tsettemp=100;
  422.                                                 }
  423.                                                 js=0;
  424.                                         }
  425.                         }
  426.                         if(!key1&&js)
  427.                         {
  428.                                 delay10ms();
  429.                                 if(!key1&&js)
  430.                                 {
  431.                                         xuhuan=0;
  432.                                         TR0=1;
  433.                                         js=0;
  434.                                         dat=Tsettemp/10;
  435.                                         iaperasesector(0x00);                                 //擦除
  436.                                         iapprogrambyte(0x00,dat);         //寫入
  437.                                         Twendu(ALARM,dat,0x00);
  438.          
  439.                                 }
  440.                         }
  441.                         if(key1&&key2&&key3)
  442.                         {
  443.                                 js=1;
  444.                         }                                               
  445.                 }
  446.                 if(key1&&key2&&key3)
  447.                 {
  448.                         js=1;
  449.                 }
  450.         }       
  451. }
  452. void timer0() interrupt 1                //1000us
  453. {
  454.         float huan=0;
  455.         float qing;
  456.     TH0=0x3c;
  457.     TL0=0xb0;
  458.         tempcount++;
  459.         if(tempcount==3)
  460.         {
  461.                 tempcount=0;
  462.                 huan=read_16(0x00);
  463.                 tempchu=huan*10;
  464.                 disshu=tempchu;
  465.         }
  466.         if((tempchu!=0)&&(Tsettemp!=0))
  467.         {
  468.                 if(tempchu>=Tsettemp)
  469.                 {
  470.                         redled=0;
  471.                 }
  472.         }
  473. }
  474. void timer1() interrupt 3                //1000us
  475. ……………………

  476. …………限于本文篇幅 余下代碼請從51黑下載附件…………
復(fù)制代碼

所有資料51hei提供下載:
LM75溫度傳感器.rar (2.89 KB, 下載次數(shù): 29)


評分

參與人數(shù) 1黑幣 +50 收起 理由
admin + 50 共享資料的黑幣獎勵!

查看全部評分

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

使用道具 舉報

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

本版積分規(guī)則

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

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

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 99久久精品免费看国产高清 | 中国一级特黄毛片大片 | 亚洲国产午夜 | 久久久久无码国产精品一区 | 亚洲色欧美另类 | 国内自拍偷拍一区 | 伦理片97| 亚洲精品68久久久一区 | av香蕉| 国产精品福利在线 | 久久三区| 国产yw851.c免费观看网站 | 欧美色综合| 亚洲国产成人精品女人久久久 | 成人夜晚看av | 久久久久久国产精品免费免费男同 | 亚洲永久入口 | 亚洲国产精品视频一区 | 久久国产精品免费一区二区三区 | 一区二区三区在线观看视频 | 精品久久国产 | 一区二区三区国产 | 欧美一级视频在线观看 | 欧洲一级毛片 | 国产性生活一级片 | 亚洲综合首页 | 国产一区二区电影 | 久久草在线视频 | 91久久久www播放日本观看 | 国产精品久久久亚洲 | 狠狠色狠狠色综合系列 | 涩涩操 | 男人的天堂avav | 国产成人99av超碰超爽 | 精品中文字幕视频 | 综合五月婷 | 天天操综合网站 | 亚洲免费在线观看视频 | 成人免费在线小视频 | 亚洲精品久久久久久久久久久久久 | www.v888av.com|