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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 5473|回復: 3
打印 上一主題 下一主題
收起左側

51單片機產生PWM控制直流電機LCD顯示程序,仿真

[復制鏈接]
跳轉到指定樓層
樓主
壓縮包中含有程序、仿真圖、HEX文件。

51單片機pwm控制直流電機的仿真原理圖如下(proteus仿真工程可到本帖附件中下載):



單片機源程序如下:
  1. #include <reg52.h>
  2. #include <intrins.h>
  3. #define uchar unsigned char
  4. #define uint unsigned int
  5. #define lcd P0
  6. #define KEY P3
  7. void LCD_Writecmd(uchar cmd);
  8. void LCD_Writedata(uchar dat);
  9. void LCD_write_char(uchar x,uchar y,char ch );
  10. void LCD_write_str(uchar x,uchar y,char str[]);
  11. void LCD_Init(void);
  12. void LCD_clear();
  13. void delay_us(uchar n);
  14. void delay_ms(uchar m);

  15. sbit RW=P2^5;
  16. sbit RS=P2^6;
  17. sbit EN=P2^7;
  18. sbit  pwm1=P1^0;
  19. sbit  pwm2=P1^1;
  20. sbit  pwm=P1^3;
  21. void timer_init();
  22. uchar a=50,b=0,c=0,flag=0,flag1=0;

  23. void main()
  24. {
  25.         LCD_Init();
  26.         timer_init();
  27.         LCD_write_str(0,0,"motor:");
  28.         while(1)
  29.         {
  30.                 b=a/10+0x30;
  31.                 c=a%10+0x30;
  32.                 if(KEY==0xfe)
  33.                 {
  34.                         LCD_clear();
  35.                         LCD_write_str(0,0,"motor:");
  36.                         LCD_write_str(0,1,"ZKB:");
  37.                         LCD_write_str(11,0,"ON");
  38.                         LCD_write_char(8,1,b);
  39.                         LCD_write_char(9,1,c);
  40.                         TR0=1;
  41.                 }       
  42.                 if(KEY==0xfd)
  43.                 {
  44.                         LCD_clear();
  45.                         LCD_write_str(0,0,"motor:");
  46.                         LCD_write_str(0,1,"ZKB:");       
  47.                         LCD_write_str(11,0,"OFF");
  48.                         LCD_write_char(9,1,0);
  49.                         TR0=0;
  50.                         pwm1=0;
  51.                         pwm2=0;
  52.                 }

  53.                 if(KEY==0xfb)
  54.                 {       
  55.                         delay_ms(200);
  56.                         if(KEY!=0xfb)
  57.                         {
  58.                                 flag1=0;
  59.                                 a+=10;
  60.                         }
  61.                 }
  62.                 if(KEY==0xf7)
  63.                 {       
  64.                         delay_ms(200);
  65.                         if(KEY!=0xf7)
  66.                         {
  67.                                 flag1=1;
  68.                                 a-=10;
  69.                         }
  70.                 }
  71.                 if(KEY==0xef)//正轉
  72.                 {
  73.                         pwm=0;
  74.                         delay_ms(200);
  75.                         if(KEY!=0xef)
  76.                         {
  77.                                 LCD_write_str(11,0,"  T");
  78.                                 pwm=pwm1;
  79.                                 TR0=1;
  80.                                 pwm1=0;
  81.                                 pwm2=1;
  82.        
  83.                                
  84.                         }
  85.                 }
  86.         if(KEY==0xdf)//反轉
  87.                 {
  88.                         pwm=0;
  89.                         delay_ms(200);
  90.                         if(KEY!=0xef)
  91.                         {
  92.                                 LCD_write_str(11,0,"  F");
  93.                                 TR0=1;
  94.                                 pwm=pwm2;
  95.                                 pwm1=1;
  96.                                 pwm2=0;

  97.                         }
  98.                 }



  99.                 if(flag1==1)
  100.                 {
  101.                        
  102.                         LCD_write_str(0,0,"motor:");
  103.                         LCD_write_str(0,1,"ZKB:");
  104.                         LCD_write_char(8,1,b);
  105.                         LCD_write_char(9,1,c);
  106.                         if(a<=1)a=99;
  107.                 }
  108.                 if(flag1==0)
  109.                 {
  110.                         LCD_write_str(0,0,"motor:");
  111.                         LCD_write_str(0,1,"ZKB:");
  112.                         LCD_write_char(8,1,b);
  113.                         LCD_write_char(9,1,c);                       
  114.                         if(a>=99)a=0;
  115.                 }
  116.         }

  117. }
  118. /***********************************/
  119. void timer_init()
  120. {
  121.     TMOD=0x01;
  122.     TH0=(65535-a*100)/256;            
  123.     TL0=(65535-a*100)%256;       
  124.         EA=1;
  125.     ET0=1;
  126.         pwm1=1;
  127. }

  128. void timer0() interrupt 1
  129. {
  130.         if(flag)
  131.         {
  132.                 TH0=(65535-a*100)/256;
  133.                 TL0=(65535-a*100)%256;
  134.                 pwm1=1;
  135.                 flag=0;
  136.         }
  137.         else
  138.         {
  139.                 TH0=((65535-(100-a)*100))/256;
  140.                 TL0=((65535-(100-a)*100))%256;
  141.                 pwm1=0;
  142.                 flag=1;
  143.         }
  144. }
  145. /******************************/
  146. void delay_us(uchar n)
  147. {
  148.         for(n=200;n>0;n--);

  149. }

  150. void delay_ms(unsigned char ms)

  151. {
  152.     unsigned char i ;
  153.     while(ms--)
  154.      {
  155.         for(i = 0 ; i < 120 ; i++) ;
  156.      }
  157. }


  158. void LCD_Writecmd(uchar cmd)//寫指令到LCD1602
  159. {
  160.         RS=0;
  161.         delay_us(1);
  162.         RW=0;
  163.         delay_us(1);
  164.        
  165.         EN=1;
  166.         lcd=cmd;
  167.         delay_us(300);
  168.         EN=0;
  169. }


  170. void LCD_Writedata(uchar dat)//寫數據到LCD1602
  171. {
  172.         RS=1;
  173.         delay_us(1);
  174.         RW=0;
  175.         delay_us(1);
  176.         EN=1;
  177.         lcd=dat;
  178.         delay_us(300);
  179.         EN=0;
  180.        
  181. }


  182. void LCD_write_char(uchar x,uchar y,char ch )//在指定位置顯示一個字符
  183. {
  184.         if(y==0)
  185.                 LCD_Writecmd(0x80+x);
  186.         else
  187.                 LCD_Writecmd(0xc0+x);
  188.         LCD_Writedata(ch);

  189. }

  190. void LCD_write_str(uchar x,uchar y,char str[])//使LCD1602顯示一個字符串
  191. {
  192.         uchar i=0;
  193.         if(y==0)
  194.                 LCD_Writecmd(0x80+x);
  195.         else
  196.                 LCD_Writecmd(0xc0+x);
  197.         while(str[i]!='\0')
  198.         {
  199.                 LCD_Writedata(str[i]);
  200.                 ++i;
  201.         }
  202.        
  203. }

  204. void LCD_clear(void)//清屏函數
  205. {
  206.         LCD_Writecmd(0x01);
  207.         delay_ms(5);
  208. ……………………

  209. …………限于本文篇幅 余下代碼請從51黑下載附件…………
復制代碼

所有資料51hei提供下載:
51.zip (24.11 KB, 下載次數: 143)


評分

參與人數 2黑幣 +55 收起 理由
KolalaSA + 5 贊一個!
admin + 50 共享資料的黑幣獎勵!

查看全部評分

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

使用道具 舉報

沙發
ID:195403 發表于 2017-8-4 13:39 | 只看該作者
仿真無法運行 有錯誤
回復

使用道具 舉報

板凳
ID:308395 發表于 2018-5-3 16:28 | 只看該作者
不顯示速度,只有ZKB(占空比)
回復

使用道具 舉報

地板
ID:321836 發表于 2018-7-28 23:56 | 只看該作者
文檔比較老了
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 毛片一区二区三区 | 97伦理| 99综合在线 | 国产999精品久久久影片官网 | www免费视频 | 欧美中文一区 | 色女人天堂| 成人国产一区二区三区精品麻豆 | 国产精品18毛片一区二区 | 99精品一级欧美片免费播放 | caoporon| 呦呦在线视频 | 日韩精品一区二区三区在线观看 | 国产精品欧美一区二区三区不卡 | 欧美啪啪 | 欧美综合国产精品久久丁香 | 99国产视频 | 一区二区三区中文字幕 | 澳门永久av免费网站 | 特级丰满少妇一级aaaa爱毛片 | 免费视频一区二区 | a毛片 | 国产成人免费在线 | a视频在线观看 | 成人国产免费视频 | 亚洲一区中文字幕在线观看 | 宅男伊人 | 国产视频2021 | 在线观看成人 | 欧美成人激情视频 | 欧美炮房 | 成人三区| 亚洲精品视频在线看 | 久久久久亚洲视频 | 91成人免费看片 | 草草网 | 国产成人免费视频网站高清观看视频 | 国产精品亚洲精品 | 久久99精品久久 | 国产69精品久久久久777 | 日韩在线观看网站 |