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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 2461|回復: 0
收起左側

單片機溫控直流電機源程序

[復制鏈接]
ID:715107 發表于 2020-3-24 22:01 | 顯示全部樓層 |閱讀模式
單片機源程序如下:
  1. /*
  2. 實驗說明:
  3.         根據自己使用的LCD1602是否帶有轉接板,如果帶有轉接板的即為4位,需在LCD.H頭文件中
  4.         將宏#define LCD1602_4PINS打開,我們這里使用的LCD1602是8位,所以默認將該宏注釋。
  5. 實驗接線:
  6.         1,LCD1602液晶模塊-->單片機管腳
  7.         參考LCD1602液晶顯示實驗接線(開發攻略內在對應的實驗章節內實驗現象有接線說明)
  8.         2,DS18B20溫度傳感器模塊-->單片機管腳
  9.         參考DS18B20溫度傳感器實驗接線(開發攻略內在對應的實驗章節內實驗現象有接線說明)
  10.         3,直流電機模塊-->單片機管腳
  11.         IN1-->P10(參考直流電機實驗接線)
  12.        
  13. 實驗現象:
  14.         LCD1602顯示溫度值,溫度變化改變直流電機旋轉速度,這里僅僅是通過修改電機開關速度實現調速,
  15.         溫度調速范圍在main函數內設置
  16. */

  17. #include<reg51.h>
  18. #include<intrins.h>
  19. #include"lcd.h"
  20. typedef unsigned char uint8;
  21. typedef unsigned int uint16;
  22. typedef unsigned long uint32;

  23. sbit dq=P3^7;
  24. sbit moto=P1^0;        //直流電機
  25. uint8 d[16]="   tempertury   ";
  26. uint8 num[10]="0123456789";
  27. uint8 a,c,temp;
  28. void delay(uint16 i)
  29. {
  30.         while(i--);
  31. }
  32. void wrc(uint8 c)
  33. {
  34.         LcdWriteCom(c);
  35. }
  36. void wrd(uint8 dat)
  37. {
  38.         LcdWriteData(dat);
  39. }
  40. void lcd_init()
  41. {
  42.         LcdInit();
  43. }
  44. void ds18b20init()                //18b20的初始化
  45. {
  46.         dq=1;
  47.         delay(1);
  48.         dq=0;
  49.         delay(80);
  50.         dq=1;
  51.         delay(5);
  52.         dq=0;
  53.         delay(20);
  54.         dq=1;
  55.         delay(35);
  56. }
  57. void ds18b20wr(uint8 dat)          //18b20寫數據
  58. {
  59.         uint8 i;
  60.         for(i=0;i<8;i++)
  61.         {
  62.                 dq=0;
  63.                 dq=dat&0x01;
  64.                 dat>>=1;
  65.                 delay(8);//在時序上只有這一塊對時序要求最準確,他的時間必須大于15us
  66.                 dq=1;
  67.                 delay(1);
  68.         }       
  69. }
  70. uint8 ds18b20rd()                  //18b20讀數據
  71. {
  72.         uint8 value,i;
  73.         for(i=0;i<8;i++)       
  74.         {
  75.                 dq=0;
  76.                 value>>=1;
  77.                 dq=1;
  78.                 if(dq==1)value|=0x80;
  79.                 delay(8);//在這一塊也對時間要求特別準確,整段程序必須大于60us               
  80.         }
  81.         return value;
  82. }
  83. uint8 readtemp()                          //讀取溫度內需要復位的
  84. {
  85.         uint8 b;
  86.         ds18b20init();                //初始化
  87.         ds18b20wr(0xcc);   //發送忽略ROM指令
  88.         ds18b20wr(0x44);   //發送溫度轉換指令
  89.         delay(100);
  90.         ds18b20init();           //初始化
  91.         ds18b20wr(0xcc);   //發送忽略ROM指令
  92.         ds18b20wr(0xbe);   //發讀暫存器指令
  93.         a=ds18b20rd();         //溫度的低八位
  94.         b=ds18b20rd();         //溫度的高八位
  95.         b<<=4;                         //ssss s***;s為標志位s=0表示溫度值為正數,s=1溫度值為負數
  96.         c=b&0x80;                //溫度正負標志位確認
  97.         b+=(a&0xf0)>>4;
  98.         a=a&0x0f;          //溫度的小數部分
  99.         return b;
  100. }
  101. void display()
  102. {
  103.         uint16 i,k;
  104.         float dio;
  105.         dio=a*0.0625;
  106.         k=dio*10000;//取小數點后兩位有效數字
  107.         wrc(0x80+0x00);
  108.         for(i=0;i<16;i++)
  109.         {
  110.                 wrd(d[i]);
  111.         }
  112.         wrc(0x80+0x43);
  113.         if(c==0x80)        //讀取到負溫度即為補碼,要將其轉換成源碼
  114.         {
  115.                 wrd('-');
  116.                 temp=temp-1;
  117.                 temp=(~temp)|0x80;//負數的補碼即為反碼+1;而負數的反碼為其源碼取反,除了符號位;正數的補碼等于正數的反碼等于正數的源碼
  118.         }       
  119.         else
  120.         {
  121.                 wrd('+');
  122.                 temp=(temp);
  123.         }                       
  124.         wrd(num[temp/100]);
  125.         wrd(num[temp%100/10]);
  126.         wrd(num[temp%100%10]);
  127.         wrd('.');
  128.         wrd(num[k/1000]);
  129.         wrd(num[k%1000/100]);
  130.         wrd(0xdf);
  131.         wrd('C');
  132. }
  133. void motospeed(uint16 i)
  134. {
  135.         while(i--)
  136.         {
  137.                 moto=~moto;
  138.         }               
  139. }
  140. void main()
  141. {
  142.         moto=0;
  143.         lcd_init();
  144.         while(1)
  145.         {
  146.                 temp=readtemp();
  147.                 display();
  148.                 //具體的溫度和速度范圍自己可以設置
  149.                 if(temp>27&&temp<29) //速度1
  150.                         motospeed(1);
  151.                 if(temp>23&&temp<24) //速度2
  152.                         motospeed(10);
  153.                 if(temp>29&&temp<35) //速度3
  154.                         motospeed(100);                       
  155.         }               
  156. }
復制代碼

所有資料51hei提供下載: 電機溫控--溫度調節速度.zip (22.93 KB, 下載次數: 18)

評分

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

查看全部評分

回復

使用道具 舉報

無效樓層,該帖已經被刪除
您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 超碰导航 | 国产精品美女久久久 | 亚洲精品日韩视频 | 在线91 | 国产精品中文字幕在线观看 | 亚洲欧美成人在线 | 精品国产乱码久久久久久蜜臀 | 日韩欧美一级片 | 91丨九色丨国产在线 | 国产va| 国产精品久久久久久久久久免费看 | 99久久国产综合精品麻豆 | 久久久久综合 | 91精品国产91久久久久久最新 | 香蕉国产在线视频 | 欧美精品一区二区三区一线天视频 | 国产精品乱码一区二三区小蝌蚪 | 国产精品久久久久久久免费大片 | 久久99视频精品 | 中文字幕av第一页 | av在线免费看网址 | 久操伊人 | 久久国产精品视频 | 天天插天天操 | 99re视频在线 | 国产伦精品一区二区三区精品视频 | 91精品欧美久久久久久久 | 激情毛片 | 久久不卡区| 成人羞羞国产免费视频 | 天天av网| 日韩在线一区二区三区 | 国产一区二 | 国产成人99 | 一级片av| 国产第二页 | 午夜精品一区二区三区在线视 | 理论片87福利理论电影 | 欧美亚洲国产日韩 | 一二区成人影院电影网 | 美女视频一区二区三区 |