找回密码
 立即注册

QQ登录

只需一步,快速开始

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

单片机PWM调温 无反应 求帮助

[复制链接]
跳转到指定楼层
楼主
主要通过Protues和Keil联合仿真

单片机源程序如下:
  1. #include <reg52.h>
  2. //#include <at89x52.h>
  3. //#include <keyscan.h>
  4. extern void scan_full(void);
  5. extern unsigned char key_scan(void);
  6. extern bit key_ok;
  7. unsigned char pwm_set,key_value;
  8. unsigned char count;
  9. sbit PWM=P3^6;
  10. bit up,down,set_flag;
  11. unsigned char code BCD[]={0x3f,0x06,0x5b,0x4f, //此处是将0-F转换成相应的BCD码
  12.                           0x66,0x6d,0x7d,0x07,
  13.                           0x7f,0x6f,0x77,0x7c,
  14.                           0x39,0x5e,0x79,0x71};
  15. void delay1(unsigned char t)
  16. {
  17. while(t--);
  18. }



  19. void pwm(void) interrupt 5//定时器2产生PWM波形
  20. {
  21.         TF2=0;                                        //定时器2的溢出标志要软件清除,
  22.                                                         //但当RCLK或TCLK为1时由硬件清除
  23.         if((count>=pwm_set)&&(count<10))
  24.                 PWM=1;
  25.         else        PWM=0;       
  26.         count++;       
  27.         if(count==10)
  28.         count=0x00;
  29.        
  30. }


  31. void key_pwm(unsigned char x)//把键值转化为PWM设置值
  32. {
  33.         switch(x)                                //把矩阵键盘转化为独立键盘
  34.         {
  35.                 case 1:up=1;break;
  36.                 case 2:down=1;break;
  37.                 case 3:set_flag=!set_flag;break;
  38.                 default:break;
  39.         }
  40.        
  41.         if(up&&set_flag)                //设置PWM参数:pwm_set
  42.         {
  43.                 pwm_set++;
  44.                 up=0;
  45.                 if(pwm_set>=10)
  46.                 pwm_set=0x00;
  47.         }
  48.         if(down&&set_flag)
  49.         {
  50.                 pwm_set--;
  51.                 down=0;
  52.                 if(pwm_set==0xff)
  53.                 pwm_set=9;
  54.         }
  55.         if(!set_flag)
  56.         {
  57.                 up=0;
  58.                 down=0;
  59.         }
  60. }


  61. void main(void)
  62. {
  63.         TH2=0xb1;        //定时20MS
  64.         TL2=0xe0;
  65.         RCAP2H=0xb1;//定时器2溢出时会把这个单元的内容送到TH2和TL2中
  66.         RCAP2L=0xe0;
  67.         EA=1;
  68.         ET2=1;
  69.         TR2=1;
  70.         while(1)
  71.         {
  72.                 scan_full();        //看是否有键按下
  73.                 if(key_ok)                //有键按下,则判断到底是哪个键按下
  74.                 {
  75.                         key_value=key_scan();//键值送key_value暂存
  76.                         P0=~BCD[key_value];         /*此三句是将键值显示出来*/
  77.                           P2=0xfe;                        /**                                                 */
  78.                         delay1(200);                /*************************/
  79.                         key_pwm(key_value);  //调用键值转PWM设置参数函数
  80.                         key_value=0x00;                 //清除键值,以免一次按下,多次响应
  81.                 }
  82.                 P0=~BCD[pwm_set];                /***此三句是将pwm_set值显示出来*/
  83.                 P2=0xfd;                                /*******                                        */
  84.                 delay1(200);                        /****************************/
  85.         }
  86. }
复制代码

所有资料51hei提供下载:
PWM调温.zip (55.67 KB, 下载次数: 3)




51hei图片20200702095442.png (121.91 KB, 下载次数: 49)

51hei图片20200702095442.png
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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