找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2430|回复: 2
收起左侧

舵机转头电风扇的单片机源程序

[复制链接]
ID:291220 发表于 2018-8-14 09:56 | 显示全部楼层 |阅读模式


单片机源程序如下:
  1. #include<reg51.h>
  2. #define  uchar unsigned char
  3. #define  uint unsigned int
  4. sbit IN1=P1^0;
  5. sbit IN2=P1^1;
  6. sbit ENA=P1^2;
  7. sbit key1=P1^4;
  8. sbit key2=P1^5;
  9. sbit key3=P1^6;       
  10. sbit key4=P2^5;
  11. sbit DUOJI = P2^4;
  12. uchar sudu;
  13. uchar pwm_t;


  14. void UsartConfiguration();

  15. void delay(uint z)
  16. {
  17.         uint x,y;
  18.         for(x=z; x>0; x--)
  19.                 for(y=110; y>0; y--);
  20. }
  21. void delay_us(uint aa)
  22. {
  23.         while(aa--);
  24. }
  25. void fengshan()
  26. {       
  27.         IN1 = 1;  //正转
  28.         IN2 = 0;

  29. }
  30. void ZD(uint a)
  31. {
  32.          DUOJI=1;
  33.          delay(a);
  34.   
  35.      
  36.          DUOJI=0;
  37.          delay(40-a);
  38. }

  39. void duoji()
  40.   
  41. {  
  42.                 if(key4 == 0)
  43.                 {
  44.                         delay(10);
  45.                         if(key4 == 0)
  46.                         {         
  47.                     while(1)
  48.                                 {
  49.                                         ZD(0.0);
  50.                                         ZD(0.1);
  51.                                         ZD(0.2);
  52.                                         ZD(0.3);
  53.                                         ZD(0.4);
  54.                                         ZD(0.5);
  55.                                         ZD(0.6);
  56.                                         ZD(0.7);
  57.                                         ZD(0.8);
  58.                                         ZD(0.9);
  59.                                         ZD(1.0);
  60.                                         ZD(1.1);
  61.                                         ZD(1.2);
  62.                                         ZD(1.8);
  63.                                         ZD(1.9);
  64.                                         ZD(2.0);
  65.                                         ZD(2.1);
  66.                                         ZD(2.2);
  67.                                         ZD(2.3);
  68.                                         ZD(2.4);
  69.                                         ZD(2.5);
  70.                                         ZD(2.6);
  71.                                         ZD(2.7);
  72.                                         ZD(2.8);
  73.                                         ZD(2.9);
  74.                                         ZD(3.0);
  75.                                         ZD(3.1);       
  76.                                         ZD(3.2);
  77.                                         ZD(3.3);
  78.                                         ZD(3.4);
  79.                                         ZD(3.5);
  80.                                         ZD(3.6);
  81.                                         delay(100);
  82.                                         if(key4==0)
  83.                                         {         delay(10);
  84.                                                 if(key4 == 0)
  85.                                                 {
  86.                                                    break;         
  87.                                                 }
  88.                                         }
  89.                                                 while(!key4);  
  90.                                 }                 
  91.                        
  92.                         }  
  93.                 }     
  94.                 while(!key4);     
  95.        

  96. }
  97. void timer1() interrupt 3
  98. {
  99.         TH1=(65536-50000)/256;
  100.         TL1=(65536-50000)%256;
  101.     if(        pwm_t<sudu)
  102.        ENA=1;
  103.     else
  104.        ENA=0;        
  105.     pwm_t++;      
  106.     if(        pwm_t>=100)
  107.             pwm_t=0;      

  108. }         

  109. void keyscan()
  110. {
  111.         if(key1 == 0)
  112.         {
  113.                 delay(10);
  114.                 if(key1 == 0)
  115.                 {
  116.                     sudu=10;
  117.                         fengshan();
  118.                         ENA=1;
  119.                         delay(500);
  120.                         pwm_t=0;
  121.                         fengshan();
  122.                         ENA=0;
  123.                         if(pwm_t==100)
  124.                         {                 fengshan();
  125.                                 ENA=0;
  126.                                 pwm_t=0;
  127.                         }  
  128.                 }
  129.         }
  130.     while(!key1);
  131.         if(key2 == 0)
  132.         {
  133.                 delay(10);
  134.                 if(key2 == 0)
  135.                 {
  136.                         sudu=30;
  137.                                 fengshan();
  138.                         ENA=1;
  139.                         delay(500);
  140.                         pwm_t=0;
  141.                                 fengshan();
  142.                         ENA=0;

  143.                 if(pwm_t==100)
  144.                 {                        fengshan();
  145.                         ENA=0;
  146.                         pwm_t=0;
  147.                 }  
  148.                 }
  149.         }
  150.         while(!key2);

  151.         if(key3 == 0)
  152.         {
  153.                 delay(10);
  154.                 if(key3 == 0)
  155.                 {
  156.                         sudu=60;
  157.                                 fengshan();
  158.                         ENA=1;
  159.                         delay(500);
  160.                         pwm_t=0;
  161.                                 fengshan();
  162.                         ENA=0;
  163.        
  164.                 if(pwm_t==100)
  165.                 {                 fengshan();
  166.                         ENA=0;
  167.                         pwm_t=0;
  168.                 }                
  169.                 }
  170.         }
  171.         while(!key3);
  172. }


  173. void UsartConfiguration()
  174. {
  175.         //SCON=0X50;                        //设置为工作方式1
  176.         TMOD=0X01;                        //设置计数器工作方式2
  177. //        PCON=0X80;                        //波特率加倍

  178.         TH1=(65536-50000)/256;
  179.         TL1=(65536-50000)%256;

  180.         EA=1;                                               
  181.         ET1 = 1;
  182.         TR1 = 1;
  183.        
  184. }

  185.        
  186. void main()
  187. {
  188.         UsartConfiguration();
  189.         pwm_t=0;
  190.         while(1)
  191.         {               
  192.                
  193.                 keyscan();
  194.                 duoji();
  195.        
  196.        
  197.         }

  198.        

  199. }       

  200.          
复制代码

所有资料51hei提供下载:
简易电风扇.zip (1023 Bytes, 下载次数: 13)
回复

使用道具 举报

ID:1 发表于 2018-8-14 17:58 | 显示全部楼层
补全原理图与说明后即可获得积分
回复

使用道具 举报

ID:291220 发表于 2018-8-15 08:58 | 显示全部楼层
仿真图

24 温度控制直流电机转速.zip

49.5 KB, 下载次数: 13, 下载积分: 黑币 -5

protues仿真图

回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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