找回密码
 立即注册

QQ登录

只需一步,快速开始

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

51单片机pwm波调速加LCD显示程序,加LCD后电机转的不连续求大佬分析原因.

[复制链接]
跳转到指定楼层
楼主
ID:215224 发表于 2017-12-10 19:43 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
#include "lcd.h"
#include <REG52.H>
#define PLUS_PER 330
extern int  interruptcounter;        //ía2¿ÖD¶Ï′Îêy
extern unsigned int speed ;
extern unsigned long PlusCounter;       //ía2¿Âö3å¸öêy
void LCD_Write_String(unsigned char *p);
void LcdWriteData(uchar dat);                                     //D′èëêy¾Y
void LcdWriteCom(uchar com)        ;                 //D′èëÃü
void LcdInit();                                                                    //LCD3õê¼»ˉ×ó3ìDò
void gotoxy(unsigned char x,unsigned char y); //ÔúxDDyáDÏÔê¾êy¾Y
void ClacSpeed()                             //êy¾Y′|àíoˉêy
    {    int speed ;
                           unsigned long PlusCounter;  
         PlusCounter =interruptcounter;
         speed =(PlusCounter/PLUS_PER)*60;//ÿ·ÖÖóμÄ×aêy
                           {   
//                                                 gotoxy(1,1);
//                                                 LCD_Write_String("V= ");
//                                                 gotoxy(1,3);
//                                                 LcdWriteData((speed/1000)%10+0x30);
//                                                 gotoxy(1,4);
//                                                 LcdWriteData((speed/100)%10+0x30);       
//                                                 gotoxy(1,5);
//                                                 LcdWriteData((speed/10)%10+0x30);
//                                                 gotoxy(1,6);
//                                                 LcdWriteData(speed%10+0x30);
//                                                 gotoxy(1,7);
//                                                 LCD_Write_String("r");
//                                                 gotoxy(1,8);
//                                                 LCD_Write_String("/");
//                                                 gotoxy(1,9);
//                                                 LCD_Write_String("m");
//                                                 gotoxy(1,10);
//                                                 LCD_Write_String("i");
//                                                 gotoxy(1,11);
//                                                 LCD_Write_String("n");
                                                 interruptcounter=0;                       
          }       
  }                                 
void gotoxy(unsigned char x,unsigned char y) //ÔúxDDyáDÏÔê¾êy¾Y
{
        if(x==1)
        {
                 LcdWriteCom(0x80+y-1);
        }
        if(x==2)
         {
                 LcdWriteCom(0xc0+y-1);
         }
}


评分

参与人数 1黑币 +5 收起 理由
326564735 + 5 很给力!

查看全部评分

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

使用道具 举报

沙发
ID:162421 发表于 2017-12-11 09:55 | 只看该作者
我之前参加一个比赛就是这个直流电机控制加12864显示,加蓝牙控制。你分析下就知道了,因为12864刷新里面有延时,pwm是通过延时函数模拟出来的,肯定彼此刷新是会有影响。你可以在定时器里刷新12864并且把中断设为低优先级,把pwm刷新也放在定时器(定时器不同),这个设为高优先级,这样高优先级的中断肯定会打断低优先级的中断,这样pwm就能正常输出了,但可能lcd会显示不正常。lcd也可以放在wile循环中,设置一个数让他加到一定时间去刷新lcd,pwm就交给定时器,pwm的刷新不用延时函数
回复

使用道具 举报

板凳
ID:215224 发表于 2017-12-11 15:03 | 只看该作者
谢谢大佬,看来都遇到过这样的问题啊,我也是这么做的可最后还是不好使
回复

使用道具 举报

地板
ID:164602 发表于 2017-12-12 09:08 | 只看该作者
我的应用PWM体会:
第一、一定要用定时器中断。用延时产生PWM波,只能是一个任务情况下,其实就是个演示,在真的工作应用时,一定用中断。
第二、最好用高级的单片机,那怕是51的,也有高级的,如STC15系列,那才是好,只要设置几个寄存器就可以了,程序量大大减少,以前编程时避不过的难题都没有了(呵呵,暂时还没有碰到,哪里有没难题的,主要是针对以前低级51单片机编程而言)。
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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