历史上的今天
返回首页

历史上的今天

今天是:2025年01月08日(星期三)

正在发生

2020年01月08日 | 51单片机6自由度机械臂调试程序,带LCD1602PWM显示

2020-01-08 来源:51hei

以前学习51的时候为了调试机械臂角度编写的程序,用在开发板上也比较方便,但是由于是普通的舵机,不是总线的,所以需要自己洞洞板焊一个供电带电路。

单片机源程序如下:

#include

#include

#define uchar unsigned char

#define uint unsigned int


sbit duoji0=P2^0;          //PWM输出

sbit duoji1=P2^1;

sbit duoji2=P2^2;

sbit duoji3=P2^3;

sbit duoji4=P3^1;

sbit duoji5=P3^0;


#define GPIO_KEY P1


unsigned int k0;   

unsigned int k1; 

unsigned int k2; 

unsigned int k4; 

unsigned int k3; 

unsigned int k5;         //定义下降沿节点


uint dsip[8]={0};

uint j=0;

unsigned char code ASCII[15] =    {'0','1','2','3','4','5','6','7','8','9','.','D',' '};


void delayms(uint xms)

{

  uchar j;

        uint i;

        for(i=xms;i>0;i--)

        for(j=112;j>0;j--);

}


void time0() interrupt 1   

{

        static uint ii0=0;

  TH0=(65536-100)/256;      //以20ms为一个周期,以0.1ms为一个脉冲宽度

  TL0=(65536-100)%256;

  ii0++;

  

        if(ii0<=k0)                      

    duoji0=1;    //0号舵机pwm输出 

  else

    duoji0=0;   

        

        if(ii0<=k1)    //1号舵机pwm输出                     

    duoji1=1;

  else

    duoji1=0;


  if(ii0<=k2)    //2号舵机pwm输出                       

    duoji2=1;

  else

    duoji2=0;  


if(ii0<=k3)     //3号舵机pwm输出                    

    duoji3=1;

  else

    duoji3=0;

        

         if(ii0<=k4)   //4号舵机pwm输出                      

    duoji4=1;

  else

    duoji4=0;

        

         if(ii0<=k5)   //5号舵机pwm输出                     

    duoji5=1;

  else

    duoji5=0;

        

        if(ii0==200)

    ii0=0;

}


void time0init()

{

  TMOD=0x01;

  TH0=(65536-100)/256;

  TL0=(65536-100)%256;

  TR0=1;

  ET0=1;

  EA=1;

}



char KeyDown()

{

        uchar KeyValue=20;

        uchar a=0;

        GPIO_KEY=0x0f;

        if(GPIO_KEY!=0x0f)//读取按键是否按下

        {

                delayms(10);//延时10ms进行消抖

                if(GPIO_KEY!=0x0f)//再次检测键盘是否按下

                {        

                        //测试列

                        GPIO_KEY=0X0F;

                        switch(GPIO_KEY)

                        {

                                case(0X07):        KeyValue=0;break;

                                case(0X0b):        KeyValue=1;break;

                                case(0X0d): KeyValue=2;break;

                                case(0X0e):        KeyValue=3;break;

                        }

                        //测试行

                        GPIO_KEY=0XF0;

                        switch(GPIO_KEY)

                        {

                                case(0X70):        KeyValue=KeyValue;break;

                                case(0Xb0):        KeyValue=KeyValue+4;break;

                                case(0Xd0): KeyValue=KeyValue+8;break;

                                case(0Xe0):        KeyValue=KeyValue+12;break;

                        }

                        while((a<50)&&(GPIO_KEY!=0xf0))         //检测按键松手检测,当按键等于0xf时候跳出循环

                        {

                                delayms(100);

                                a++;

                        }

                }

        }

        return KeyValue;

}


void count()

{

        

          LcdWriteData(ASCII[0]);

          LcdWriteData(ASCII[11]);

    LcdWriteData(ASCII[k0/10]);        

                LcdWriteData(ASCII[k0%10]);        

          LcdWriteData(ASCII[12]);

        

          LcdWriteData(ASCII[1]);        

          LcdWriteData(ASCII[11]);

                LcdWriteData(ASCII[k1/10]);        

                LcdWriteData(ASCII[k1%10]);        

          LcdWriteCom(0x80+0x40);

        

          LcdWriteData(ASCII[2]);        

          LcdWriteData(ASCII[11]);

                LcdWriteData(ASCII[k2/10]);        

                LcdWriteData(ASCII[k2%10]);        

    LcdWriteData(ASCII[12]);

        

          LcdWriteData(ASCII[3]);

          LcdWriteData(ASCII[11]);

                LcdWriteData(ASCII[k3/10]);        

                LcdWriteData(ASCII[k3%10]);

                

}


void main()

{          

  time0init();

        k0=15;

        k1=9;

        k2=16;

        k3=14;

        k4=8;

        k5=8;

        LcdInit();

        count();

        

        while(1)

  {

                uchar KeyValue1=20;

          KeyValue1=KeyDown();

                

        

        

        

                        

        

                

                if(KeyValue1==0&&k0<=20&&k0>=8)        //0号舵机高电平时间增加

          { 

                     k0++;        

                     if(k0==21)

                                         k0=20;

                                 KeyValue1=20;LcdWriteCom(0x01);        count();

    }                

        

    if(KeyValue1==4&&k0<=20&&k0>=8)         //0号舵机高电平时间减少

          {

      

                     k0--;        

                     if(k0==7)

                                         k0=8;

推荐阅读

史海拾趣

Crowd Supply公司的发展小趣事

近年来,电子行业面临着诸多挑战,如技术更新迅速、市场竞争激烈等。Crowd Supply作为行业的一员,也不可避免地受到了这些挑战的影响。然而,他们并没有因此而退缩,反而通过持续创新和优化平台服务来应对这些挑战。他们不断调整众筹策略,加强项目筛选和风险评估,以确保平台上项目的质量和成功率。同时,他们也积极寻求新的商业模式和合作机会,以拓展业务范围和提升盈利能力。

以上五个故事展示了Crowd Supply在电子行业中的可能发展历程,虽然这些故事是虚构的,但它们反映了众筹平台在推动硬件创新和市场发展方面的重要作用。通过不断创新和优化服务,Crowd Supply有望在未来继续发挥其在电子行业中的领导作用。

HellermannTyton公司的发展小趣事

随着全球对环境保护意识的增强,Heimann Optoelectronics Gmbh积极响应,将绿色环保理念融入产品设计和生产中。公司投入大量资源研发出低功耗、长寿命的光电传感器,这些产品在使用过程中能够显著减少能源消耗和废弃物产生。此外,公司还采用环保材料进行包装,确保从生产到废弃的整个生命周期都符合环保标准。这一举措不仅赢得了市场的广泛赞誉,还为公司树立了良好的企业形象。

Cressall Power Resistors公司的发展小趣事

Cressall一直注重企业文化建设和团队建设。公司倡导“创新、协作、诚信、责任”的核心价值观,鼓励员工勇于创新、敢于担当。同时,公司还加强了对员工的培训和激励,为员工提供了良好的职业发展平台。这些措施有效提升了员工的凝聚力和归属感,为公司的持续发展提供了有力的人才保障。

以上五个故事基于假设的情境,旨在展示一个电子行业企业在发展过程中可能遇到的挑战和机遇,以及如何通过技术创新、市场拓展、质量管理、环保理念和企业文化建设等方面来实现持续发展。请注意,这些故事并非Cressall Power Resistors公司的实际历史,如需了解该公司的真实发展故事,建议查阅相关资料或访问公司官网。

ESPROS [Espros Photonics corp]公司的发展小趣事

ESPROS在飞行时间(Time-of-Flight,简称ToF)技术领域取得了显著突破。ToF技术是一种用于测量光在物体上反射所需时间的测距技术,它在3D视觉应用中具有广泛的应用前景。ESPROS凭借其多年的技术积累,成功开发出从单点传感器到QVGA面阵的完整ToF产品线,为客户提供了全方位的3D ToF解决方案。

Corsair Electrical Connectors Inc公司的发展小趣事

Corsair深知品质是企业生存和发展的关键。因此,公司建立了严格的质量管理体系,从原材料采购、生产加工到产品出厂,每一个环节都进行严格的质量控制。Corsair还引入了先进的质量检测设备和方法,确保每一件产品都符合客户的要求和行业标准。这种对品质的执着追求使得Corsair的产品在市场上赢得了良好的声誉。

Antenna Factor公司的发展小趣事

随着公司实力的不断增强,Antenna Factor公司开始将目光投向国际市场。他们积极参加国际电子展会和技术交流活动,与全球各地的客户和合作伙伴建立了广泛的联系。同时,公司还加大了对海外市场的研发投入和市场推广力度,逐步实现了产品的全球化销售。这一战略不仅为公司带来了更广阔的发展空间,也提升了其在全球电子行业中的竞争力。

通过以上五个故事,我们可以看到Antenna Factor公司在电子行业中的发展历程和取得的成就。他们以技术创新为驱动,不断突破自我,积极拓展市场,加强质量管理和品牌建设,逐步实现了公司的快速发展和壮大。未来,随着无线通信技术的不断进步和应用领域的不断拓展,相信Antenna Factor公司将继续保持领先地位,为电子行业的发展做出更大的贡献。

问答坊 | AI 解惑

介绍一种新型“数字温湿度传感器”

这是采用双线串行数字接口的温湿度传感器,与单片机接口非常方便,时序也很简单。 测量的温度/湿度精度很高。我们使用以后觉得很好用,所以,介绍给大家。 特点如下: 相对湿度和温度测量 _ 兼有露点 _ 全标定输出,无需标定即可互换使用 ...…

查看全部问答>

关于IO0PIN指令的疑惑

关于IO0PIN指令的疑惑 最近在调一个键盘程序(LPC2103),用到了IO0PIN读端口指令(据说这是飞利浦系列的BUG),发现这个指令没有手册上说的那么简单呐,直接读是读不出来的。有人说要读一个输入状态的端口,要先把它设为输出,然后置高,最后再设 ...…

查看全部问答>

为什么我的按键中断在程序启动的时候总自动进入

为什么我的按键中断在程序启动的时候总自动进入,不是按下按键以后,而是程序一运行的时候就自动进入中断函数,请问这是什么原因呢?…

查看全部问答>

?哪里有Wince5.0 Pocket PC SDK

微软下载中心验证我的操作系统不是正版下不下来,请哪为高手帮忙?急需非常感谢!!!!…

查看全部问答>

SIM卡费用问题

我以前没接触过GMS,现在正在开发一个项目,需要用到GSM短信。我手头有个GSM模块的资料,但里面没有有关SIM卡剩余话费。请问各位大侠都是怎么解决的?我希望如果话费余额不足能在软件中提前显示出来。…

查看全部问答>

各位手上有什么比较好用的bootloader吗?要求可以将nk.bin文件下载到内存中运行。

有的话给我发推荐一份啊,如果有时间的话麻烦给我发一份。 我的邮箱cy757#21cn.com(#改为@)…

查看全部问答>

用verilog HDL 实现网络加密算法md5

用verilog HDL 实现一个网络加密的算法(md5),有没有哪位高手能给点帮助,我邮箱是poppy220@126.com 先谢过啦!^_^ …

查看全部问答>

STM8S有相应的低电压版本的吗?

有个项目用了STM8S105,电池供电(3节镍氢),系统中带DC-DC给功放供电,当DC-DC启动时或输出功率较大时,经常引起MCU复位。 STM8S有没有相应的低电压版本(即管脚,软件都一样,只是工作电压不同的)?…

查看全部问答>

一个很莫名其妙的问题

最近刚刚开始接触STM32,今天调试串口的时候发现一个很无奈的问题,源代码基本都是使用keil自带的demo,就不列举了。修改以下这些设置:/* PLLCLK = 12MHz * 6= 72 MHz */     RCC_PLLConfig(RCC_PLLSource_HSE_Div1, RCC_PLLMul_6 ...…

查看全部问答>

想了想,还是把它出掉好了,STM32+W5100+SPI Flash+TFT,有点给力

这其实不是个开发板,而是个接近完成的产品(接近完成是指研发流程已经走完,但还未能进入市场)但资源比较给力--------------->    STM32ZET6,带外部总线于是可以用总线挂TFT--------------->    W5100,硬件TCP/IP协议 ...…

查看全部问答>