历史上的今天
返回首页

历史上的今天

今天是:2024年11月26日(星期二)

正在发生

2020年11月26日 | 通过单片机pcf8591电位器控制直流电机正反转

2020-11-26 来源:51hei

单片机源程序如下:

#include

#include


typedef unsigned char uint8;

typedef unsigned int uint16;

typedef unsigned long uint32;

sbit PWM01=P1^4;                                       

sbit PWM02=P1^5;                                                  //电机1

sbit PWM11=P1^6;                                       

sbit PWM12=P1^7;                                                   //电机2

sbit PWM21=P2^2;                                       

sbit PWM22=P2^3;                                                        //电机3

sbit PWM31=P3^6;                                       

sbit PWM32=P3^7;                                                   //电机4

sbit ADDRC = P1^0;

sbit ADDRB = P1^1;

sbit ADDRA = P1^2;//控制138译码器的三个引脚

uint8 AD_value0 = 0;//AD值

uint8 AD_value1 = 0;//AD值

uint8 AD_value2 = 0;//AD值

uint8 AD_value3 = 0;//AD值

uint8 Top = 255;

uint8 Low = 0;

uint8 between0 = 127;

uint8 between1 = 128;

sbit I2C_SDA = P2^1;

sbit I2C_SCL = P2^0;//I2C通信的两个引脚


bit flag_300ms = 0;//300ms时间标志位

uint8 T0RH = 0;//定时器高8位初值

uint8 T0RL = 0;//定时器低8位初值

//uint8 AD_value = 0;//AD值

uint8 code led_char[] = {0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,

                                                 0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};//LED段码


void config_timer0(uint8 ms);

uint8 get_ADC_vaule(uint8 chn);

void motor_deal0();

void motor_deal1();

void motor_deal2();

void motor_deal3();

void main()

{

        config_timer0(1);//初始化通用定时器0,定时1ms

        while(1)

        {

                if(flag_300ms == 1)        //判断300ms时间是否到了

                {

                        flag_300ms = 0;//清除标志位

                        AD_value0 = get_ADC_vaule(0);//读取通道0的AD值

                        AD_value1 = get_ADC_vaule(1);//读取通道0的AD值

                        AD_value2 = get_ADC_vaule(2);//读取通道0的AD值

                        AD_value3 = get_ADC_vaule(3);//读取通道0的AD值

                          

                }               

                motor_deal0();       

                motor_deal1();

                motor_deal2();

                motor_deal3();

        }

}

void motor_deal0()

{

        if(AD_value0 == between0 || AD_value0 == between1)                   //stop

                {  

                                PWM01=1;

                                PWM02=1;   

                }

                else if(AD_value0>=Low && AD_value0                {

                                PWM01=0;

                                PWM02=1;

                }

                else                                         //反

                {

                        PWM01=1;

                         PWM02=0;

                }       

}

void motor_deal1()

{

        if(AD_value1 == between0 || AD_value1 == between1)                   //stop

        {  

                        PWM11=1;

                        PWM12=1;

        }

        else if(AD_value1>=Low && AD_value1        {

                        PWM11=0;

                        PWM12=1;

        }

        else                                         //反

        {

                PWM11=1;

                 PWM12=0;

        }       

}

void motor_deal2()

{

        if(AD_value2 == between0 || AD_value2 == between1)                   //stop

        {  

                        PWM21=1;

                        PWM22=1;

        }

        else if(AD_value2>=Low && AD_value2        {

                        PWM21=0;

                        PWM22=1;

        }

        else                                         //反

        {

                PWM21=1;

                 PWM22=0;

        }       

}

void motor_deal3()

{

        if(AD_value3 == between0 || AD_value3 == between1)                   //stop

        {  

                        PWM31=1;

                        PWM32=1;

        }

        else if(AD_value3>=Low && AD_value3        {

                        PWM31=0;

                        PWM32=1;

        }

        else                                         //反

        {

                PWM31=1;

                 PWM32=0;

        }       

}

void I2C_delay()//I2C延时函数

{

        _nop_();

        _nop_();

        _nop_();

        _nop_();

}


void I2C_start()//I2C起始信号

{

        I2C_SDA = 1;

        I2C_SCL = 1;

        I2C_delay();

        I2C_SDA = 0;

        I2C_delay();

        I2C_SCL = 0;

        I2C_delay();

}


void I2C_stop()//I2C停止信号

{

        I2C_SDA = 0;

        I2C_SCL = 0;

        I2C_delay();

        I2C_SCL = 1;

        I2C_delay();

        I2C_SDA = 1;

        I2C_delay();

}


bit I2C_write(uint8 dat)//I2C写一个字节

{

        bit ack = 0;

推荐阅读

史海拾趣

Ambersil公司的发展小趣事

在电子行业的初期,Ambersil公司以其创新的技术和产品迅速崭露头角。公司研发团队成功开发出一种高效的电子清洁剂,能够去除电路板上的顽固污垢,提高电子设备的性能和稳定性。这一创新产品迅速获得了市场的认可,Ambersil公司因此获得了大量的订单,销售额逐年攀升。

EMC [ELAN Microelectronics Corp]公司的发展小趣事

随着公司的发展,义隆电子不断加大研发投入,致力于技术创新和产品多元化。公司拥有一支高素质的研发团队,拥有多项自主知识产权和核心技术。通过不断的技术创新和产品升级,义隆电子成功推出了微控制器、个人计算机外设芯片、数字显示器芯片等一系列具有市场竞争力的产品。同时,公司还积极拓展智能型人机接口技术之应用芯片等新兴领域,为未来的发展奠定了坚实的基础。

台湾肯尼威(CANNYWELL)公司的发展小趣事

随着公司产品的逐渐推广,肯尼威面临着日益激烈的市场竞争。李明深知,要想在竞争中脱颖而出,必须走品质之路。他引入了国际先进的质量管理体系,率先在同行业中通过ISO9001认证。这一举措不仅提高了产品质量,也提升了公司的品牌形象。同时,公司还建立了严格的品质检测流程,确保每一件产品都符合高标准的品质要求。

EG & G Inc公司的发展小趣事

为了进一步扩大市场份额,EG & G Inc公司积极开展市场拓展和国际合作。公司在中国、欧洲等多个国家和地区设立了分支机构,与当地企业建立了紧密的合作关系。同时,公司还积极参与国际展览和交流活动,展示了其先进的技术和产品。这些努力使得EG & G Inc公司在国际市场上获得了更多的机会和认可。

EQCOLOGIC公司的发展小趣事

在电子产品行业,品质是企业生存和发展的关键。EQCOLOGIC公司从成立之初就高度重视品质控制,建立了严格的质量管理体系。公司投入大量资金购买先进的检测设备,确保每一批产品都符合质量要求。同时,EQCOLOGIC还注重员工培训和技能提升,提高员工对品质控制的意识和能力。正是对品质的坚守,让EQCOLOGIC在竞争激烈的市场中赢得了良好的口碑。

Econais公司的发展小趣事

作为一家在电子行业有影响力的企业,Econais深知自己的社会责任。公司积极参与各种公益活动,并致力于推动可持续发展。Econais的产品在设计时就考虑到了环保因素,采用低功耗技术减少能源消耗,并选用环保材料降低对环境的影响。此外,Econais还通过技术创新帮助其他企业实现节能减排的目标。

以上五个故事概述了Econais在电子行业发展中的一些重要里程碑和关键事件。这些故事不仅展示了Econais的技术实力和市场竞争力,也体现了公司的社会责任感和可持续发展的理念。

问答坊 | AI 解惑

Z-Wave单芯片解决方案(ZW0201)

      ZW0201 Z-Wave单芯片是一个用于家庭自动化的完整的无线解决方案,该方案包括一个集成的RF收发器、一个8051微控制器、Z-Wave SW应用编程接口(API),以及用于用户应用软件的闪存。…

查看全部问答>

ARM32位单片机 LM3S系列有没可以代替_nop_()的C51指令的指令?

    开发环境为IAR。     ARM32位单片机 LM3S系列没有_nop_()这条C51指令,我想问下可以用啥代替,精确延时一个机器周期。…

查看全部问答>

51单片机实现PWM线性调频脉冲信号提问?

我用的是AT89C52 想做到0.5KHZ~20KHZ之间精确线性调频脉冲信号,怎么也实现不了,以下是代码,请教一下高手意见! /***************************************************************************** * 程序名称:        ...…

查看全部问答>

弱弱的问:在xp下做驱动程序开发需要安装哪些开发环境

本人第一次接触驱动程序开发,想问一下在xp下做驱动程序开发需要哪些开发环境 还有我下载了vtoolsd3。0能不能在xp下做开发呢…

查看全部问答>

国内白光发光二极管发光粉部分专利信息

replyreload += \',\' + 749676;Timson,如果您要查看本帖隐藏内容请回复…

查看全部问答>

有朋友了解71M6513计量芯片吗?

想用71M6513做电力功率表,坛子里有朋友用吗 ,能否提供点资料啊。…

查看全部问答>

怎样生成bin文件

请问下我用IAR编译环境调试好的代码,怎样转成.bin文件?…

查看全部问答>

STM32固件库V3.5建立keil工程详细步骤

该资料介绍了STM32在keil上的使用,并提供STM32固件库V3.5;和STM32固件库V3.5在keil工程详细步骤。 https://download.eeworld.com.cn/ ... E%8E%E8%8E%8E/23493…

查看全部问答>

手写绘图板一等奖作品资料

有需要你就拿走不需要你就顶起 …

查看全部问答>