找回密码
 立即注册

QQ登录

只需一步,快速开始

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

直流电机调速(lcd602显示转速)

[复制链接]
跳转到指定楼层
楼主
ID:71407 发表于 2014-12-31 13:28 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

  1. #include<reg51.h>
  2. #define uchar unsigned char
  3. #define uint unsigned int
  4. /* 端口定义*/
  5. sbit in1=P1^0;
  6. sbit in2=P1^1;
  7. sbit jian=P2^0;
  8. sbit jia=P2^1;
  9. sbit dir=P2^2;
  10. sbit run=P2^3;
  11. sbit inter_0=P3^2;
  12. sbit inter_1=P3^3;
  13. #define LCD_data  P0             //数据口
  14. sbit LCD_RS  =  P2^7;            //寄存器选择输入
  15. sbit LCD_RW  =  P2^6;            //液晶读/写控制
  16. sbit LCD_EN  =  P2^5;            //液晶使能控制
  17. sbit LCD_PSB =  P2^4;            //串/并方式控制
  18. uchar t10,t1,ce,cj,s1=0,pl=10;
  19. uchar zi[]={"电机转速:"};
  20. uchar num[3];
  21. uint nums=0,speed,k=1200;
  22. void delay_1ms(uchar x)
  23. {
  24. uchar i,j;
  25. for(j=0;j<x;j++)
  26. for(i=0;i<110;i++);
  27. }
  28. /*******************************************************************/
  29. /*                                                                 */
  30. /*写指令数据到LCD                                                  */
  31. /*RS=L,RW=L,E=高脉冲,D0-D7=指令码。                             */
  32. /*                                                                 */
  33. /*******************************************************************/
  34. void write_cmd(uchar cmd)
  35. {                        
  36.     LCD_RS = 0;
  37.     LCD_RW = 0;
  38.     LCD_EN = 0;
  39.     P0 = cmd;
  40. delay_1ms(5);
  41.     LCD_EN = 1;
  42. delay_1ms(5);
  43.     LCD_EN = 0;
  44. }
  45. /*******************************************************************/
  46. /*                                                                 */
  47. /*写显示数据到LCD                                                  */
  48. /*RS=H,RW=L,E=高脉冲,D0-D7=数据。                               */
  49. /*                                                                 */
  50. /*******************************************************************/
  51. void write_dat(uchar dat)
  52. {                        
  53.     LCD_RS = 1;
  54.     LCD_RW = 0;
  55.     LCD_EN = 0;
  56.     P0 = dat;
  57. delay_1ms(5);
  58.     LCD_EN = 1;
  59. delay_1ms(5);
  60.     LCD_EN = 0;
  61. }
  62. /*********************************************************/
  63. /*                                                       */
  64. /* 设定显示位置                                          */
  65. /*                                                       */
  66. /*********************************************************/
  67. void lcd_pos(uchar X,uchar Y)
  68. {                        
  69.    uchar  pos;
  70.    if (X==0)
  71.      {X=0x80;}
  72.    else if (X==1)
  73.      {X=0x90;}
  74.    else if (X==2)
  75.      {X=0x88;}
  76.    else if (X==3)
  77.      {X=0x98;}
  78.    pos = X+Y ;
  79.    write_cmd(pos);     //显示地址
  80. }
  81. /*******************************************************************/
  82. /*                                                                 */
  83. /*  LCD初始化设定                                                  */
  84. /*                                                                 */
  85. /*******************************************************************/
  86. void lcd_init()
  87. {
  88.     LCD_PSB = 1;         //并口方式
  89.     write_cmd(0x30);      //基本指令操作
  90.     delay_1ms(5);
  91.     write_cmd(0x0C);      //显示开,关光标
  92.     delay_1ms(5);
  93.     write_cmd(0x01);      //清除LCD的显示内容
  94.     delay_1ms(5);
  95. }
  96. void main()
  97. {TMOD=0x02;
  98. TH0=0X6;
  99. TL0=0X6;
  100. EA=1;
  101. ET0=1;
  102. TR0=1;
  103. IT0=1;
  104. EX0=1;
  105. IT1=1;
  106. EX1=1;
  107. PX1=1;
  108. PT0=1;
  109. t10=1;
  110. t1=10;
  111. delay_1ms(10);                 //延时
  112.     lcd_init();
  113.     lcd_pos(0,2);         
  114.     write_dat(zi[0]);     
  115. write_dat(zi[1]);  
  116.                
  117. write_dat(zi[2]);  
  118. write_dat(zi[3]);   
  119.             
  120. write_dat(zi[4]);     
  121. write_dat(zi[5]);
  122.             
  123. write_dat(zi[6]);     
  124. write_dat(zi[7]);
  125.            
  126. write_dat(zi[8]);     
  127. while(1);
  128. }
  129. count0(void) interrupt 1
  130. {pl--;
  131. if(pl==0)
  132.    {k--;
  133.    if(k==0)
  134.    {k=1200;
  135.    speed=nums/3;
  136.    num[0]=speed%10+48;
  137.    num[1]=speed/10%10+48;
  138.    num[2]=speed/100+48;
  139.    lcd_pos(1,3);         
  140.     write_dat(num[2]);     
  141. write_dat(num[1]);
  142.     write_dat(num[0]);
  143.     nums=0;
  144.    }
  145.    pl=10;
  146.     s1++;
  147.   if(run==1)
  148.    {if(dir==1)
  149.       {if(s1<=t10)
  150.           {in1=1;
  151.            in2=0;}
  152.        if((s1>t10)&&(s1<=t1))
  153.           {in1=0;in2=0;}
  154.    }
  155.    else
  156.      {if(s1<=t10)
  157.       {in2=1;
  158.        in1=0;}
  159.       if((s1>t10)&&(s1<=t1))
  160.         {in2=0;in1=0;}
  161.   }
  162.    }
  163.   else
  164.   {in1=0;in2=0;}
  165.      if(s1>=t1)
  166.          s1=0;
  167. }
  168. }

  169. int_0(void) interrupt 0
  170. {delay_1ms(15);
  171. if(inter_0==0)
  172. {if(jian==0)
  173.   {if(t10>=1)
  174.   t10--;
  175.   }
  176. if(jia==0)
  177.    {if(t10<10)
  178.      t10++;}
  179. }
  180. }
  181. int_1(void) interrupt 2
  182. {nums++;}
复制代码


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

使用道具 举报

沙发
ID:121039 发表于 2016-6-4 23:04 | 只看该作者
发个图看看
回复

使用道具 举报

板凳
ID:158687 发表于 2016-12-29 16:51 | 只看该作者
能不能看下原理图,谢谢
回复

使用道具 举报

地板
ID:736988 发表于 2020-5-14 17:26 | 只看该作者
发一下仿真图,谢谢啦
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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