找回密码
 立即注册

QQ登录

只需一步,快速开始

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

电机调速+1602显示程序

[复制链接]
跳转到指定楼层
楼主
ID:518059 发表于 2021-1-5 13:15 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
  1. #include <reg51.h>
  2. #include"lcd.h"

  3. #define uint unsigned int
  4. #define uchar unsigned char
  5. unsigned char table2[]={"Speed control   "};
  6. unsigned char table1[]={"Model:1      OFF"};
  7. sbit PWM_OUT = P1^0;
  8. sbit KEY1 = P3^1;  //    ON/OFF
  9. sbit KEY2 = P3^0; //     1档
  10. sbit KEY3 = P3^2; //     2档
  11. sbit KEY4 = P3^3; //     3档

  12. uchar heigh = 1;  //档位大小标志  1:1档  2:2档  3:3档
  13. bit ON_OFF = 0;   //0:OFF 1:ON
  14. uchar time_1ms = 0;

  15. void T0_init();
  16. void Delay5ms();        //@11.0592MHz
  17. void kaiguan()
  18. {
  19.     if(ON_OFF == 0)
  20.     {
  21.         LcdWriteCom(0x80+0x40+13);
  22.         LcdWriteData('O');
  23.         LcdWriteCom(0x80+0x40+14);
  24.         LcdWriteData('F');
  25.         LcdWriteCom(0x80+0x40+15);
  26.         LcdWriteData('F');
  27.     }
  28.     else
  29.     {
  30.         LcdWriteCom(0x80+0x40+13);
  31.         LcdWriteData(' ');
  32.         LcdWriteCom(0x80+0x40+14);
  33.         LcdWriteData('O');
  34.         LcdWriteCom(0x80+0x40+15);
  35.         LcdWriteData('N');
  36.     }
  37. }

  38. void main()
  39. {
  40.     unsigned char i,j;
  41.     LcdInit();
  42.     T0_init();
  43.     for(i=0;i<16;i++)
  44.     {
  45.         LcdWriteCom(0x80+i);
  46.         LcdWriteData(table2[i]);   
  47.     }
  48.     for(j=0;j<16;j++)
  49.     {
  50.         LcdWriteCom(0x80+0x40+j);
  51.         LcdWriteData(table1[j]);   
  52.     }
  53.    
  54.     while(1)
  55.     {
  56.         //开关按键检测
  57.         if(KEY1 == 0)
  58.         {
  59.             Delay5ms();//软件按键消抖处理
  60.             if(KEY1 == 0)
  61.             {
  62.                 ON_OFF = !ON_OFF;
  63.             }
  64.             while(KEY1 == 0);//按键松手检测
  65.         }
  66.         
  67.         //1档按键检测
  68.         if(KEY2 == 0)
  69.         {
  70.             Delay5ms();//软件按键消抖处理
  71.             if(KEY2 == 0)
  72.             {
  73.                 heigh = 1;
  74.             }
  75.             while(KEY2 == 0);//按键松手检测
  76.         }

  77.         //2档按键检测
  78.         if(KEY3 == 0)
  79.         {
  80.             Delay5ms();//软件按键消抖处理
  81.             if(KEY3 == 0)
  82.             {
  83.                 heigh = 2;
  84.             }
  85.             while(KEY3 == 0);//按键松手检测
  86.         }
  87.    
  88.         //3档按键检测
  89.         if(KEY4 == 0)
  90.         {
  91.             Delay5ms();//软件按键消抖处理
  92.             if(KEY4 == 0)
  93.             {
  94.                 heigh = 3;
  95.             }
  96.             while(KEY4 == 0);//按键松手检测
  97.         }
  98.         LcdWriteCom(0x80+0x40+6);
  99.         LcdWriteData('0'+heigh);
  100.         kaiguan();
  101.     }
  102.    
  103.    
  104. }

  105. /*定时器0初始化函数*/
  106. void T0_init()
  107. {
  108.     TMOD = 0X01;            //定时器0工作模式1
  109.     TH0 = (65536-1000)/256;
  110.     TL0 = (65536-1000)%256; //定时中断时间为1MS
  111.     EA = 1;                 //允许总中断
  112.     ET0 = 1;                //允许定时器0中断
  113.     TR0 =  1;              //开始计时
  114. }

  115. void Delay5ms()        //@11.0592MHz
  116. {
  117.     unsigned char i, j;

  118.     i = 18;
  119.     j = 244;
  120.     do
  121.     {
  122.         while (--j);
  123.     } while (--i);
  124. }

  125. void time0() interrupt 1
  126. {
  127.    
  128.     time_1ms++;
  129.     if(time_1ms >= 10) //脉冲周期为10MS
  130.         time_1ms = 0;
  131.    
  132.    
  133.     if(ON_OFF == 1)
  134.     {
  135.       if(heigh == 1)  //如果是1档
  136.         {
  137.             if(time_1ms<=4)
  138.             {
  139.                 PWM_OUT =1;
  140.             }
  141.             else PWM_OUT = 0;
  142.         }
  143.         
  144.       if(heigh == 2)  //如果是2档
  145.         {
  146.             if(time_1ms<=7)
  147.             {
  148.                 PWM_OUT = 1;
  149.             }
  150.             else PWM_OUT = 0;
  151.         }
  152.         
  153.       if(heigh == 3)  //如果是3档
  154.         {
  155.             PWM_OUT = 1;
  156.         }
  157.     }
  158.    
  159.     else PWM_OUT =0;
  160.    
  161.     TH0 = (65536-1000)/256;
  162.     TL0 = (65536-1000)%256; //定时中断时间为1MS
  163. }
复制代码

电机调速+1602显示.zip

33.07 KB, 下载次数: 10, 下载积分: 黑币 -5

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

使用道具 举报

沙发
ID:328014 发表于 2021-1-5 17:15 | 只看该作者
直流电机还是步进电机能分享下电路图吗?
回复

使用道具 举报

板凳
ID:518059 发表于 2021-1-10 21:14 | 只看该作者
51hei团团 发表于 2021-1-5 17:15
直流电机还是步进电机能分享下电路图吗?

步进电机,直流电机原理不同
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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