找回密码
 立即注册

QQ登录

只需一步,快速开始

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

1602温度显示+步进电机

[复制链接]
跳转到指定楼层
楼主
ID:438586 发表于 2018-12-3 18:03 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
  1. #include <reg52.H>
  2. #include <intrins.H>
  3. #include <math.H>
  4. #define uchar unsigned char
  5. #define uint unsigned int
  6. #define bujindianji P1
  7.         sbit dula = P2^6;
  8.   sbit wela = P2^7;
  9.   sbit RS = P3^5;   
  10.   sbit LCDEN = P3^4;
  11. sbit buzzer = P2^3;
  12. int w;
  13. int a;
  14. uchar phasecw[4] ={0x08,0x04,0x02,0x01};
  15. uchar phaseccw[4]={0x01,0x02,0x04,0x08};

  16. void delay(uint p)
  17. {
  18.         while(p++);
  19. }
  20. void Delay_xms(uint x)
  21. {
  22. uint i,j;
  23. for(i=0;i<x;i++)
  24.   for(j=0;j<112;j++);
  25. }

  26. void MotorCW(void)
  27. {
  28. uchar i;
  29.         uchar f;
  30.         for(f=0;f<60;f++)
  31.         {
  32. for(i=0;i<4;i++)
  33.   {
  34.    bujindianji=phasecw[i];
  35.    Delay_xms(4);
  36.   }
  37.         
  38. }
  39. }

  40. void MotorCCW(void)
  41. {
  42. uchar i;
  43.         uchar f;
  44.         for(f=0;f<60;f++)
  45.         {
  46. for(i=0;i<4;i++)
  47.   {
  48.    bujindianji=phaseccw[i];
  49.    Delay_xms(4);
  50.   }
  51. }
  52. }

  53. void MotorStop(void)
  54. {
  55. bujindianji=0x00;
  56. }


  57. void delayUs()
  58. {
  59.     _nop_();
  60. }

  61. void delayMs(uint a)
  62. {
  63.     uint i, j;
  64.     for(i = a; i > 0; i--)
  65.         for(j = 100; j > 0; j--);
  66. }


  67. void writeComm(uchar comm)
  68. {
  69.      RS = 0;   
  70.     P0 = comm;
  71.     LCDEN = 1;
  72.      delayUs();
  73.     LCDEN = 0;
  74.     delayMs(1);
  75. }

  76. //写数据:RS=1, RW=0;
  77. void writeData(uchar dat)
  78. {
  79.      RS = 1;
  80.      P0 = dat;
  81.      LCDEN = 1;
  82.     delayUs();
  83.     LCDEN = 0;
  84.     delayMs(1);
  85. }


  86. void init()
  87. {

  88.      dula = wela = 0;
  89.     writeComm(0x38);
  90.    writeComm(0x0c);
  91.     writeComm(0x06);
  92.     writeComm(0x01);
  93. }

  94. void writeString(uchar * str, uchar length)
  95. {
  96.      uchar i;
  97.     for(i = 0; i < length; i++)
  98.     {
  99.          writeData(str[i]);
  100.      }
  101. }

  102. /**//*****************************DS18B20*******************************/
  103. sbit ds = P2^2;
  104. void dsInit()
  105. {

  106.     unsigned int i;  
  107.     ds = 0;
  108.     i = 100;  
  109.      while(i>0) i--;
  110.     ds = 1;   
  111.     i = 4;
  112.      while(i>0) i--;
  113. }

  114. void dsWait()
  115. {
  116.       unsigned int i;
  117.       while(ds);  
  118.       while(~ds);
  119.       i = 4;
  120.       while(i > 0) i--;
  121. }


  122. bit readBit()
  123. {
  124.     unsigned int i;
  125.     bit b;
  126.     ds = 0;
  127.     i++;   
  128.     ds = 1;
  129.    i++; i++;  
  130.     b = ds;
  131.     i = 8;
  132.     while(i>0) i--;
  133.     return b;
  134. }

  135. unsigned char readByte()
  136. {
  137.     unsigned int i;
  138.     unsigned char j, dat;
  139.    dat = 0;
  140.     for(i=0; i<8; i++)
  141.     {
  142.         j = readBit();

  143.         dat = (j << 7) | (dat >> 1);
  144.     }
  145.     return dat;
  146. }


  147. void writeByte(unsigned char dat)
  148. {
  149.     unsigned int i;
  150.     unsigned char j;
  151.     bit b;
  152.     for(j = 0; j < 8; j++)
  153.     {
  154.         b = dat & 0x01;
  155.         dat >>= 1;

  156.         if(b)   
  157.         {
  158.            ds = 0;          i++; i++;  
  159.             ds = 1;   
  160.             i = 8; while(i>0) i--;  
  161.         }
  162.         else  
  163.         {
  164.             ds = 0;
  165.           i = 8; while(i>0) i--;  
  166.             ds = 1;
  167.            i++; i++;
  168.         }
  169.    }
  170. }


  171. void sendChangeCmd()
  172. {
  173.     dsInit();   
  174.     dsWait();   
  175.     delayMs(1);   
  176.     writeByte(0xcc);
  177.     writeByte(0x44);
  178. }

  179. void sendReadCmd()
  180. {
  181.     dsInit();
  182.     dsWait();
  183.     delayMs(1);
  184.     writeByte(0xcc);
  185.     writeByte(0xbe);
  186. }


  187. int getTmpValue()
  188. {
  189.     unsigned int tmpvalue;
  190.     int value;
  191.     float t;
  192.     unsigned char low, high;
  193.     sendReadCmd();

  194.     low = readByte();
  195.     high = readByte();

  196.     tmpvalue = high;
  197.     tmpvalue <<= 8;
  198.     tmpvalue |= low;
  199.     value = tmpvalue;

  200.   \
  201.     t = value * 0.0625;
  202.     \
  203.     value = t * 100 + (value > 0 ? 0.5 : -0.5); //大于0加0.5, 小于0减0.5
  204.     return value;
  205. }
  206. void bijiao()
  207. {
  208.         int i,j,c;
  209.         i=getTmpValue();
  210.         i=i/100;
  211.         delay(50);
  212.         j=getTmpValue();
  213.         j=j/100;
  214.                 c=getTmpValue();
  215.         a=i-j;
  216.         if(a>0)
  217.         {
  218.                 MotorCCW();
  219.                 Delay_xms(100);
  220.                  MotorStop();
  221.         }
  222.         if(a<0)
  223.         {
  224.                  MotorCW();
  225.                 Delay_xms(100);
  226.                 MotorStop();
  227.         }
  228.         
  229. }

  230. void display(int v)
  231. {
  232.     unsigned char count;
  233.     unsigned char datas[] = {0, 0, 0, 0, 0};
  234.     unsigned int tmp = abs(v);
  235.     datas[0] = tmp / 10000;
  236.     datas[1] = tmp % 10000 / 1000;
  237.     datas[2] = tmp % 1000 / 100;
  238.     datas[3] = tmp % 100 / 10;
  239.     datas[4] = tmp % 10;
  240.     writeComm(0x80+3);
  241.     if(v < 0)
  242.     {
  243.         writeString("- ", 2);
  244.    }
  245.     else
  246.     {
  247.        writeString("+ ", 2);
  248.     }
  249.     if(datas[0] != 0)
  250.     {
  251.         writeData('0'+datas[0]);
  252.     }
  253.     for(count = 1; count != 5; count++)
  254.     {
  255.         writeData('0'+datas[count]);
  256.         if(count == 2)
  257.         {
  258.             writeData('.');
  259.         }
  260.                         }
  261.                                 
  262. }
  263. /**//*****************************DS18B20*******************************/

  264. void main()
  265. {
  266.     sendChangeCmd();
  267.     init();
  268.     while(1)
  269.     {
  270.                         w=getTmpValue();
  271.                         if(w>=3000)
  272.                         { bijiao();}
  273.         delayMs(1000); //温度转换时间需要750ms以上
  274.         writeComm(0x80);
  275.         display(getTmpValue());
  276.         sendChangeCmd();
  277.     }
  278. }
复制代码

步进电机驱动板原理图和连接图.pdf

631.47 KB, 下载次数: 6, 下载积分: 黑币 -5

评分

参与人数 1黑币 +50 收起 理由
admin + 50 共享资料的黑币奖励!

查看全部评分

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

使用道具 举报

沙发
ID:1 发表于 2018-12-4 04:20 | 只看该作者
补全原理图或者详细说明一下电路连接即可获得100+黑币
回复

使用道具 举报

板凳
ID:438586 发表于 2018-12-12 21:28 | 只看该作者
admin 发表于 2018-12-4 04:20
补全原理图或者详细说明一下电路连接即可获得100+黑币

已附舵机文件
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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